详细参考: https://blog.csdn.net/u010230019/article/details/132224998
用户信息:/etc/passwd
密码信息:/etc/shadow
群组信息:/etc/group
群组密码:/etc/gshadow
用户信息也可以通过getent
获取
[root@server yurq]# getent shadow yurq root
yurq:$6$kKNzhuprgmIZd5Ma$L5mUUIwFM8gUDztJOfvWWGyviUpvWSS1X6q/L5Ss5h5tOyHx/5wl9MLBLdVsYtZygeZHEOFeHdIMI.eLYYuWB.:19608:0:99999:7:::
root:$6$rgRTLqdztP39Kgqd$WGy53xGZ2gg1Fr8BalJbSibzzSiI5aGk2ighMuiyP1Ofn1ZW20ZdzHkfx0qo8b3yDHe4zUmJkYfeSiIxWhtxx/::0:99999:7:::
判断用户是否存在
[root@server yurq]# id yurq
uid=1000(yurq) gid=1000(yurq) groups=1000(yurq),10(wheel)
useradd [options] username
-d
-M
-G
-g
-s
-u
-m
-c
passwd username #隐式
echo 'password'|passwd --stdin username #显式
-l #锁定
-u #解锁
-S #显示信息
-d #清除密码
锁定的账号登录会提示
[alex@server ~]$ su - yurq
Password:
su: Authentication failure
usermod [options] username
-c
-s
-g
-u
-d
-L#锁定用户
-U#解锁用户
被锁定的账号同样不能登录,提示认证失败
[root@server yurq]# passwd -l yurq
Locking password for user yurq.
passwd: Success
[root@server yurq]# passwd -S yurq
yurq LK 2023-09-08 0 99999 7 -1 (Password locked.)
[root@server yurq]# passwd -u yurq
Unlocking password for user yurq.
passwd: Success
[root@server yurq]# passwd -S yurq
yurq PS 2023-09-08 0 99999 7 -1 (Password set, SHA512 crypt.)
锁定前后
删除用户
userdel [options] username
-f #强制,即使登录
-r #删除家目录
组管理
groupadd groupname
groupdel groupname
groups groupname #查看组信息
gpasswd -a username groupname #添加用户到组
gpasswd -d username groupname #从组中删除用户
详细参考 https://blog.csdn.net/u010230019/article/details/132224998
[root@study ~]# chage [-ldEImMW] 账号名
选项与参数:
-l :列出该账号的详细密码参数;
-d :后面接日期,修改 shadow 第三字段(最近一次更改密码的日期),格式 YYYY-MM-DD,(0为下次登录需修改,常用)
-E :后面接日期,修改 shadow 第八字段(账号失效日),格式 YYYY-MM-DD,(-1 永不过期,1 立即过期)
-I :后面接天数,修改 shadow 第七字段(密码失效日期)
-m :后面接天数,修改 shadow 第四字段(密码最短保留天数)
-M :后面接天数,修改 shadow 第五字段(密码多久需要进行变更)
-W :后面接天数,修改 shadow 第六字段(密码过期前警告日期)
普通用户的权限往往不够,例如有些命令只能root执行,所以可以让root对普通用户进行授权
详细参考:https://blog.csdn.net/u010230019/article/details/132269498
普通用户可以通过root添加授权,来实现root的权限,并且不需要知道root密码。有两种方式:
这两种方式添加的内容格式一致,格式:
user1 主机名A=(user2) 命令1,命令2,命令3...
这里授权表明用户user1在主机A拥有user2的执行命令1,命令2,命令3的权限
套用到root,则为
yurq server.rhce.cc=(root) /bin/mount
此时yurq就拥有root执行mount的权限,这里需要指明命令的绝对路径
此时yurq在server.rhce.cc可以执行mount命令,但是执行的时候需要通过sudo命令,例如
sudo mount /dev/ /mnt/sda
但此时,仍需要输入yurq的密码,如下修改则免除密码
yurq server.rhce.cc=(root) NOPASSD: /bin/mount
如果需要赋权的指令较多,总不能加一堆吧,可通过ALL这个关键字实现,这个ALL可以替代主机名,用户和指令
yurq ALL=(ALL) NOPASSWD: ALL
yurq 不论来自哪部主机登入,他可以变换身份成为任何人,且可以进行系统上面的任何指令
想管理一个赋权账号,就需要有时间限制,在/etc/sudoers中,添加
Defaults timestamp_timeout=N
可以设置密码保留时间为N分钟(默认为5分钟),此时配置文件中不能有NOPASSD:
字段
用户可以通过sudo -k
可以立即清除保留的密码
用户可以通过sudo -i
切换到root用户,如果配置了NOPASSD:
可以无密码直接切换
上下键
选择第一行,按e
键进入grub编辑界面,编辑grub菜单ro
改为rw
,行尾加init=/bin/bash
,按ctrl+x
进行启动mount -o remount, rw /
vi etc/selinux/config #把 enforcing 改为 disable
exec /sbin/reboot
命令重启不好用,可以直接手动重启所有者和所属组又称为属主和属组,这里一般指文件或目录的权限
详细参考 https://blog.csdn.net/u010230019/article/details/132208697
改变属主和属组命令为chown
,格式
chown [OPTION]... [OWNER][:[GROUP]] FILE...
-R #递归,通常针对目录
这里指的一提的是属主和属组之间的关联符号,官方默认是
:
,但也可以用.
,例如chown user.group file 等价于chown user:group file
修改群组有单独的命令chgrp
,格式
chgrp user file...
一般都是通过ls -l
或ll
查看,输入alias
可以看到ll
是ls -l
的别名
[root@server ~]# alias
...
alias ll='ls -l --color=auto'
关于ls -l
查看的文件权限一共九位,分三组。另外第10位.
,也需要注意其含义,这里不展开写了,参考
https://blog.csdn.net/u010230019/article/details/132208697
修改权限一般使用chmod
,格式
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
-R #递归
这里对权限的修改,格式还是比较多的
字符权限
对应所属 | 赋值符 | 类型 | 含义 |
---|---|---|---|
a | +,-,= | [r|w|x] | 对所有所属(属主,属组,其他人)进行操作 |
u | +,-,= | [r|w|x] | 对属主进行操作 |
g | +,-,= | [r|w|x] | 对属组进行操作 |
o | +,-,= | [r|w|x] | 对其他人进行操作 |
八进制数字权限
可对[a,u,g,o]
直接使用=
进行数字赋权
r -- 4 #读
w -- 2 #写
x -- 1 #执行
--- -- 0 #无任何权限,我们可以看到/etc/shadow每组都是这个权限
目录的默认权限是755,文件的默认权限是644,这些权限是根据umask
计算获得
[root@server ~]# umask
0022
[root@server ~]# umask -S
u=rwx,g=rx,o=rx
修改umask
可以直接赋值,或者修改/etc/bashrc
umask 002
umask 过滤计算结论:
这里主要说suid,sgid,sbit,详细参考:https://blog.csdn.net/u010230019/article/details/132171439
SUID 权限仅对
二进制程序
(binary program)有效;
执行者对于该程序需要具有 x 的可执行权限;
本权限仅在执行该程序的过程中有效 (run-time);
执行者将在执行该程序过程中具有拥有者 (owner) 的权限。
修改方法:
chmod u[+|-]s binary_program
这个有什么用呢?举个例子,我们可以修改自己的登录密码,却不用联系管理员,因为/bin/passwd
就设置了SUID
[root@server yurq]# ll /bin/passwd
-rwsr-xr-x. 1 root root 32648 Aug 10 2021 /bin/passwd
再举个例子,默认文件权限644,其他人是否可以修改文件内容呢?理论上不行,但是可以如下操作:
[root@server opt]# touch testfile
[root@server opt]# ll testfile
-rw-r--r-- 1 root root 10 Oct 19 22:14 testfile
[root@server opt]# chmod u+s /bin/vim
[root@server opt]# ll /bin/vim
-rwsr-xr-x. 1 root root 4025616 Feb 24 2022 /bin/vim
[root@server opt]# su - yurq
[yurq@server ~]$ vim /opt/testfile
[yurq@server ~]$ cat /opt/testfile
testfile1
[yurq@server ~]$ exit
logout
[root@server opt]# chmod u-s /bin/vim
[root@server opt]# su - yurq
[yurq@server ~]$ vim /opt/testfile
...
"/opt/testfile"
"/opt/testfile" E212: Can't open file for writing
Press ENTER or type command to continue
[yurq@server ~]$ exit
logout
SGID 对
二进制程序
有用;
程序执行者对于该程序来说,需具备 x 的权限;
执行者在执行的过程中将会获得该程序群组的支持!
参考SUID的示例,这个很好理解
如果是目录的话:
用户若对于此目录具有 r 与 x 的权限时,该用户能够进入此目录;
用户在此目录下的有效群组(effective group)将会变成该目录的群组;
用途:若用户在此目录下具有 w 的权限(可以新建文件),则使用者所建立的新文件,该新文件的群组与此目录的群组相同。
修改方法:
chmod g[+|-]s binary_program
当用户对于此目录具有 w, x 权限,亦即具有写入的权限时;
当用户在该目录下建立文件或目录时,仅有自己与 root 才有权力删除该文件
即如果某个目录o位置上设置t时,那么此目录中的文件除所有者和root外,其他用户即使对此文件具有所有权限,也无法删除此文件
可以查看/tmp
,也不难理解
[root@server opt]# ll -d /tmp/
drwxrwxrwt. 21 root root 4096 Oct 19 22:35 /tmp/
验证:
以 root 登入系统,并且进入 /tmp 当中;
touch test,并且更改 test 权限成为 777 ;
以一般使用者登入,并进入 /tmp;
尝试删除 test 这个文件!
修改方法:
chmod o[+|-]s binary_program
系统中还存在一些隐藏权限,这些权限的设置对root也是生效的。查看命令lsattr
,格式:
lsattr [ -RVadlpv ] [ files... ]
-a :将隐藏文件的属性也秀出来;
-d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名;
-R :连同子目录的数据也一并列出来!
修改命令chattr
,格式:
chattr [+-=][ASacdistu] 文件或目录名称
选项与参数:
+ :增加某一个特殊参数,其他原本存在参数则不动。
- :移除某一个特殊参数,其他原本存在参数则不动。
= :设定一定,且仅有后面接的参数
a :当设定 a 之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有 root 才能设定这属性
c :这个属性设定之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,
但是在储存的时候,将会先进行压缩后再储存(看来对于大文件似乎蛮有用的!)
i :这个 i 可就很厉害了!他可以让一个文件『不能被删除、改名、设定连结也无法写入或新增数据!』
对于系统安全性有相当大的帮助!只有 root 能设定此属性
s :当文件设定了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间,
所以如果误删了,完全无法救回来了喔!
u :与 s 相反的,当使用 u 来配置文件案时,如果该文件被删除了,则数据内容其实还存在磁盘中,
可以使用来救援该文件喔!
[root@server yurq]# ll 123
-rw-rw-rw- 1 root root 0 Oct 19 21:51 123
[root@server yurq]# chattr +i 123
[root@server yurq]# su - yurq
[yurq@server ~]$ echo 123>123
-bash: 123: Operation not permitted
[yurq@server ~]$ exit
logout
[root@server yurq]# chattr -i 123
[root@server yurq]# su - yurq
[yurq@server ~]$ echo 1234 >123
[yurq@server ~]$ cat 123
1234
[yurq@server ~]$ lsattr 123
---------------------- 123
[root@server yurq]# chattr +a 123
[root@server yurq]# lsattr 123
-----a---------------- 123
[root@server yurq]# su - yurq
[yurq@server ~]$ echo 12345 > 123
-bash: 123: Operation not permitted
[yurq@server ~]$ echo 12345 >> 123
[yurq@server ~]$ cat 123
1234
12345
详细可查看https://blog.csdn.net/u010230019/article/details/132269498
ACL 是 Access Control List 的缩写,主要的目的是在提供传统的 owner,group,others 的read,write,execute 权限之外的细部权限设定。ACL 可以针对单一使用者,单一文件或目录来进行r,w,x 的权限规范,对于需要特殊权限的使用状况非常有帮助。
说白了,就是直接对用户进行权限设置,而非依托于属主,属组和其他
查看ACL使用getfacl
,格式
getfacl [options] file
-c #去除以#行首的行
设置ACL使用setfacl
,格式
setfacl [-bkRd] [{-m|-x} acl参数] 目标文件名
选项与参数:
-m :设定后续的 acl 参数给‘文件’使用,不可与 -x 合用;
-x :删除后续的 acl 参数,不可与 -m 合用;
-b :移除『所有的』 ACL 设定参数;
-k :移除『预设的』 ACL 参数,关于所谓的『预设』参数于后续范例中介绍;
-R :递归设定 acl ,亦即包括次目录都会被设定起来;
-d :设定『预设 acl参数』的意思!只对‘目录’有效,在该目录新建的数据会引用此默认值
『 u:[使用者账号列表]:[rwx] 』
[root@server yurq]# getfacl yurq -c
user::rw-
group::r--
other::r--
[root@server yurq]# setfacl -m u:alex:rwx yurq
[root@server yurq]# getfacl yurq -c
user::rw-
user:alex:rwx
group::r--
mask::rwx
other::r--
[root@server yurq]# su - alex
[alex@server ~]$ echo 123 > /home/yurq/yurq
-bash: /home/yurq/yurq: Permission denied
[alex@server ~]$ ll /home/yurq/
ls: cannot open directory '/home/yurq/': Permission denied
[alex@server ~]$ exit
logout
[root@server yurq]# ll /home/yurq/ -d
drwx------. 15 yurq yurq 4096 Oct 20 17:39 /home/yurq/
[root@server yurq]# chmod o+rwx /home/yurq/
[root@server yurq]# su - alex
[alex@server ~]$ echo 123 > /home/yurq/yurq
[alex@server ~]$ ll /home/yurq/yurq
-rw-rwxr--+ 1 root root 4 Oct 20 17:54 /home/yurq/yurq
如果使用setfacl -m u::rwx file
,则为所有用户加rwx
setfacl -m g:mygroup1:rx acl_test1
[root@study ~]# setfacl -m m:r acl_test1
[root@study ~]# getfacl acl_test1
# file: acl_test1
# owner: root
# group: root
user::rwx
user:vbird1:r-x #effective:r-- <==vbird1+mask 均存在者,仅有 r 而已,x 不会生效
group::r--
group:mygroup1:r-x #effective:r--
mask::r--
other::r--
实际用户权限会和有效权限mask取余
[root@study ~]# setfacl -m d:u:myuser1:rx /srv/projecta
[root@study ~]# getfacl /srv/projecta
# file: srv/projecta
# owner: root
# group: projecta
# flags: -suser::rwx
user:myuser1:r-x
group::rwx
mask::rwx
other::---
default:user::rwx
default:user:myuser1:r-x
default:group::rwx
default:mask::rwx
default:other::---
[root@study ~]# cd /srv/projecta
[root@study projecta]# touch zzz1
[root@study projecta]# mkdir zzz2
[root@study projecta]# ll -d zzz*
-rw-rw----+ 1 root projecta 0 Jul 21 17:50 zzz1
drwxrws---+ 2 root projecta 6 Jul 21 17:51 zzz2
# 看吧!确实有继承喔!然后我们使用 getfacl 再次确认看看!
[root@study projecta]# getfacl zzz2
# file: zzz2
# owner: root
# group: projecta
# flags: -suser::rwx
user:myuser1:r-x
group::rwx
mask::rwx
other::---
default:user::rwx
default:user:myuser1:r-x
default:group::rwx
default:mask::rwx
default:other::---
透过这个『针对目录来设定的默认 ACL 权限设定值』的项目,我们可以让这些属性继承到次目录底下呢! 非常方便啊!那如果想要让 ACL 的属性全部消失又要如何处理?透过『 setfacl -b 檔名 』即可啦!
权限内容远远不止介绍中的内容,可参考
https://blog.csdn.net/u010230019/article/details/132208697