linux 权限管理
第一节:权限属性
ll 命令列出文件/目录长属性(权限、属性)
[root@centos7 ~]#ll /etc/passwd -rw-r--r--. 1 root root 1091 1 月 31 12:38 /etc/passwd
-rw-r--r--:权限
root root:属性
1.1 文件属性
文件属性:所有者 所属组 其他人(不显示)
(1)chown 设置文件的所有者
[root@centos7 ~]#chown [指定所有者] [文件] #格式 [root@centos7 ~]#ll f1 #查看f1文件的属性信息 -rw-r--r--. 1 root root 0 2月 27 22:40 f1 [root@centos7 ~]#chown yang f1 #例:更改f1文件的所有者为yang(yang为本人创建的一个用户) [root@centos7 ~]#ll f1 -rw-r--r--. 1 yang root 0 2月 27 22:40 f1
(2)chgrp 设置文件的属组信息
[root@centos7 ~]#chgrp [指定所属组] [文件] #格式 [root@centos7 ~]#ll f1 -rw-r--r--. 1 yang root 0 2月 27 22:40 f1 [root@centos7 ~]#chgrp yang f1 #例:更改f1文件的所属组为yang [root@centos7 ~]#ll f1 -rw-r--r--. 1 yang yang 0 2月 27 22:40 f1
(3)也可以使用 chown 命令一起更改文件所有者、所属组
[root@centos7 ~]#ll f1 -rw-r--r--. 1 yang yang 0 2月 27 22:40 f1 [root@centos7 ~]#chown root.root f1 [root@centos7 ~]#ll f1 -rw-r--r--. 1 root root 0 2月 27 22:40 f1
注意:普通用户更改不了文件所有者,但是可以改文件所属组(前提该文件所有者属于自己;该用户在该组内);
1.2 文件权限
(1)权限针对于:所有者、所属组和其他人
#权限(例): -rw-r--r-- #第一个字符 '-' 代表普通文件 #接下来每三个字符为一组,分别为:所有者权限、所属组权限和其他人权限
(2)root 账号对于读写权限设置不受影响,没有读写权限也能读写;但是执行权限 root 也要受影响;
(3)文件删除权限取决于目录权限;对于目录没有执行权限,不能进去,不能看目录里文件所有属性,不能访问文件内容。
(4)文件访问权限按 所有者>所属组>其他顺序匹配,匹配到则停止匹配;
换一个文件系统不一定就是这样(Linux 里通用的文件系统是这样的)
1.3 权限授权
(1)mode 法(模式法)
chmod [who] [operate] [authority] [file/dir_name] who #对谁授权?(所有者、所属组、其他人、所有) operate #做什么操作?(+权限、-权限、=赋权) authority #什么权限?(r、w、x) file/dir_name #授权对象
实例:
[root@centos7 ~]#ll f1 -rw-r--r--. 1 root root 0 2月 27 22:40 f1 #查看f1文件的所有者、所属组和其他人权限分别为读写、读、读 [root@centos7 ~]#chmod u+x,g+w,o= f1 #赋予f1文件,增加所有者的执行权限,增加所属组的写权限,赋予其他人无权限 [root@centos7 ~]#ll f1 -rwxrw----. 1 root root 0 2月 27 22:40 f1
(2)数字法授权:r=4 w=2 x=1
[root@centos7 ~]#ll f1 -rwxrw----. 1 root root 0 2月 27 22:40 f1 [root@centos7 ~]#chmod 644 f1 [root@centos7 ~]#ll f1 -rw-r--r--. 1 root root 0 2月 27 22:40 f1
chmod --reference=参考文件 文件 #将文件的权限设置为和参考文件一样 [root@centos7 ~]#ll f1 -rw-r--r--. 1 root root 0 2月 27 22:40 f1 [root@centos7 ~]#ll /etc/shadow ----------. 1 root root 655 2月 27 13:58 /etc/shadow [root@centos7 ~]#chmod --reference=/etc/shadow f1 [root@centos7 ~]#ll f1 ----------. 1 root root 0 2月 27 22:40 f1
总结:
对于文件来说:6、4、0 权限用的比较多
对于目录来说:7、5、0 权限用的比较多
chmod -R dir/file #递归附加权限 chmod -R +x dir/file #给 dir 目录连同目录下的所有文件附加执行权限 chmod -R +X dir/file #X 只给目录和可执行权限的文件(特殊)附加执行权限
1.4 默认权限
umask(默认权限) + default(显示权限) = file:666/dir:777 #暂时公式正确 [root@centos7 ~]#umask 125 #本来默认权限应该是 541,但实际是 642 [root@centos7 ~]#touch f3 [root@centos7 ~]#ll f3 -rw-r---w-. 1 root root 0 2 月 1 12:05 f3
umask 的作用取消对应权限(转换为二进制)
666→110110110 #文件权限 125→001010101 #125,默认权限,两者对位运算。0不取消,1 是取消 真实权限 110100010→642 默认权限计算对位相减:比如 umask 125,则:666-125=541,如果结果中有奇数则奇数加1→642(对文件来说的权限计算),对目录说没问题直接减就是结果。 每个用户可以设至自己的 umask,彻底更改放到家目录的:.bashrc 文件里面
[root@centos7 ~]#umask #查看当前umask默认权限 0022
[root@centos7 ~]#umask u=rwx,g=r,o= #直接设置不用算,常配合小括号使用(),小括号开启子进程,结束关闭子进程,用法相当于一次性使用
1.5 特殊权限
三种特殊权限:SUID、SGID、Sticky
[root@centos7 ~]#which passwd /bin/passwd [root@centos7 ~]#ll /bin/passwd -rwsr-xr-x. 1 root root 27832 6 月 10 2014 /bin/passwd #查看/etc/passwd文件发现有suid权限,该处小 s 有 x 权限,如果为大 S 则没 x 权限 [root@centos7 ~]#chmod u-x /usr/bin/passwd [root@centos7 ~]#ll /usr/bin/passwd -rwSr-xr-x. 1 root root 27832 6 月 10 2014 /usr/bin/passwd
指定 SUID 后,当用户执行该程序(有 SUID 权限),该用户继承该程序所有者的权限
普通用户,可以使用 passwd 更改自己的口令,更改完口令,即必然修改 /etc/shadow 文件(用户密码相关文件),而该文件的权限如下:没有任何权限
[root@centos7 ~]#ll /etc/shadow ----------. 1 root root 751 2月 27 23:17 /etc/shadow
但是,/etc/passwd 文件拥有 suid 权限,普通用户执行该程序时继承该程序的所有者权限,即 suid 权限。
数字法赋权:在原有权限前加特殊权限(4XXX,2XXX,1XXX)
SUID 权限,继承二进制程序所有者的权限(适合二进制的可执行的程序上)
SGID 权限,继承该程序所有组的权限
Sticky 权限,作用于文件夹,此目录的文件只能被所有者删除
chattr 工具:对特定的文件加以保护,避免 root 用户更改和删除
chattr +i #不能删除,改名,更改 chattr +a #只能追加内容 chattr +A #锁定读时间 lsattr #显示特定属性
1.6 访问控制列表
ACL:Access Control List,实现灵活的权限管理,除了文件的所有者,所属组和其他人,可以对更多的用户设置权限。
CentOS7 默认创建的 xfs 和 ext4 文件系统具有 ACL 功能
CentOS7 之前的版本,默认手工创建的 ext4 文件系统无 ACL 功能,需手动增加:
tune2fs -o acl /dev/sdb1 mount -o acl /dev/sdb1 /mnt/test
ACL 生效顺序:所有者,自定义用户,所属组,自定义组,其他人
[root@centos7 ~]#chmod 666 f1 [root@centos7 ~]#setfacl -m u:yang:r f1 #针对yang用户设置r读权限,一旦设置 acl 权限则相当于第四者 [root@centos7 ~]#ll f1 -rw-rw-rw-+ 1 root root 0 2月 27 22:40 f1 [root@centos7 ~]#getfacl f1 #查看acl权限 # file: f1 # owner: root # group: root user::rw- user:yang:r-- group::rw- mask::rw- other::rw-
除了 user 和 other,对特定的用户和组统一设一个最大权限→可以更改 mask 权限(限高权限),组权限已经不是原来的组权限,group=mask 权限(限高权限)
[root@centos7 ~]#setfacl -m mask::r f1 [root@centos7 ~]#getfacl f1 # file: f1 # owner: root # group: root user::rw- user:yang:r-- group::rw- #effective:r-- mask::r-- other::rw-
此时 chmod g=rw f1 更改组权限,其实更改 mask 权限
[root@centos7 ~]#chmod g=rw f1 [root@centos7 ~]#getfacl f1 # file: f1 # owner: root # group: root user::rw- user:yang:r-- group::rw- mask::rw- other::rw-
setfacl -b f1 #清空 f1 文件的所有 acl 权限
备份和恢复 ACL cp -p + mv 都可以复制 ACL 属性,但是 tar 备份工具不会保留目录和文件的ACL 信息 getfacl -R /tmp/dir1 > acl.txt #把目录下文件的所有 ACL 放到文件里 setfacl -R -b /tmp/dir1 #清空 setfacl -R -set-file=acl.txt /tmp/dir1 #还原备份的 ACL 权限 setfacl -restore acl.txt getfacl -R /tmp/dir1