美文网首页我用 LinuxLinux学习|Gentoo/Arch/FreeBSDLinux
[Linux实用命令]-13-如何设置文件特殊权限

[Linux实用命令]-13-如何设置文件特殊权限

作者: 晴刃 | 来源:发表于2021-04-27 07:29 被阅读0次

    引言

    这篇文章介绍Linux文件系统三个特殊权限suid,sgid,sticky。

    文章目录

    • 0×1.如何查看当前用户创建文件默认权限
    • 0×2.如何给文件添加suid权限
    • 0×3.如何给文件夹添加sgid权限
    • 0×4.如何给文件夹添加sticky权限

    0×1.如何查看当前用户创建文件默认权限

    Linux在创建文件和文件夹时会默认分配一组权限,这个权限是根据系统的umask值来确定的,请看下面的实例:

    #查看普通用户的umask值
    qing@qingsword.com:~$ umask
    22
    
    #使用普通用户创建一个文件夹和文件,查看它们的属性
    qing@qingsword.com:~$ touch qingfile
    qing@qingsword.com:~$ mkdir qingdir
    qing@qingsword.com:~$ ls -a
    drwxr-xr-x qingdir/
    -rw-r--r-- qingfile
    
    #文件的默认权限等于666减去umask查看到的值的后三位
    # 666-022=644转换成权限就是-rw-r--r--
    #文件夹的默认权限等于777减去umask查看到的值的后三位
    # 777-022=755转换成权限就是drwxr-xr-x
    
    #umask值决定了当前用户创建文件或文件夹时默认的权限分配,如果想修改umask值,在命令后面输入umask值的后三位,如下
    qing@qingsword.com:~$ umask 002
    qing@qingsword.com:~$ umask
    2
    

    0×2.如何给文件添加suid权限

    首先简单的介绍一下suid权限的作用,被分配了suid权限的文件在执行的时候,将以文件所属用户的权限来运行。为了让大家更好的理解,请看下面的实例:

    #Linux系统保存密码的shadow文件只有root用户拥有读写权限
    qing@qingsword.com:~$ ls -l /etc/shadow
    -rw-r----- 1 root shadow /etc/shadow
    
    #既然这样,普通用户使用passwd命令是如何修改密码的呢?
    #通过查看passwd文件的权限"-rwsr-xr-x"发现这个文件被分配了suid权限,这样,当普通用户使用这个文件来更改密码时,文件将以文件所属用户root的权限来运行,而root用户是能够对/etc/shadow做出修改的
    qing@qingsword.com:~$ ls -l /usr/bin/passwd
    -rwsr-xr-x 1 root root /usr/bin/passwd
    

    给一个文件添加suid权限的方法:

    #方法一
    qing@qingsword.com:~$ sudo chmod u+s qingfile
    qing@qingsword.com:~$ ls -l
    drwxr-xr-x 2 qing qing qingdir
    -rwSr--r-- 1 qing qing qingfile
    
    #方法二,千位4代表了suid权限,后面的744对应了ugo
    qing@qingsword.com:~$ sudo chmod 4744 qingfile
    qing@qingsword.com:~$ ls -l
    drwxr-xr-x 2 qing qing qingdir
    -rwsr--r-- 1 qing qing qingfile
    
    #在上面这个实例中,如果对应的权限是4644那么看到的权限位中的s就会大写成"-rwSr--r--",这就表明在S位没有x权限,如果S位有x权限,那么S会小写
    

    0×3.如何给文件夹添加sgid权限

    sgid权限用于文件夹,当一个文件夹设置sgid权限后,所有在这个文件夹下新建的文件,无论是哪个用户创建的,都被自动分配到设置了sgid权限的父文件夹所属组中,请看下面的实例:

    #新建一个测试组testgroup,调整qingdir权限所属组为testgroup
    qing@qingsword.com:~$ sudo groupadd testgroup
    qing@qingsword.com:~$ sudo chgrp testgroup qingdir
    
    #给qingdir添加sgid权限
    qing@qingsword.com:~$ sudo chmod g+s qingdir
    qing@qingsword.com:~$ ls -l
    drwxr-sr-x 2 qing testgroup qingdir
    
    #进入qingdir新建一个文件和文件夹*/
    qing@qingsword.com:~$ cd qingdir/
    qing@qingsword.com:~$ touch subtestfile
    qing@qingsword.com:~$ mkdir subdir
    
    #新建的文件夹和文件都被自动分配到了testgroup组中
    qing@qingsword.com:~$ ls -l
    drwxr-sr-x 2 qing testgroup subdir
    -rw-r--r-- 1 qing testgroup subtestfile
    
    #方法二,千位2代表sgid权限,755对应了ugo
    qing@qingsword.com:~$ chmod 2755 qingdir
    

    0×4.如何给文件夹添加sticky权限

    如果一个用户对一个目录拥有rwx的权限,就意味着这个用户对这个目录拥有完全控制权,他可以删除这个目录下的所有文件及文件夹,而如果这个目录设置了sticky权限(Sticky Bit简称SBIT权限),对这个目录拥rwx权限的用户在这个目录下,只能删除和更改自己创建的文件和文件夹,不能删除和更改其他用户创建的文件和文件夹。

    假设有两个用户bob和steven,他们被分配到ceo组,现在有一个testdir的文件夹属于ceo组,ceo组中的成员对这个文件夹拥有rwx权限,使用sticky权限对这个文件夹进行控制,让bob和steven在对自己创建的文件有完全控制权的同时,只能查看其他人在这个目录创建的文件,但不能修改和删除,请看下面的实例:

    #创建ceo组
    qing@qingsword.com:~$ sudo groupadd ceo
    
    #创建bob和steven并将他们分配到ceo组中
    qing@qingsword.com:~$ sudo useradd -g ceo bob
    qing@qingsword.com:~$ sudo useradd -g ceo steven
    
    #分别给bob和steven配置密码
    qing@qingsword.com:~$ sudo passwd bob
    qing@qingsword.com:~$ sudo passwd steven
    
    #创建testdir文件夹并将它的所属组更改为ceo,给这个组添加rwx权限,现在ceo组中成员对这个目录拥有完全控制权
    qing@qingsword.com:~$ sudo mkdir testdir
    qing@qingsword.com:~$ sudo chgrp ceo testdir/
    qing@qingsword.com:~$ sudo chmod g+rwx testdir/
    
    #给testdir目录添加sticky权限(注意sticky权限是添加在others上的)
    qing@qingsword.com:~$ sudo chmod o+t testdir/
    
    #查看当前testdir目录的权限
    qing@qingsword.com:~$ ls -ld testdir/
    drwxrwxr-t 2 root ceo testdir/
    
    #切换到用户bob,切换到testdir目录中(假设testdir目录路径为/home/qing/testdir),touch一个文件
    qing@qingsword.com:~$ su - bob
    bob@qingsword.com:~$ cd /home/qing/testdir
    bob@qingsword.com:~$ touch bobfile
    
    #退出bob,使用steven登录,切换到testdir文件夹中,尝试删除bob创建的文件*/
    bob@qingsword.com:~$ exit
    qing@qingsword.com:~$ su - steven
    steven@qingsword.com:~$ cd /home/qing/testdir
    steven@qingsword.com:~$ ls
    bobfile
    steven@qingsword.com:~$ rm -rf bobfile
    rm: 无法删除"bobfile": 不允许的操作
    #此时steven只有查看bob创建的文件或文件夹内容的权限,但无法删除和修改它们
    
    #退出steven,使用root权限删除testdir的sticky权限,再次测试使用steven删除bob创建的文件,成功
    steven@qingsword.com:~$ exit
    qing@qingsword.com:~$ sudo chmod o-t testdir/
    qing@qingsword.com:~$ su - steven
    steven@qingsword.com:~$ cd /home/qing/testdir
    steven@qingsword.com:~$ ls
    bobfile
    steven@qingsword.com:~$ rm -rf bobfile
    
    #方法二,千位1代表sticky权限,775对应ugo
    qing@qingsword.com:~$ sudo chmod 1775 testdir/
    

    相关文章

      网友评论

        本文标题:[Linux实用命令]-13-如何设置文件特殊权限

        本文链接:https://www.haomeiwen.com/subject/bcbmrltx.html