权限
任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限.即权限决定用户对文件或者目录的使用范围.在Linux系统中,root的权限是最高的,可操作的权限最大,通常情况下root账号只用于管理系统的重要信息,并不做日常维护工作,所以正确设定用户的权限对系统的安全性尤为重要.
普通权限:
文件目录只针对三类用户:
u :属主 g :属组 o :其他用户
而权限分为三种:
r :读readable w :写writable x :写excutable
权限对文件与目录的含义:
文件:
r(可读权限):可以使用类似cat等命令查看其文件的内容
w(可写权限):可以编辑或删除其文件
x(可执行) :可以运行此文件
目录:
r: 可以对此目录查看目录内的文件内容,如 ls
w:可以在此目录创建文件或目录,但必须有x权限的前提下
x:可以使用cd切换进此目录或 ls -l 查看目录内文件的详细信息
用命令 # ll file 可查看file 的权限以及属主,组
[root@localhost testdir]# ll total 0 -rw-r--r--. 1 root root 0 Aug 3 22:59 fi [root@localhost testdir]#
一组权限为rwx,用八进制来表示一下; 注意:此排序是不能乱排序的。
权限 二进制 八进制
rwx 111 7
–x 001 1
-w- 010 2
-wx 011 3
r– 100 4
r-x 101 5
rw- 110 6
rwx 111 7
如此一来,则每三位权限为一组就可以直接用数字来表示了.如上命令 fi 文件权限为 0644
修改文件权限: chmod
root可以修改如何文件或者目录的权限,其他用户只能修改属主是自己的文件或者目录
chmod [OPTION]… OCTAL-MODE FILE…
-R: 递归修改权限
chmod [OPTION]… MODE[,MODE]… FILE…
chmod可以直接修改权限或者赋予某一项权限:
修改一类用户的所有权限:
u= g= o= ug= a= u=,g=
修改一类用户某位或某些位权限
u+ u- g+ g- o+ o- a+ a- + –
chmod [OPTION]… –reference=RFILE FILE…
参考RFILE文件的权限,将FILE的修改为同RFILE;
更改文件的属主,属组 (change ower ) chown
1. chown [OPTION]… [OWNER][:[GROUP]] FILE… //修改文件的属主或者属组
# chown
2. chown [OPTION]… –reference=RFILE FILE…
# chown --reference=/etc/inittab /etc/passwd
更改组 (change group ) chgrp :
chgrp [OPTION]… GROUP FILE…
# chgrp bin f1 //修改文件f1属组为 bin , 此处属组可以用Gid代替
反掩码 :umask
在Linux系统里,以root身份创建file的默认权限为644,而目录为755,普通用户创建文件是默认是664,目录默认权限是775.次处造成两者权限不同是因为umask-反掩码
文件的最高权限为777,目录的最高权限为666(目录没有执行x权),系统会根据发起创建文件或者目录的用户来判断使用的umask值,然后以(777-umask)|(666-umask)得到的值来作为文件的权限
所以,umask值是从文件或者目录上屏蔽掉最大权限相应的位,从而得出默认权限
dir :777-umask
file:666-umask (若得出的三位数中有奇数则加1,偶数保留)
umask值是 /etc/bashrc里定义的,用一个判断语句来决定的,当登录的用户UID小于0时使用022作为umask值,否则使用002作为umask值,然后在与系统默认创建文件和目录的值(666/777)进行减法运算,最后得出的就是文件或目录的值。
//这就是判断umask值的if else语句
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002
else
umask 022
fi
umask 相关命令:
umask: 查看
umask #: 设定
umask 002
umask –S 模式方式显示
umask –p 输出可被调用
全局设置: /etc/bashrc 用户设置: ~/.bashrc
特殊权限 SUID SGID Sticky :
SUID 权限:
执行 设置SUID 权限的文件,执行者可以以文件属主的身份执行;然而suid只对二进制可执行程序有效,而设置在目录上无意义
权限设定: chmod u+s FILE
chmod u-s FILE
特设权限位:1—
SGID 权限:
与SUID类似,可作用于目录
特设权限位:2—
Sticky 位:
在目录设置Sticky 位,只有文件的所有者或root可以删除该文件,其他人无法删除文件,Sticky设置在文件上无意义
chmod o+t DIR…
chmod o-t DIR…
特设权限位:4—
权限位映射
SUID: user,占据属主的执行权限位
s: 属主拥有x权限
S:属主没有x权限
SGID: group,占据属组的执行权限位
s: group拥有x权限
S: group没有x权限
Sticky: other,占据other的执行权限位
t: other拥有x权限
T: other没有x权限
设定文件特定属性
chattr +i 不能删除,改名,更改
chattr +a 只能增加
lsattr 显示特定属性
访问控制列表ACL:
ACL: Access Control List,实现灵活的权限管理
除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
CentOS7.0默认创建的xfs和ext4文件系统有ACL功能。
CentOS7.X之前版本,默认手工创建的ext4文件系统无ACL功能。需手动增加:
tune2fs –o acl /dev/sdb1
mount –o acl /dev/sdb1 /mnt
ACL生效顺序:所有者,自定义用户,自定义组,其他人
为多用户或者组的文件和目录赋予访问权限rwx
mount -o acl /directory
getfacl file |directory
setfacl -m u:wang:rwx file|directory
setfacl -Rm g:sales:rwX directory
setfacl -M file.acl file|directory
setfacl -m g:salesgroup:rw file| directory
setfacl -m d:u:wang:rx directory
setfacl -x u:wang file |directory
setfacl -X file.acl directory
ACL文件上的group权限是mask 值(自定义用户,自定义组,拥有组的最大权限) ,而非传统的组权限 ====>即组的权限只能与mask值相等或者比mask低
# setfacl -m m::rw file/dir
# setfacl -q
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 #getfacl -R /tmp/dir1
原创文章,作者:hunter,如若转载,请注明出处:http://www.178linux.com/28501
评论列表(1条)
总结的很好,如果能有一些代码高亮就更好的。