Linux 权限——特殊权限

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 如目标是目录,仅列出目录本身的属性,而不是子文件的

你可能感兴趣的:(Linux 权限——特殊权限)