商务合作加Q:411239339

Linux特殊文件权限(chmod)

浏览:634次阅读
没有评论

共计 1230 个字符,预计需要花费 4 分钟才能阅读完成。

一般来说,使用过 Linux 的同学都知道,Linux 文件的权限有 rwx,所有者、所有组、其它用户的 rwx 权限是彼此独立的。为此,经常会听到如果某个 web 文件需要被修改的话,需要加上 777 的权限,这就是让所有用户可写。

   
但仔细一想,这样的权限未免有些想得比较天真,没有考滤特殊情况。例如 /tmp 目录默认权限是 777,而且有些文件也是允许所有用户访问修改的,那么是不
是任何一个用户都可以将这些删除呢?再如 /etc/shadow 保存的是用户密码文件,默认情况下它的权限是 640,那么只有 shadow 的
owner(root) 才能修改它,按照常规理解,这是不可理解的,因为每个用户都可能修改密码,也就是会修改这个文件。

    为了把这些情况解释清楚,需要引入 Linux 特殊文件权限的概念。Linux 特殊文件权限有三个玩意:sticky bit、SGID、SUID,以下一一道来。

    sticky bit

    sticky bit 只对目录有效,使目录下的文件,只有文件拥有者才能删除(如果他不属于 owner,仅属于 group 或者 other,就算他有 w 权限,也不能删除文件)。

    加 sticky bit 的方法:

    chmod o+t /tmp 或者

    chmod 1777 /tmp

   
查看是否加了 sticky bit,用 ls -l,可以看到有类似这样的权限:“-rwxrwxrwt”,t 就代表已经加上了 sticky
bit,而且生效了,如果显示的是“-rwxrwxrwT”,说明也已经加上了 sticky bit,但没有生效(因为本来 other 就没有写的权限)。

    看看 /tmp 目录的权限,就是 drwxrwxrwt 吧

    SGID(The Set GroupID)

    加上 SGID 的文件,表示运行这个程序时,是临时以这个文件的拥有组的身份运行的;加上 SGID 的文件夹,表示在这个目录下创建的文件属于目录所有的组,而不是创建人所在的组,在这个目录下创建的目录继承本目录的 SGID。

    加 SGID 的方法:

    chmod g+s /tmp 或

    chmod 2777 /tmp

    查看是否加了 SGID,用 ls -l,可以看到类似这样的权限“drwxrwsrwx”,s 就代表已经加上了 SGID,而且生效,如果显示“drwxrwSrwx”,说明已经加上了 SGID,但没有生效(因为本来 group 就没有执行的权限)。

    SUID(The Set UserID)

    SUID 与 SGID 是一样的,惟一不同的是,运行时是以这个文件的拥有者身份来运行。

    加 SUID 的方法:

    chmod o+s /tmp 或

    chmod 4777 /tmp

    同样的,加了 SUID 的文件权限有这类似这两种:“drwsrwxrwx”、“drwSrwxrwx”。

    看看 passwd 命令的权限:ll /usr/bin/passwd,是 "-rwsr-x-rx",终于知道为什么执行 passwd 时,可以修改 /etc/shadow 文件了吧

正文完
扫码赞助
post-qrcode
 0
果子
版权声明:本站原创文章,由 果子 于2014-12-17发表,共计1230字。
转载说明:除特殊说明外本站文章皆由果较瘦原创发布,转载请注明出处。
评论(没有评论)