linux 权限管理

第一节:权限属性

ll 命令列出文件/目录长属性(权限、属性)

[root@centos7 ~]#ll /etc/passwd
-rw-r--r--. 1 root root 1091 131 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 21 12:05 f3

umask 的作用取消对应权限(转换为二进制)

666110110110  #文件权限
125001010101  #125,默认权限,两者对位运算。0不取消,1 是取消
真实权限 110100010642

默认权限计算对位相减:比如 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 610 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 610 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
原文地址:https://www.cnblogs.com/zyybky/p/12375255.html