ACL权限
查看分区ACL权限是否开启
# 查询指定分区详细文件系统信息
dump2fs -h /dev/sda5
选项:
-h 仅显示超级块中信息,而不显示磁盘快组的详细信息
结果中的Default mount options中有acl表示开启了ACL
注意dumpe2fs只能查看ext的文件系统
临时开启分区ACL权限
mount -o remount,acl /dev/sda5
永久开启分区ACL权限
# 修改配置文件
vi /etc/fstab
在文件中的defaults后面加入",acl"如下(一般默认开启,无需添加):
UUID=11471313-e029-4391-b991-1df1d461cc81 / xfs defaultsm,acl 0 0
# 重新挂在文件系统或重启系统,使修改生效
mount -o remount /
查看ACL权限
# 查看ACL权限
getfacl 文件名
设定ACL权限
# 设定ACL权限
setfacl 选项 文件名
选项:
-m 设定ACL权限
-x 删除指定的ACL权限
-b 删除所有的ACL权限
-d 设置默认ACL权限
-k 删除默认ACL权限
-R 递归设定ACL权限
递归权限
setfacl -m u:用户名:权限 -R 目录(赋予文件会报错)
递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限。
递归权限只能赋予目录,不能赋予文件
容易带来权限溢出,比如对目录赋予权限rx,文件则会拥有执行权限,所以慎用
默认ACL权限
setfacl -m d:u:用户名:权限 目录文件(赋予文件不会报错,但是没意义)
默认ACL权限的作用是如果给父目录设定了默认的ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限。
设定权限
# 给用户赋予权限
setfacl -m u:用户名:权限 目录文件
例如:setfacl -m u:zdy:rw /zdy
# 给组赋予权限
setfacl -m g:组名:权限 目录文件
删除权限
# 删除指定用户的ACL权限
setfacl -x u:用户名 目录文件
# 删除指定用户组的ACL权限
setfacl -x g:组名 目录文件
# 删除所有ACL权限
setfacl -b 文件名
最大有效权限mask
mask是用来指定最大有效权限的。如果给用户赋予了ACL权限,和mask的权限“相与”才能得到真正的用户权限。
# 设定mask权限为rx,使用m:权限 格式
setfacl -m m:rx 文件名
sudo权限
root把本来只能超级用户执行的命令赋予普通用户执行
sudo的操作对象是系统命令
sudo使用
visudo # 实际修改的是 /etc/sudoers文件
在文件中添加行
root ALL=(ALL) ALL
# 用户名 被管理主机的地址=(可以使用的身份) 授权命令(绝对路径)
例如:zdy ALL=(ALL) /sbin/shutdown -r now
# 只赋予现在重启的权限
# 切换成某个用户
su - 用户名
# 查看可用的sudo命令
sudo -l
# 普通用户执行sudo 赋予的命令(最好写绝对路径,centos6之后可以不写)
sudo /sbin/shutdown -r now
查看命令位置whereis vi
# 给用户添加新建用户与修改密码的权限,但是不能修改root本身的密码
zdy ALL=/usr/sbin/useradd
zdy ALL=/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd "",!/usr/bin/passwd root
# 不要赋予下面的权利,这样的话用户得到的是root下的vi
zdy ALL=/bin/vi
文件特殊权限
尽量少修改!
SetUID
SetUID针对文件的作用
只有可执行的二进制程序才能设定SUID权限
命令执行者对该程序拥有执行权限
命令执行者在执行该程序时获得改程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)
SetUID权限只在该程序执行过程中有效,也就是说身份改变只能在程序执行过程中有效。
设定SetUID
# 设定SetUID的方法
chmod 4755 文件名 #4代表SUID
chmod u+s 文件名
# 取消
chmod 0755 文件名
chmod u-s 文件名
危险的SetUID
关键目录应严格控制写权限。比如"/","/usr"等
用户的密码设置要严格遵守密码三原则(复杂性,易记忆性,时效性)
对系统中默认应该具有SetUID权限的文件作一列表,定时检查有没有这之外的文件被设置了SetUID权限
定期检查是否有新的程序获得了SUID或者SGID,脚本以及使用方法查看http://www.imooc.com/video/9664
SetGID
SetGID针对文件的作用
只有可执行的二进制程序才能设定SGID权限
命令执行者对该程序拥有执行权限
命令执行在执行该程序时,组身份升级为该程序文件的属组
SetGID权限只在该程序执行过程中有效,也就是说组身份改变只能在程序执行过程中有效。
SetGID针对目录的作用
普通用户必须对此目录拥有r和x权限,才能进入此目录
普通用户在此目录中的有效组会变成此目录的属组
若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组
设定SetGID
# 设定SetUID的方法
chmod 2755 文件名 #2代表SGID
chmod g+s 文件名
# 取消
chmod 0755 文件名
chmod g-s 文件名
Sticky BIT
SBIT粘着位作用
粘着位只对目录有效
普通用户对该目录拥有wx权限,即普通用户可以对此目录拥有写入权限
如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一旦赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件。
设定粘着位
# 设置粘着位
chmod 1777 目录名
chmod o+t 目录名
# 取消粘着位
chmod 0777 目录名
chmod o-t 目录名
不可改变位权限chattr权限
chattr
chattr [+-=] [选项] 文件或目录名
+增加权限 -删除权限 =等于某权限
选项:
i(insert):如果对文件设置i属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;
如果对目录设置i属性,那么只能修改目录下文件的数据,但不允许建立和删除文件。
a(append):如果对文件设置a属性,那么只能在文件中增加数据,但是不能删除也不能修改数据;(禁用vi,但是可以用 echo 内容>>文件名)
如果对目录设置a属性,那么只允许在目录中建立和修改文件,但是不允许删除。
lsattr查看文件系统属性
lsattr 选项 文件名
选项:
-a 显示所有文件和目录
-d 如目标是目录,仅列出目录本身的属性,而不是子文件的