ACL权限: linux 基本操作权限有 rwx ,另加一个默认权限umask权限
umask权限可以理解为最高权限,只针对用户初始组和附加组权限有效
umask 权限决定了用户初始组权限与附加组权限,就算初始组权限或附加组权限再高,可用权限为umask权限: 初始组或者附加组权限为777 但是umask权限为755 即可使用权限为755 用户组和其它用户 为r-x.
ACL 权限就是让单独用户获得对此文件的单独权限!!!
1 设置acl前先检查用户所在此块硬盘区域是否支持acl 权限
# df -h
查看有哪些挂载点
# dumpe2fs -h /dev/sda2
有一句: Default mount options: user_xattr acl
后面有acl 说明支持
1-1: 如果没有显示acl 则
# vim /etc/fstab
显示: UUID=963b2c43-9252-4cfd-8f03-b8ecc091c678 / ext4 defaults 1 1
UUID=963b2c43-9252-4cfd-8f03-b8ecc091c678 /etc ext4 defaults 1 1
在需要的挂载点的defaults后面加上acl 就行
例如: UUID=963b2c43-9252-4cfd-8f03-b8ecc091c678 / ext4 defaults,acl 1 1
重启服务器让配置文件生效
后者 mount -o remount / 重新挂载根目录
或者 mount -o remount,acl / 一步到位
2 为用户设置acl 权限
例子:
# useradd user
# useradd user1
# passwd user # 密码123
# passwd user1
# mkdir /testacl #这里可以是文件 touch testacl
# ll -d /testacl # 755 root:root
# groupadd testacl # 创建testacl组
# chown root:testacl /testacl # 将testacl 目录拥有者改为root组改为testacl
# chmod 750 /testacl
# su - user # 切换 user用户
# cd /testacl # 权限不足
# exit 返回root
# usermod -G testacl(附加组组名) user 或者 gpasswd -a user testacl 都是将user加入到testacl user的附加组
# su - user
# cd /testacl # 成功进入 因为testacl 目录组的权限5 r-x 不能修改
# exit 返回root
# 现在/testacl 目录权限为750 代表其它用户没有任何操作权限
如果想让单独的某个用户拥有对/testacl 的某些权限
就要用acl 权限了
# setfacl -m u:user1:rwx [/testacl 或者文件名]
# ll -d /testacl # 权限还是750 rwxr-x--+出现了个+号
# su - user1 # user1 不在组testacl中 并且属于其它用户 他应该没有操作/testacl 的任何权限
# cd /testacl # 进来了 怎么回事
# acl 权限要用 getfacl 查看
# exit 返回root 只用root可以使用setfacl getfacl
# getfacl /testacl
出现:# file: project/ 操作的文件名称 Linux 全部都可以称作文件
# owner: root 所属用户 所属主
# group: project 所属组
user::rwx 所属主 7
user:user1:rwx 这就是acl 权限 意思是 user1 对/testacl 7权限
group::rwx 所属组权限 7
mask::rwx umask权限 7 除所属主外的有效 与计算
other::--- 其他人 0
3 setfacl
3-1: -m 添加 setfacl -m u:user:rwx /testacl
-x 删除 setfacl -x u:user /testacl
3-2: umask 控制组的最大权限怎么改
# setfacl -m m:rw /testacl
3-3: u:user:rwx
3-3-1: u 修改用户 setfacl -m u:user:rwx /testacl
g 修改组 setfacl -m g:组名:rwx /testacl 此组对此文件的操作权限 , 将用户加入到此组用户就有了对此目录相应的操作权限
m 修改umask setfacl -m m:rw /testacl
4 如果组对此文件的操作权限为777 而umask 权限为755
# getfacl /testacl
在超过umask权限的组后面会提示
# #effective:r-x
此是组的实际获得权限还是 r-x
5 acl 操作组 和 用户 相差不大 就在
# setfacl -m g:组名:rwx /文件名
文件特殊权限setUID , setGID ,sticky BIT
查看一下ll /usr/bin/passwd
rws
r-wr-w权限
发现x 的位置出现了一个s
passwd 命令能够操作shadow文件
shadow 文件权限为000
然而每个用户都能使用passwd 命令修改自己的密码
也就是说每个用户都能通过passwd 命令操作shadow 文件
这。。。。。。
怎么可能! 没错这完全违背了Linux系统设计理念
其实,问题就出在那个s 身上
有没有发现s 占用的是 所属主位置上的x 的位置
passwd 就是拥有sUID(必须是可执行文件,执行者要对此文件拥有x权限
) 权限的文件
拥有suid 权限的文件(程序)普通用户调用时将会在调用命令期间使用root用户权限调用(也就是说,调用此命令时普通用户变身为阉割版的root)
一 setUID
1 给可执行文件(程序)加上s 权限 让普通用户也能通过此命令完成普通用户本身无法完成的任务
# chmod 4755 文件名 or chmod u+s 文件名
ll 文件名 如果用户对此文件没有可执行权限 则会出现S 大S 这是错误提示
1-1: 去掉权限
# chmod 755 文件名 or chmod u-s 文件名 直接755 文件名指回来即可
2 切记不可乱用
# chmod u+s /usr/bin/vim
正常情况下普通用户无法打开shadow 但是此时vim 不仅可以看shadow 而且可以修改
二 setGID(可以可执行文件也可以目录)
命令执行者要对该程序拥有x 权限
把组的x替换成s
ll /var/lib/mlocate/mlocate.db
-rw-r-----. 1 root slocate 991636 7月 29 14:29 /var/lib/mlocate/mlocate.db
权限640 普通用户没有操作他的权限
ll /usr/bin/locate
-rwx–s--x. 1 root slocate 40520 4月 11 2018 /usr/bin/locate
权限711
locate 组用户处有s权限 可以让普通用户调用locate是变身为root普通用户在s组标识的目录中如果创建文件, 文件所属主为用户 而所属组为创建创建文件者的所属组
suid sgid 都是给用户无权执行而又不得不执行的程序,操作权限
1 添加
# chmod g+s 文件名 or chmod 2755 文件名
2 删除
# chmod g-s 文件名 or chmod 755 文件名
三 sticky BIT (操作对象是目录)
普通用户可以在目录中创建修改
但是只能修改跟自己相关的,其它用户的没有操作权限
不包括root用户
1 添加
# chmod 1755 文件名 or chmod o+s 文件名
2 删处
# chmod 755 文件名 or chmod o-s 文件名
文件系统属性chattr 权限
chattr 对root也有效
用于锁定某个文件或者目录
有两个参数
-i 目录: 目录中的文件不能增加修改删除,文件内容可以修改
文件:文件内容被锁死 只能看
-a 目录: 只能增加 查看
文件: 只能增加 查看 只能 echo “sss” > aaa 或 echo “ss” >> aaa形式
1 为文件添加属性(锁定)
# chattr +i 文件名
# chattr +a 文件名
2 从文件上删除属性(解锁)
# chattr -i 文件名
# chattr -a 文件名
3 ll 无法查看chattr属性
查看用:
# lsattr 文件名
------i/a-------e-- i/a 属性 e 硬盘格式
sudo 权限
使用visudo 命令修改 /etc/sudoers
# visudo
打开/etc/sudoers文件
里面有一行
1 root ALL=(ALL) ALL
用户名 被管理主机的地址(ALL默认局域网段)=(可使用的身份 不写默认root) 授权命令(/sbin/shutdow -r now 越简单权限越大比如 /sbin/shutdown 就比前面的权限大)[绝对路径]
例子:
test ALL/(192.168.1.123)=/sbin/shutdown -r now
2 %wheel ALL=(ALL) ALL
%组名 被管理主机地址=(可使用的身份 不屑默认root) 授权命令[绝对路径]
3 切换到test 用户
# sudo -l 查看授权命令
匹配 %2$s 上 %1$s 的默认条目:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS
LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET
XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
用户 st 可以在 localhost 上运行以下命令:
(root) /sbin/shutdown -r now 这里是授权命令 上方是环境变量不用管