设为首页 收藏本站
查看: 961|回复: 0

[经验分享] Linux 文件权限

[复制链接]
YunVN网友  发表于 2019-2-18 06:06:40 |阅读模式
  Linux 文件权限

  Linux系统中有句话叫做“everything is files”,这当然不是戏称了,windows系统里的mp3、avi、txt、exe、word等等格式的文件在Linux系统里都是以文件形式存在,当然有人会说那Linux系统的文件不也是以 .mp3、 .txt结尾吗?不是的,Linux系统里这样写是为了的系统操作人员方便辨认,把后面的 .mp3、 .txt删了,也不影响文件本质(当然前提是编码格式不变)。在Linux系统里的文件权限分为有r、w、x、s、t。
      1. 查看文件权限
[root@localhost ~]# ll /app/house
total 0
drwxrwx---. 2 root root 6 Jul 21 15:17 common   文件类型  所有者权限  用户组权限  其他用户权限  特殊权限  连接数  所有者  用户组  大小 修改日期      文件名
d            rwx           rwx           ---                .            2         root    root     6    Jul 21 15:17   common


          a.文件类型:Linux文件一共有七种类型,分别是:- 普通文件、d 目录文件、b 块设备、c 字符设备、l 符号链接文件、p 管道文件pipe、s 套接字文件sock
          b.所有者权限: 对于目录来说,内容为文件夹中的文件名列表r:可读取文件名列表
                                                                                         w:可新建,删除,重命名文件名
                                                                                         x:有进入文件夹的权限,若要执行文件夹的w权限,必须要先有进入文件夹的权限,所以要使用w权限,必须要有x权限
                  I.对于文件来说,内容为文件内容本身:r:可读取文件内容
                                                                  w:可修改文件内容
                                                                  x:可执行文件
                  II.权限可以用数字表示:r: 4
                                              w:2

                                              x: 1      例如   764  表示 rwxrw-r--
                            
                III.文件还有3种特殊权限 ,也可以用数字表示suid:4   s
                                                                      sgid:2   s
                                                                      sticky:1    t
                 IV.suid:当对于一个可执行的二进制文件作用了suid之后,任何人在执行该文件时,临时拥有其所有人的权限,可设置改权限
[root@localhost ~]# vim cyn.txt (当执行这个脚本的时候该用户会临时有文件所有者的权限,由于过程比较繁杂,请自行测试,欢迎留言讨论)
#/bin/bash
echo hello,my name is cyn
[root@localhost ~]# chmod +x cyn.txt
[root@localhost ~]# ./cyn.txt
hello,my name is cyn.
[root@localhost ~]# chmod u+s cyn.txt
[root@localhost ~]# ll
total 4
-rwsr-xr-x. 1 root root 38 Jul 21 17:29 cyn.txt                   V.sgid:-当对于一个可执行的二进制文件作用了sgid之后,任何人在执行该文件时,临时拥有其所有组的权限,可设置改权限
[root@localhost ~]# chmod g+s cyn.txt
[root@localhost ~]# ll
total 4
-rwsr-sr-x. 1 root root 38 Jul 21 17:29 cyn.txt(当执行该脚本的时候,会临时有该文件所属组的权限,可以自行测试,欢迎留言讨论)                   -当对于一个目录作用了sgid权限之后,任何人在该目录下所创建的文件的所属组,均与该目录的所属组相同。比如A用户要创建一个文件,这个文件会属于A用户所在的           A组,但是A用户想把这个文件创建之后使其所属组继承与B目录的所属组,这个时侯B目录(所属组B组)设置 sgid权限的话,A用户在B目录下面创建文件,文件会自动属于B组,设置 方法与上面二进制文件一样
                      VI.sticky:对于一个目录作用了sticky权限,该目录下的文件仅其所属人和目录的所属人及root可以删除,比如在一个共享组里任何人可以上传文件,万一有人误操作把其他的人文件       删了,这个时候为了防止这种情况发生就可以设置sticky权限。
[root@localhost ~]# ls /tmp
drwxrwxrwt 6 root root 4096 Jul 21 17:29 /tmp          c.用户组权限: 同所有者权限

          d.其他用户权限: 不是文件所有者,也不属于文件所属用户组的用户,称为其他用户,其他用户权限若为-,表示没有相应的权限
          e.特殊权限 :acl权限
[leonard@localhost ~]$ ls -l
-rw-rw---- 1 cyn root 6 Jul 21 17:29 test.txt  在这里说明了对于test.txt这个文件cyn用户拥有rw-权限。所有属于root组的用户拥有rw-权限. 其他任何用户对于文件没有任何的权限,如果我们现在希望john这个用户也可以对                test.txt    文件进行读写操作.,我自己大概会想到以下几种办法:

                1). 给文件的other类别增加读和写的权限,这样由于john会被归为other类别,那么他也将拥有读写的权限。
              2). 将john加入到root组。那么john会被归为group类别,那么他将拥有读写的权限。
              3). 设置sudo, 使john能够以cyn的身份对test.txt进行操作,从而获得读写权限。
                第一种做法的问题在于所有用户都将对test.txt拥有读写操作,显然这种做法不可取。
              第二种做法的问题在于john被赋予了过多的权限.所有属于admin组的文件,john都可以拥有其等同的权限了。
              第三种做法虽然可以达到只限定john拥有对test.txt文件的读写权限.但是需要对sudoers文件进行严格的格式控制. 而且当文件数量和用户很多的时候,这种方法就相当地不灵活了。
              看来好像都没有一个很好的解决方案. 其实问题就出在Linux 文件权限里面,对于other的定义过于广泛,以至于很难把权限限定于一个不属于file owner和group的用户身上. 那                        么 Access Control List (ACL)就是用来帮助我们解决这个问题的。

                简单地来说ACL权限就是可以设置特定用户或者用户组对于一个文件/文件夹的操作权限。ACl权限判断顺序 owner > acl user > group > other
                   可以设置用户acl,也可以设置组acl权限。设置ACL     setfacl  ,查看ACL   getfacl

[root@localhost ~]# mkdir -p /acltest/acl
[root@localhost ~]# cd /acltest/
[root@localhost acltest]# ll
total 0
drwxr-xr-x. 2 root root 6 Jul 21 20:03 acl
[root@localhost acltest]# setfacl -Rm g:shuguo:rwx /acltest/
[root@localhost acltest]# getfacl /acltest/
getfacl: Removing leading '/' from absolute path names
# file: acltest/
# owner: root
# group: root
user::rwx
user:liubei:r--
group::r-x
group:shuguo:rwx
mask::rwx
other::r-x
[root@localhost acltest]# ll
total 0
drwxrwxr-x+ 2 root root 6 Jul 21 20:03 acl                删除ACL,可以逐条删除setfacl -x,也可以一起删除setfacl -b

[root@localhost acltest]# setfacl -x u:liubei /acltest/
[root@localhost acltest]# getfacl /acltest/
getfacl: Removing leading '/' from absolute path names
# file: acltest/
# owner: root
# group: root
user::rwx
group::r-x
group:shuguo:rwx
mask::rwx
other::r-x
[root@localhost acltest]# setfacl -b /acltest/
[root@localhost acltest]# getfacl /acltest/
getfacl: Removing leading '/' from absolute path names
# file: acltest/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x              设置未来文件的权限 ,所谓未来就是你下一个将要创建的文件的ACL权限,查看的时候会以default显示。

[root@localhost acltest]# setfacl -Rm d:g:shuguo:rwx /acltest/
[root@localhost acltest]# getfacl /acltest/
getfacl: Removing leading '/' from absolute path names
# file: acltest/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:group:shuguo:rwx
default:mask::rwx
default:other::r-x            f.连接数:目录的连接数最少为2,本身和 . ,若还有n个子目录,则连接数为2+n,文件的连接数最少为1,如果连接数为0,则文件或者目录不存在
          g.所有者:一般为文件的创建者,谁创建了该文件,就成为该文件的所有者可以修改该权限:
[root@localhost ~]# ll /app/house
total 0
drwxrwx---. 2 root root 6 Jul 21 15:17 common
[root@localhost ~]# chown liubei /app/house/common
[root@localhost ~]# ll /app/house
total 0
drwxrwx---. 2 liubei root 6 Jul 21 15:17 common         h.用户组:当某个用户创建了一个文件后,这个文件的所在用户组就是该用户所在的组可以修改该权限:

[guanyu@localhost ~]$ getent group shuguo
shuguo:x:1021:liubei,zhangfei,guanyu
[guanyu@localhost ~]$ mkdir guanyu
[guanyu@localhost ~]$ ll
total 0
drwxr-xr-x. 2 guanyu shuguo 6 Jul 21 16:37 guanyu          i.文件容量:单位为B
          j.修改日期:创建这个文件的时间
          k.文件名:文件的文件名
  2.文件属性操作

  a.修改文件的属主:chown  

                  用法:chown 用户名 文件/目录名   
                                      -R 递归同时修改目录下的子文件子目录

                                      --reference file1  file2   将file1的owner设置给file2
                                      chown owner.group 或  owner:group  文件名  可以同时修改文件的owner和group  (仅root用户)
            b.修改文件的group:chgrp
                   用法:chgrp 组名 文件/目录名         
                                       owner可以修改文件的属于组,但owner一定要属于目标组
                                      -R 递归同时修改目录下的子文件子目录
                                      --reference file1  file2   将file1的owner设置给file2               

     3.文件权限操作
        a.改变文件或目录的权限chmod

                  用法:chmod 权限 文件/目录名
                                       -R 递归同时修改目录下的子文件子目录
                                      修改一类用户的所有权限: 如u=  g= o= ug=  a= u=,g= (a=ugo 或=左边省略)
                                      修改一类用户某位或某些位权限 u+  u- g+ g- o+ o- a+ a- + (+ 加入  - 除去   + 设置
  
                               --reference file1  file2   将file1的owner设置给file2





  




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-673642-1-1.html 上篇帖子: Linux权限管理 下篇帖子: Linux链接文件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表