Linux用户与组权限管理
1、Linux权限概念
Linux权限主要分为读、写、执行三种。ls -l可查看文件或目录权限,系统显示r(读取)、w(写入)、x(执行)。通过设置权限来限制哪些用户或用户组可以对特定文件进行相应的操作。
[root@test ~]# ls -l
total 44
-rw-r--r-- 1 root root 15 Dec 23 10:08 1.log
-rw-r--r-- 1 root root 870 May 27 2019 1.sh
-rw-r--r-- 1 root root 216 Dec 23 10:06 2.sh
drwxr-xr-x 3 root root 4096 Feb 26 23:37 back
drwxr-xr-x 2 root root 4096 Oct 24 09:40 mypackages
第一列第一个字符代表文件类型:-:普通文件;d:目录;l:链接文件;b或c代表设备。第二至第九个字符代表权限,三位一组,分别代表所有者权限(user)、所属组权限(group)、其他账户权限(other)。
第二列:链接数量或子目录个数。
第三列:文档所有者;第四列:文件所属组;第五列:容量(大小);
第六-八列:文档最近被修改时间(月-日-时:分);
第九列:文档名称。
权限名称(代号) |
对文件作用 |
对目录作用 |
r(4) |
可读取文件内容 |
可列出目录内容 |
w(2) |
可修改文件内容 |
可在目录中创建删内容 |
x(1) |
可作为命令执行 |
可访问目录内容 目录必须有执行权限 |
2、用户与组权限相关命令
2.1用户及组权限管理命令
2.1.1 权限修改chmod命令
描述:修改某个用户、组对文件或目录权限。
用法:chmod [选项] 权限 [文件/目录]
主要参数:
必要参数 |
作用 |
-c |
当发生改变时,报告处理信息 |
-f |
不输出错误信息 |
-R |
递归处理指定目录及其子目录下所有文件 |
-v |
显示详细处理信息 |
--reference=rfile |
根据参考文档设置权限 |
权限范围:
权限范围参数 |
作用 |
u |
目录或文件所有主 |
g |
目录或文件所有组 |
o |
目录或文件其他用户或群组 |
a |
所有用户及群组 |
Eg:
[root@test ~]# ls -l 1.sh
-rwxrwxrwx 1 root root 870 May 27 2019 1.sh
(1)修改1.sh文件所有人的权限均为可读可写
[root@test ~]# chmod a=rw 1.sh
[root@test ~]# ls -l 1.sh
-rw-rw-rw- 1 root root 870 May 27 2019 1.sh
(2)修改1.sh的所有人权限都为可读、可写、可执行
[root@test ~]# chmod a=rwx 1.sh
[root@test ~]# chmod 777 1.sh
(3)修改1.sh所有组无执行权限
[root@test ~]# chmod g-x 1.sh
(4)修改1.sh所有组有执行权限
[root@test ~]# chmod g+x 1.sh
(5)修改1.sh所有组无执行权限,其他只有读权限
[root@test ~]# chmod g-x,o-wx 1.sh
2.1.2 属主/组修改chown命令
描述:修改文件或目录所有主或所有组,root用户使用。
用法:chown [选项][所有者]:[所有组] [文件/目录]
主要参数:
必要参数 |
作用 |
-c |
当发生改变时,报告处理信息 |
-f |
不输出错误信息 |
-R |
递归处理指定目录及其子目录下所有文件 |
-v |
显示详细处理信息 |
-h |
修复符号链接 |
--reference=rfile |
根据参考文档设置权限 |
Eg:
[root@test ~]# ls -l 1.sh
-rwxrwxrwx 1 root root 870 May 27 2019 1.sh
(1)修改1.sh文件属主、属组为test
[root@test ~]# chown test:test 1.sh
[root@test ~]# ls -l 1.sh
-rwxrw-rwx 1 test test 870 May 27 2019 1.sh
(2)改变指定目录以及其子目录下的所有文件的拥有者和群组并显示处理信息
[root@test ~]# chown -R -v root:test 1.sh
changed ownership of `1.sh' to root:test
2.1.3 属组修改chgrp命令
描述:可采用群组名称或群组识别码的方式改变文件或目录的所属群组。root用户使用。
用法:chgrp [选项][所有者]:[所有组] [文件/目录]
主要参数:
必要参数 |
作用 |
-c |
当发生改变时,报告处理信息 |
-f |
不输出错误信息 |
-R |
递归处理指定目录及其子目录下所有文件 |
-v |
显示详细处理信息 |
--reference=rfile |
根据参考文档设置权限 |
Eg:
[root@test ~]# ls -l 1.sh
-rwxrwxrwx 1 root root 870 May 27 2019 1.sh
(1)修改1.sh文件由root群组改为test群组
[root@test ~]# ls -l 1.sh
-rwxrw-rwx 1 root root 870 May 27 2019 1.sh
[root@test ~]# chgrp -v test 1.sh
changed group of `1.sh' to test
[root@test ~]# ls -l 1.sh
-rwxrw-rwx 1 root test 870 May 27 2019 1.sh
(2)改变文件2.sh 的群组属性,使得文件2.sh的群组属性和参考文件1.sh的群组属性相同
[root@test ~]# chgrp --reference=1.sh 2.sh
3、Linux特殊权限及掩码
Umask:每个Linux终端都拥有一个umask属性,用于控制新建文件、目录默认权限。默认系统权限掩码为022。在系统中每创建一个文件或者目录,文件默认权限是666,而目录权限则为777,权限对外开放比较大,所以设置了权限掩码之后,默认的文件和目录权限减去umask值才是真实的文件和目录的权限。(目录权限为:777-022=755;文件权限为:666-022=644;)
使用命令:umask可以查看默认权限掩码;
umask -s 023 可重新设置权限掩码。
特殊权限:Linux除了基本权限位为9位权限,还有额外3个特殊权限位。
权限及代号 |
对文件的影响 |
对目录的影响 |
suid(s/4) |
以文件的所属用户身份执行,而非执行文件的用户 |
无 |
sgid(s/2)
|
以文件所属组身份去执行 |
在该目录中创建任意新文件的所属组与该目录的所属组相同 |
sticky(t/1)
|
无 |
对目录拥有写入权限的用户仅可以删除其拥有的文件,无法删除其他用户所拥有的文件 |
Suid:当一个设置了suid位的可执行文件被执行时,以文件所有者的权限来执行,可任意存取文件拥有者可以使用的全部系统资源。
Sgid:当一个设置了sgid位的可执行文件被执行时,该文件具有所有组权限。任意存取整个组所能使用的系统资源。如果一个目录设置了sgid,所有复制到该目录的文件,所有组会变成与目录一样。
Sbit(sticky):当一个文件设置了sbit后,就算其他用户有写权限,
(有执行权限权限的,suid/sgid权限会显示s,否则显示S)
特殊权限设置:
(1)suid:chmod 4755 file 或者chmod u+s file
(2)sgid:chmod 2755 file 或者 chmod g+s file
(3)sticky:chmod 1777 file 或者 chmod o+t file
4、Linux系统ACL访问控制权限
由于Linux系统的基本权限主要针对文档所有者、所属组以及其他用户进行控制。无法针对某个单独账户进行控制。故出现acl(access control list)访问控制列表概念,使用acl针对单一账户进行文档访问权限。
Linux系统使用getfacl查看文档acl权限,使用setfacl设置文档acl权限。
4.1.setfacl/getfacl命令
描述:setfacl设置文档访问控制列表。
用法:setfacl [选项] [{-m|-x}acl条目] [文件/目录]
主要参数:
必要参数 |
作用 |
-b |
删除所有acl条目 |
-m |
添加acl条目,不可与-x同时使用 |
-x |
删除指定acl条目,不可与-m同时使用 |
-R |
递归处理所有文件及子目录 |
-k |
删除默认acl条目 |
描述:gettfacl查看文档访问控制列表。
用法:getfacl [文件/目录]
Eg:
[root@test ~]# ls -l 1.sh
-rwxrwxrwx 1 root root 870 May 27 2019 1.sh
(1)添加acl条目,使用户test对1.sh文件可读可写
[root@test ~]# getfacl 1.sh
# file: 1.sh
# owner: root
# group: test
user::rwx
group::rwx
other::rwx
[root@test ~]# setfacl -m u:test:rw 1.sh
[root@test ~]# getfacl 1.sh
# file: 1.sh
# owner: root
# group: test
user::rwx
user:test:rw- #acl控制权限,test用户有读写权限
group::rwx
mask::rwx #权限掩码
other::rwx
[root@test ~]# ls -l 1.sh
-rwxrwxrwx+ 1 root test 870 May 27 2019 1.sh
[root@test ~]#
(2)添加acl条目,使test组对1.sh文件只读
[root@test ~]# getfacl 1.sh
# file: 1.sh
# owner: root
# group: test
user::rwx
user:test:rw-
group::rwx
mask::rwx
other::rwx
[root@test ~]# setfacl -m g:test:r 1.sh
[root@test ~]# getfacl 1.sh
# file: 1.sh
# owner: root
# group: test
user::rwx
user:test:rw-
group::rwx
group:test:r-- #acl控制权限,test组有可读权限
mask::rwx
other::rwx
[root@test ~]# ls -l 1.sh
-rwxrwxrwx+ 1 root test 870 May 27 2019 1.sh
(3)删除test用户的acl条目
[root@test ~]# getfacl 1.sh
# file: 1.sh
# owner: root
# group: test
user::rwx
user:test:rw-
group::rwx
group:test:r--
mask::rwx
other::rwx
[root@test ~]# setfacl -x u:test 1.sh
[root@test ~]# getfacl 1.sh
# file: 1.sh
# owner: root
# group: test
user::rwx
group::rwx
group:test:r--
mask::rwx
other::rwx
(4)删除所有acl条目
[root@test ~]# getfacl 1.sh
# file: 1.sh
# owner: root
# group: test
user::rwx
group::rwx
group:test:r--
mask::rwx
other::rwx
[root@test ~]# setfacl -b 1.sh
[root@test ~]# getfacl 1.sh
# file: 1.sh
# owner: root
# group: test
user::rwx
group::rwx
other::rwx
个人公众号: