• Linux 笔记


    博客地址:http://www.moonxy.com

    一、前言

    Linux 中使用权限的时候,一般都是使用 3 位数,比如,777、755、666、644 等,其实在最前面还有一位,那就是特殊权限,也就是 set uid、set gid 和 sticky bit。

    二、特殊权限

    setuid:设置使文件在执行阶段具有文件所有者的权限。代表字母 s,代表数字 4,即 SUID 为 4典型的文件是 /usr/bin/passwd,如果一般用户执行该 /usr/bin/passwd 文件,则在执行过程中,该文件可以获得 root 权限,从而可以更改用户的密码。

    [root@localhost ~]# ls -l /etc/passwd

    -rw-r--r-- 1 root root 2379 04-21 13:18 /etc/passwd

    作为普通用户如果修改自己的口令,通过修改 /etc/passwd 肯定是不可完成的任务,但是不是可以通过一个命令来修改呢?答案是肯定的,作为普通用户可以通过 passwd 来修改自己的口令这归功于 passwd 命令的权限我们来看一下;

    [root@localhost ~]# ls -l /usr/bin/passwd

    -r-s--x--x 1 root root 21944 02-12 16:15 /usr/bin/passwd

    因为 /usr/bin/passwd 文件已经设置了setuid 权限位(也就是r-s--x--x中的s),所以普通用户能临时变成 root,间接的修改 /etc/passwd,以达到修改自己口令的权限。

    setgid:该权限只对目录有效,目录被设置该位后,任何用户在此目录下创建的文件都具有和该目录所属的组相同的组。代表字母 s,代表数字 2,即 SGID 为 2。

    sticky bit:该位可以理解为防删除位,也有人称其为粘滞位。代表字母 t,代表数字 1,即 SBIT 为 1一个文件是否可以被某用户删除,主要取决于该文件所属的组是否对该用户具有写权限。如果没有写权限,则这个目录下的所有文件都不能被删除, 同时也不能添加新的文件。如果希望用户能够添加文件但同时不能删除文件,则可以对文件使用sticky bit位,设置该位后,就算用户对目录具有写权限,也不能删除该文件,常见的用于 /tmp 目录。stciky bit 一般只用在目录上,用在文件上起不到什么作用。

    如果某个目录设置了sticky bit(是在 others 用户的权限上设置的,设置后可执行位从 x 变成了 t),那么用户在该目录下可以创建文件(当然前提是用户具有写权限和可执行权限,如果具有可执行权限,设置 sticky bit 后是 t;如果没有可执行权限的话,设置 sticky bit 后是 T),而且可以删除自己创建的文件,但是,不能删除其他用户创建的文件,这样就起到了一种保护作用了。

    下面说一下如何操作这些标志:

    操作这些标志与操作文件权限的命令是一样的, 都是 chmod。有两种方法来操作:

    1) chmod u+s tmps -- 为 tmps 文件加上 setuid 标志。( setuid 只对文件有效)

    chmod g+s tmp -- 为 tmp 目录加上 setgid 标志 ( setgid 只对目录有效)

    chmod o+t tmp -- 为 tmp 目录加上 sticky 标志 ( sticky 一般只用于目录)

    2) 采用八进制方式。对一般文件通过三组八进制数字来置标志, 如 666、777、644等。 如果设置这些特殊标志,则在这组数字之外再加一组八进制数字, 如 4666、 2777等。 这一组八进制数字三位的意义如下:

    abc

    a - setuid 位,如果该位为1,则表示设置 setuid --- 4

    b - setgid 位, 如果该位为1,则表示设置 setgid --- 2

    c - sticky 位,如果该位为1,则表示设置 sticky --- 1

    设置完这些标志后,可以用 ls -l 来查看。如果有这些标志,则会在原来的执行标志位置上显示。如:

    rwsrw-r-- 表示有 setuid 标志

    rwxrwsrw- 表示有 setgid 标志

    rwxrw-rwt 表示有 sticky 标志

    那么原来的执行标志x到哪里去了呢?系统是这样规定的,如果本来在该位上有x,则这些特殊标志显示为小写字母 (s, s, t). 否则, 显示为大写字母 (S, S, T)。

    如果希望查找系统中所有具有特殊权限的文件,则:

    find / -perm +7000

    三、总结

    Linux 目录读权限、执行权限和写权限分析

    当用户对某个目录只有读权限时,那么该用户可以列出该目录下的文件列表(即可以使用ll来列出目录下的文件),但是不能进入该目录(即不能cd 目录名 来进入该目录),即如果该目录是用户访问路径的某个组成部分的话,到这里是访问不了的。

    当用户对某个目录只有执行权限时,该用户是可以进入该目录的(即可以通过 cd 目录名 来进入该目录),因为一个用户要想进入一个目录,就必须具有可执行权限才可以。但该用户是不能列出这个目录下的文件列表的(即不能使用ll等命令列出该目录下的信息)。

    当用户对某个目录具有写权限时,用户可以在当前目录增加或者删除文件,但需要几个前提:1、需要有可执行权限;2、要想删除文件,那么sticky bit位是没有设置的。

  • 相关阅读:
    hdu1069Monkey and Banana(动态规划)
    hdu2571 命运(动态规划)
    hdu1505City Game(动态规划)
    在jvm底层有关于方法区的介绍
    用IDEA查看源码总是跳到.class文件而不是.java文件的解决办法
    如果Son类继承Father类,Father类继承GrandFather类,那么new Son()创建对象的时候是否会执行GrandFather类里面的方法
    看面试题有感:子类构造器(无参或有参)继承的super()方法在何时调用,与静态代码块,普通代码块相比的执行顺序如何的思考及证明
    关于子类构造器调用super()方法的规定
    为什么重写了equals方法后还需要重写hashCode方法
    字符串常量池处在JVM的堆中,那么是在堆的哪个部分呢
  • 原文地址:https://www.cnblogs.com/cnjavahome/p/8511658.html
Copyright © 2020-2023  润新知