首页 > 代码库 > Linux用户和组权限管理
Linux用户和组权限管理
一、文件的权限
文件的权限主要针对三类对象进行定义
owner:属主u; group:属组g; other :其他o
每个文件针对每类访问者都定义了三种权限:
r:Readable w: Writable x: eXcutable
对文件来说
r: 可使用文件查看类工具获取其内容
w: 可修改其内容
x: 可以把此文件提请内核启动为一个进程
对目录来说
r : 可以使用ls查看此目录中文件列表
w: 可在此目录中创建文件,也可删除此目录中的文件
x: 可以使用ls -l查看此目录中文件列表,可以cd进入此
目录tips:此外还有X,用于只给目录x权限,不给目录内文件x权限
如图所示文件属性
-rw- r-- r--
左三位:定义user(owner)的权限,属主权限 中三位:定义group的权限,属组权限 右三位:定义other的权限,其他的权限
左第一个 -文件类型提示符, 代表该文件为普通文件。后9位分别对应:该文件对属主个权限为读写,对属组和其他人的权限为只读。
八进制数字表示权限设置方法
--- 000 0 --x 001 1 -w- 010 2 -wx 011 3 r-- 100 4 r-x 101 5 rw- 110 6 rwx 111 7
例如:640: rw-r-----
755: rwxr-xr-x
二、文件权限的管理
修改文件的属主: chown
chown [OPTION]... [OWNER][:[GROUP]] FILE...
用法:
OWNER #修改文件属主
OWNER:GROUP #修改文件属主和属组
:GROUP #修改文件属组
命令中的冒号可用 . 替换
-R: 递归
chown [OPTION]... --reference=RFILE FILE...
参考RFILE文件的属主,将FILE的修改为同RFILE
修改文件的属组: chgrp
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
-R 递归
修改文件的权限:
chmod [OPTION]... OCTAL-MODE FILE...
-R: 递归修改权限
chmod [OPTION]... MODE[,MODE]... FILE...
MODE:
修改一类用户的所有权限:
u= g= o= ug= a= u= , g=
修改一类用户某位或某些位权限
u+ u- g+ g- o+ o- a+ a- + -
chmod [OPTION]... --reference=RFILE FILE...
参考RFILE文件的权限,将FILE的修改为同RFILE
权限设置示例
chgrp sales testfile #修改文件属组为sales chown root:admins testfile #修改文件属主root,属组admins chmod u+wx,g-r,o=rx file #修改文件对属主加wx权限,属组去掉r权限,其他人权限设置为rx chmod -R g+rwX /testdi #递归修改目录属组权限为rwx,目录内文件不添加x权限 chmod 600 file #修改文件对属主权限为rw,其他人无权限 chown mage testfile #修改文件属主为mage
新建文件和目录的默认权限
umask值 可以用来保留在创建文件权限
新建FILE权限: 666-umask
如果所得结果某位存在执行(奇数)权限,则将其权限+1
新建DIR权限: 777-umask
非特权用户umask是 002
root的umask 是 022
umask: 查看已设定umask值
umask #: 设定umask值
例:umask 002 设置umask值为002
umask –S 模式方式显示 例:u=rwx,g=rx,o=rx
umask –p 输出可被调用
全局设置: /etc/bashrc 用户设置: ~/.bashrc
Linux文件系统上的特殊权限
1、可执行文件上SUID权限
任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限, 启动为进程之后,其进程的属主为原程序文件的属主。用户在使用具有SUID权限的二进制程序时将临时继承程序拥有者的权限。
SUID只对二进制可执行程序有效
SUID设置在目录上无意义
权限设定:
chmod u+s FILE...
chmod u-s FILE...
2、可执行文件上SGID权限
任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限, 启动为进程之后,其进程的属主为原程序文件的属组。用户在使用具有SUID权限的二进制程序时将临时继承程序所属组的权限。
权限设定:
chmod g+s FILE...
chmod g-s FILE...
3、目录上的SGID权限
默认情况下,用户创建文件时,其属组为此用户所属的主组。 一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组。
通常用于创建一个协作目录
权限设定:
chmod g+s DIR...
chmod g-s DIR...
4、Sticky 位
具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
在目录设置Sticky 位,只有文件的所有者或root可以删除该文件。
sticky 设置在文件上无意义
权限设定:
chmod o+t DIR...
chmod o-t DIR...
例如:
ls -ld /tmp
drwxrwxrwt 12 root root 4096 Nov 2 15:44 /tmp
tips:特殊权限位用数字法单独计算
SUID : 4
SGID : 2
Sticky:1
例:设置文件SUID权限 chmod 4777 /tmp/a.txt
设置目录Sticky位 chmod 1777 /tmp
权限位映射
SUID: user,占据属主的执行权限位
s : 属主拥有x权限
S:属主没有x权限
SGID: group,占据属组的执行权限位
s: group拥有x权限
S: group没有x权限
Sticky: other,占据other的执行权限位
t: other拥有x权限
T: other没有x权限
三、ACL 访问控制列表
特定场景需要对用户进行更为细致的权限管理时,仅属主、属组、其他三个分类是不够的。这时我们需要采用ACL技术对特定用户的管理来进行规划。
ACL: Access Control List,能够实现灵活的权限管理,除了文件的所有者,所属组和其它人,可以对更多的用户设置权限。系统是否支持ACL与存储文件系统有关,CentOS7 默认创建的xfs和ext4文件系统具有ACL功能,CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加:
tune2fs –o acl /dev/sdb1
mount –o acl /dev/sdb1 /mnt/test
ACL生效顺序:所有者,自定义用户,自定义组,其他人
为多用户或者组的文件和目录赋予访问权限示例:
getfacl file |directory
#查看文件或目录是否 设置ACL
setfacl -m u:wang:rwx file|directory
#设置文件/目录对王用户的权限为rwx (-m修改)
setfacl -Rm g:sales:rwX directory
#递归修改目录对sales组权限为rwx(目录内文件不设置x权限)
setfacl -M file.acl file|directory
#批量设置多个文件/目录的ACL (file.acl文件内容例:u:wang:rwx)
setfacl -m g:salesgroup:rw file| directory
#设置文件/目录对salesgroup组的权限为rw
ACL文件上的group权限是mask 值(自定义用户,自定义组,拥有组的最大权限) ,而非传统的组权限。
getfacl 可看到特殊权限: flags
通过ACL赋予目录默认x权限, 目录内文件也不会继承x权限
base ACL 不能删除
setfacl -k dir 删除默认ACL权限
setfacl –b file1清除所有ACL权限
getfacl file1 | setfacl --set-file=- file2 复制file1的acl权限给file2
mask只影响除所有者和other的之外的人和组的最大权限Mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)
用户或组的设置必须存在于mask权限设定范围内才会生效
setfacl -m mask::rx file
--set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能象-m一样只是添加ACL就可以
示例:
setfacl --set u::rw,u:wang:rw,g::r,o::- file1
备份和恢复ACL
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息
getfacl -R /tmp/dir1 > acl.txt
setfacl -R -b /tmp/dir1
setfacl -R --set-file=acl.txt /tmp/dir1
setfacl --restore acl.txt
getfacl -R /tmp/dir1
Linux用户和组权限管理