3、Linux文件权限和目录权限

发布时间:2019-09-14 09:28:40编辑:auto阅读(1630)

    本篇主要讲述:

    文件和目录的基本权限;

    设置基本权限(chmod,chown,chgrp);

    附加权限;




    1、基本权限

    (1)访问方式(权限)

    读取:允许查看内容-read  r

    写入:允许修改内容-write   w

    可执行:允许运行和切换-execute  x

    (2)使用者与群组

    权限适用对象(归属)

    所有者:拥有此文件/目录的用户-user    u

    所属组:拥有此文件/目录的组-group       g

    其他用户:除所有者、所属组以外的用户-other  o

     

    (3)使用 ls -ld 命令

    ls -ld 文件或目录   #查看文件或者目录自身的属性

    image.png

    第一栏代表这个文件的类型与权限;

    其中第一个字符

    以  - 开头:文本文件

    以  d 开头:目录

    以  l 开头:快捷方式


    接下来的字符中,以三个为一组

    第一组为“文件拥有者可具备的权限”

    第二组为“加入此群组之帐号的权限”

    第三组为“非本人且没有加入本群组之其他帐号的权限”

     

    第二栏表示有多少文件名链接到此节点(i-node)

    第三栏表示这个文件(或目录) 的“拥有者帐号”

    第四栏表示这个文件的所属群组

    第五栏为这个文件的容量大小,默认单位为Bytes

    第六栏为这个文件的创建日期或者是最近的修改日期

    第七栏为这个文件的文件名

     

    2、设置基本权限

    2.1 使用 chmod 命令

    chmod  [-R]   归属关系+-=权限类别    文档...

    更改权限的方法:

    第一种:以数字的形式

    r:4 w:2 x:1

    [root@server0 ~]# mkdir /nsd01

    [root@server0 ~]# ls -ld /nsd01/

    drwxr-xr-x. 2 root root 6 11月 24 20:16 /nsd01/

    [root@server0 ~]# chmod 777 /nsd01/

    [root@server0 ~]# ls -ld /nsd01/

    drwxrwxrwx. 2 root root 6 11月 24 20:16 /nsd01/

     

    第二种:符号类型

    user=u ; group=g; other=o ; all=a

    [root@server0 ~]# chmod u=rwx,g=rw,o=--- /nsd01/

    [root@server0 ~]# ls -ld /nsd01/

    drwxrw----. 2 root root 6 11月 24 20:16 /nsd01

    [root@server0 ~]# mkdir /nsd01

    [root@server0 ~]# chmod g+w /nsd01

    [root@server0 ~]# chmod u-w /nsd01

    [root@server0 ~]# chmod o=rwx /nsd01

    [root@server0 ~]# chmod u=rwx,g=rx,o=--- /nsd01

     

    临时切换用户身份:

    [root@server0 ~]# su - zhangsan

    (不能将 去掉,代表所处的环境也切到另一个用户上去了)

    目录的 r 权限:能够 ls 浏览此目录内容

    目录的 w 权限:能够执行 rm/mv/cp/mkdir/touch/等更改目录内容的操作

    目录的 x 权限:能够 cd 切换到此目录

     

    总结:在Linux中新建目录默认的权限rwxr-xr-x

               在Linux中新建文件默认的权限rw-r--r--

    为什么新建目录或者文件是这样的权限?

    umask 命令了解一下

    image.png

    案例:以root用户新建/nsddir/目录,在此目录下新建readme.txt文件,并进一步完成下列操作

    1)使用户zhangsan能够在此目录下创建子目录  切换用户  su - zhangsan

    chmod o+w  /nsddir/

    2)使用户zhangsan不能够在此目录下创建子目录

    chmod o-w  /nsddir/

    3)使用户zhangsan能够修改readme.txt文件

    chmod o+w  /nsddir/readme.txt

    4)调整此目录的权限,使所有用户都不能进入此目录

    chmod u-x,g-x,o-x  /nsddir/

    5)为此目录及其下所有文档设置权限 rwxr-x---

    chmod -R  u=rwx,g=rx,o=---  /nsddir/

     

    2.2 使用 chown 命令

    设置文档归属

    – chown [-R] 属主 文档...

    – chown [-R] :属组 文档...

    – chown [-R] 属主:属组 文档...

     

    [root@server0 /]# mkdir /nsd03

    [root@server0 /]# ls -ld /nsd03

    [root@server0 /]# groupadd test

    [root@server0 /]# chown zhangsan:test /nsd03

    [root@server0 /]# ls -ld /nsd03

    [root@server0 /]# chown student  /nsd03

    [root@server0 /]# ls -ld /nsd03

    [root@server0 /]# chown :root /nsd03

    [root@server0 /]# ls -ld /nsd03

     

    2.3使用chgrp命令

    change group

    chgrp [-R] 组名 文件名/目录名

    组名信息存放在/etc/group下


    2.4附加权限(特殊权限)

    Set GID

    在该父目录上操作,属组+s,新建的子目录都会继承父目录的属组

    • 附加在属组的 x 位上

    – 属组的权限标识会变为 s

    – 适用于目录,Set GID可以使目录下新增的文档自动设置与父目录相同的属组(继承)

    对于属组而言:

    如何判断原来的权限是否有x:

    大写S 表示原来属组的权限没有x

    小写s表示原来的属组的权限有x

    具有继承作用:

    [root@server0 ~]# mkdir /nsd06

    [root@server0 ~]# ls -ld /nsd06

    drwxr-xr-x. 2 root root 6 11月 24 11:51 /nsd06    #nsd06刚开始的权限和属组

    [root@server0 ~]# chown :test /nsd06

    [root@server0 ~]# ls -ld /nsd06

    drwxr-xr-x. 2 root test 6 11月 24 11:51 /nsd06    #更改属组之后的权限

    [root@server0 ~]# mkdir /nsd06/abc01              #新建子目录abc01

    [root@server0 ~]# ls -ld /nsd06/abc01/

    drwxr-xr-x. 2 root root 6 11月 24 11:53 /nsd06/abc01/  #属组和父目录没有关系

     

    [root@server0 ~]# chmod g+s /nsd06              #属组权限+s

    [root@server0 ~]# ls -ld /nsd06

    drwxr-sr-x. 3 root test 18 11月 24 11:53 /nsd06

    [root@server0 ~]# mkdir /nsd06/abc02            #新建子目录abc02

    [root@server0 ~]# ls -ld /nsd06/abc02

    drwxr-sr-x. 2 root test 6 11月 24 11:54 /nsd06/abc02   #继承了父目录nsd06的所有者,属组

     

    Set Uid(并没有继承)

    [root@server0 ~]# ls -ld /nsd/              #nsd目录的权限

    drwxr-sr-x. 2 harry adminuser 20 11月 25 09:58 /nsd/

    [root@server0 ~]# chmod u+s /nsd/   #对所有者加s,是否能够继承?

    [root@server0 ~]# ls -ld /nsd/

    drwsr-sr-x. 2 harry adminuser 35 11月 25 10:09 /nsd/

    [root@server0 ~]# touch /nsd/nsd2.txt     #在目录下新建子文件

    [root@server0 ~]# ls -ld /nsd/nsd2.txt      #查看新文件的权限

    -rw-r--r--. 1 root adminuser 0 11月 25 10:10 /nsd/nsd2.txt

     

    对Set uid一般情况下不使用s权限,这样会造成 对系统的安全存在风险

     – 属主的权限标识会变为 s

     – 适用于可执行文件,Set UID可以让使用者具有文件属主的身份及部分权限拥有root的权限


    Sticky bit

    附加在其他人的x位上

    其他人的权限标识会变为t

    适用于开放w权限的目录,可以阻止用户滥用w写入权限(禁止操作别人的文档)

     

    3、ACL策略权限

    使用场景:当用户属组具有写(或者其他)的权限,其他人什么权限也没有,

    来了一个想要查看文件的用户,但不能使该用户具有写。

    意义:能够对个别用户,个别组设置独立的权限

     

    acl策略的作用

    • 文档归属的局限性

    – 任何人只属于三种角色:属主、属组、其他人

    – 无法实现更精细的控制

     

    acl访问策略

    – 能够对个别用户、个别组设置独立的权限

    – 大多数挂载的EXT3/4、XFS文件系统默认已支持

     

    [root@server0 /]# mkdir /nsd10       #新建目录

    [root@server0 /]# chmod o=--- /nsd10 #使该目录对其他人没有任何权限

     

    [root@server0 /]# su - zhangsan            #验证

    [zhangsan@server0 ~]$ cd /nsd10

    -bash: cd: /nsd10: Permission denied   #不能进入

    [zhangsan@server0 ~]$ exit                 #回到root

    logout

    [root@server0 /]# setfacl -m u:zhangsan:rx /nsd10  #设置ACL,使能够具有读和执行权限

    [root@server0 /]# su - zhangsan            #验证

    [zhangsan@server0 ~]$ cd /nsd10        #可以进入

    [zhangsan@server0 nsd10]$ pwd

    [zhangsan@server0 nsd10]$ exit          #回到root

    logout

     

    • 使用 getfacl、setfacl 命令

    – getfacl       文档...                              #查看acl策略

    – setfacl  -m  u:用户名:权限类别 文档...

    – setfacl  -m  g:组名:权限类别 文档...

    – setfacl  -b   文档...                             #清除所有的ACL策略

    – setfacl  -x   文档...                             #清除指定的ACL策略

     

    [root@server0 /]# getfacl  /nsd10           #查看ACL策略的命令

    [root@server0 /]# setfacl  -m  u:natasha:rwx  /nsd10

    [root@server0 /]# setfacl  -m  u:lisi:rwx  /nsd10

    [root@server0 /]# setfacl  -m  u:kenji:rx  /nsd10

    [root@server0 /]# getfacl  /nsd10

     

    [root@server0 /]# setfacl  -x  u:kenji  /nsd10

    [root@server0 /]# getfacl  /nsd10

     

    [root@server0 /]# setfacl  -b  /nsd10

    [root@server0 /]# getfacl  /nsd10



关键字