Linux中的权限问题:

普通权限

Linux权限基于UGO模型进行控制:U代表User属主,G代表Group属组,O代表Other其他用户

每一个权限由文件所有者,文件所属组,其他用户3部分组成,每一部分都有读写执行3项权限,设置时可用数字表示
Linux权限分为:读(R)权限,设置时可用数字4表示
                           写(w)权限,设置时可用数字2表示
                           可执行(x)权限,设置时可用数字1表示
在这里插入图片描述

Linux的特殊权限

Linux的特殊权限是为了让一般用户在执行某些程序的时候,能够暂时具有该程序拥有者的权限

SUID:是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)
SGID:暂时拥有属主的权限
SBIT:用户只能删除自己的文件通常对目录设置
suid           4           针对文件
sgid           2           针对目录
sticky     粘滞位     针对目录

文件类型的表示:

Linux系统中一切都是文件,但是每个文件的类型不尽相同,因此Linux系统使用了不同的字符来

-:     普通文件
d:      目录
l:       符号连接文件
b:      块文件
c:      字符设备文件
p:      管道文件

设置和修改权限

用chown更改文件的属主,属组

chown linux file1             更改file1的属主为linux,且linux这个用户必须存在
chown .alice file2            更改file2的属组为alice,且alice这个组必须存在
chown linux:alice file3     同时更改file3的属主和属组

用chgrp更改文件的属组(chgrp)

chgrp alice file4              更改file4的属组
chgrp -R alice /dir1         更改dir1目录下的所有文件和目录

用chmod更改权限

chmod u+r 文件名          给属主加读权限
chmod a+x 文件名          给所有用户和其他人加执行权限
chmod g-w file1              file1的属组去掉写权限)
chmod o=x 文件名          其他用户只有执行权限
chmod a=- 文件名          去除所有用户的权限
chmod ug=rw,o=r file      给属主属组读写权限,给其他用户读权限
chmod 644 file                给属组读写权限,其他用户和属组为读权限)
在这里插入图片描述

r w x 权限对文件和目录的意义

权限            针对文件                                      针对目录
r          可以读取文件的内容          可以列出目录的内容  需配合x使用
w         可以更改文件的内容          可以创建或删除目录中的任一文件  需配合x使用
x          可以作为命令执行文件      可以访问目录的内容(取决于目录中文件的权限)
再给目录单独设置读写权限的时候必须设置x权限否则仍会显示权限不够
测试方法:创建一个用户useradd Tony
                  创建一个目录mkdir -p /home/dir
                  并在此目录下创建一个文件echo 123 >> /home/dir/file
                  将目录的O部分的权限设为0:chmod 750 /home/dir
                  转换到Tony用户:su - Tony
                  转到/home/dir目录下:cd /home/dir
                  进行查看看能否出现file:ls
                  转到root用户:su - root 给/home/dir添加r权限chmod o+r /home/dir再转到Tony用户下进行查看,同理进行其他权限的测试

Linux Umask 预设权限

umask命令用来设置限制新建文件权限的掩码 umask #结果是八进制掩码,转换后则为022,oct(0022)

          文件最大权限为 rwx rwx rwx (777)
          umask 为022 — -w- -w
          目录权限为 rwx r-x r-x (755)
          文件权限 rw- r– r– (644)
修改shell umask (临时)
          umask 000
          在创建文件时需手动添加执行权限否则系统会自动去除文件的执行权限
修改shell umask (永久生效)
          vim /etc/profile 进行修改

Linux ACL访问控制列表

如果你有一个目录,需要给多人使用,每个人或每个群组所需要的权限并不相同时,传统的 Linux 三种身份的三种权限是无法达到的, 因为传统的 Linux 权限只能针对一个用户、一个群组及非此群组的其他人设置权限而已,无法针对单一用户或个人来设计权限,ACL主要用在与提供传统的UGO的读写执行权限之外进行更细致的权限设置,可以针对单一文件,单一用户,单 一目录来进行权限设置
查询ACL功能是否启用(默认都启用)
cat /boot/config-3.10.0-693.el7.x86_64 | grep -i ext4 #centos6
如手工创建的文件系统,需要手工开启ACL功能
cat /boot/config-3.10.0-693.el7.x86_64 | grep -i xfs #centos7
基于文件的设置
          useradd alice
          touch acl_file1
          ll acl_file1
          setfacl -m u:alice:rx acl_file1
          ll acl_file1
          setfacl -m u::rxw acl_file1
          ll acl_file1 #acl用户默认权限
查看文件的设置
          getfacl acl_file1
基于组的设置
          setfacl -m g:group1:rx acl_file1 getfacl acl_file1
基于mask的设置
          setfacl -m m:r acl_file1
          getfacl acl_file1

          #file: acl_file1
          #owner: root
          #group: root
          user::rw
          user:alice:r-x #effective:r–(有效权限)使用者或群组所设置的权限必须要存 在于 mask 的权限设置范围内才会生效
          group::r–
          group:group1:r-x #effective:r-mask::r–
          other::r-
          #用户只有r权限,并没有x权限!mask的意义
在一个已经设置了acl目录下,增加文件或目录时,该文件或目录是否能够具有 ACL 的设置? 以上问题如何解决?
          setfacl -m d:u:alice:rx /project #使用默认权限设置目录未来文件的 ACL 权限继承
          “ d:[u|g]: [user|group]:权限 ”
取消权限
          setfacl -x g:hr /home/text.txt 删除组hr的ACL权限
          setfacl -x u:u1 /home/text.txt 删除用户u1的ACL权限
          setfacl -b /home/text.txt 删除所有ACL权限

ACL权限是添加某一用户或者某一个组对于文件的权限
查看ACL权限,ll /home/text.txt 会显示出-rw-rw-r–+ 如果后面有一个+,说明这是有ACL设置的用户权限,并且中间的rw-显示的不是属组的权限,是mask权限
-rw-rwxr–+ 1 u77 u77 0 5月 10 15:45 file90 此时看到的中间三个权限是mask的权限
例题:
在/opt/里创建的新文件自动属于g1组,组 g2的成员如:alice能对这些新文件有读写权限,组g3 的成员 如:tom只能对新文件有读权限,其它用户(不属于g1,g2,g3)不能访问这个文件夹
思路:
        1.创建需要的目录:mkdir -p /opt/dir
        2.创建需要的组:    groupadd g1 && groupadd g2 && groupadd g3
        3.将alice分配到g2:useradd -G g2 alice
        4.将tom分配到g3: useradd -G g3 tom
        5.将dir目录的属组设为g1:chgrp g1 /opt/dir
        6.为dir目录添加s权限:chmod g+s /opt/dir (其下所创建的目录和文件都享有该目录权限,即在/opt/里创建的新文件自动属于g1组)
        7.将目录o权限设置为0:chmod o= /opt/dir (其他用户无法访问)
        8.为g2成员添加读写权限:setfacl -Rm d:g:g2:rw /opt/dir (g2成员对这些文件有读写权限)
        9.为g3成员添加只读权限:setfacl -Rm d:g:g3:r /opt/dir (g3成员对文件有读权限)

猜你喜欢

转载自blog.csdn.net/weixin_43172417/article/details/83118399