曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 7541|回复: 4
打印 上一主题 下一主题

文件权限

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2008-11-21 03:32:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一般的,一个文件的预设权限为 666 (注意:这里的权限不是最终呈现在 ls -l 后看到的权限);
        一个目录的预设权限为 777

我们最终看到的权限其实是通过 umask 对 预设权限进行 block (遮挡)后形成的:

这里,非超级用户的默认 umask = 002 (可以通过执行 umask 后看到)
      超级用户的默认   umask = 022

那么假如我们执行一下指令:

touch file.txt     /*普通文件,预设权限为666,且普通用户的 umask=002,则经过 umask 的 block 后 file.txt 的权限就变成了 664;超级用户下为 644*/

mkdir DirFile     /* 目录文件,预设权限为777,且普通用户的 umask=002,经过 umask 的 block 后,目录的权限变为 775;超级用户下则为 755*/

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
沙发
 楼主| 发表于 2008-11-21 03:45:29 | 只看该作者

特殊权限

特殊权限( Special Permissions )

特殊权限又称为 第四个权限( fourth permission ):

suid             sgid             sticky

suid    在 u 组的 x 位表示
sgid    在 g 组的 x 位表示
sticky  在 o 组的 x 位表示

在 r-xr-xr-x 这样的一组权限设定中,u 组中已经具备 x 权限,那么在设定 suid 权限时,用小写 s 表示,形如:rws 。同样的在 g 组中也具备 x 权限,那么设定 sgid 时,也用小写 s 表示,此时 g 组的形式为 r-s 。在 o 组中,也已经具备 x 权限,那么在设定 sticky 时,用小写 t 去掉 x 表示,形如 r-t 。那么整个形式在设定后为: r-sr-sr-t 。

在 r--r--r-- 这样的一组权限设定中,各个组的 x 位都没有相应的权限,那么在设定 suid sgid sticky 时,则 x 位都用相应的大写字母表现,设定后形式为: r-Sr-Sr-T 。




使用 chmod 来设定特殊权限

假设有两个文件 file1 和 file2 ,他们相应的权限分别为 -rwxr-xr-x 和 -rwxr-xr--

1、如果想在 file1 里设定特殊的 suid 权限,那么可使用 chmod 进行下面的操作:

chmod u+s file1

执行后,查看修改结果:

-rwsr-xr-x

2、如果想在 file2 里设定特殊的 sgid 权限,那么可使用 chmod 进行下面的操作:

chmod g+s file2

执行后,查看修改结果:

-rwxr-sr--

3、如果想在 file1 里设置 sticky 权限,那么进行如下操作:

chmod o+t file1

执行后,查看修改结果:

-rwsr-xr-t         /* o 组中已有 x 权限,故修改后以小写字母 t 表示 */

4、如果想在 file2 里设置 sticky 权限,那么进行如下操作:

chmod o+t file2

执行后,查看修改结果:

-rwxr-sr-T           /* o 组中原来没有 x 权限,故修改后以大写字母 T 表示 */



特殊权限的数字表示

suid---4         sgid---2        sticky---1

假设,file1 文件的权限为: -rwxr-xr-x   ,那么设置 sgid 权限还可以这么做:

chmod 2755 file1

查看结果,file1 的权限变为:  -rwxr-sr-x

若要同时设置 suid,  sgid, stick 三个权限,那么就有 4+2+1 = 7 , 故有:

chmod 7755 file1

执行后,file1 的权限变为:  -rwsr-sr-t




4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
板凳
 楼主| 发表于 2008-11-22 11:50:50 | 只看该作者

文件中特殊权限的作用

suid 权限可以让执行这个文件时,是以文件的拥有者的权限进行,而不是执行这个命令的用户本身的权限。如:

[Plain Text] 纯文本查看 复制代码
ls -l /bin/ping

-rwsr-xr-x 1 root root 39864 06-07 03:48 /bin/ping


从上面的指令的结果看出,ping 指令具有 suid 的特殊权限,那为什么这样呢?

ping 指令使用 ICMP 协议测试计算机与计算机之间是否连通。而在 linux 的 kernel 里面设定了只有 root 才有权限控制 ICMP 的封包。 所以,设定了 ping 命令具有 suid 特殊权限并且 ping 命令的所有者(owner)是 root 后,这样就不管是哪一个使用者使用 ping 这个指令都是以 root 的身份来执行这个命令。



先测试一下 ping 命令的正常使用(在非 root 下执行):

ping 192.168.1.1 -c4            /*c4 表示 ping 4 次*/

返回结果如下:
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.01 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.621 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=1.04 ms
64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=0.638 ms


假如这么修改 ping 的权限:

chmod u-s /bin/ping

再查看 ping 的权限情况,变为:

-rwxr-xr-x 1 root root 39864 06-07 03:48 /bin/ping

从上可见,suid 的特殊权限已经被去除,而 o 组仍然具有可执行的权限,这样再回到非 root 的用户下测试一下 ping 指令:

ping 192.168.1.1 -c4

结果出现:

ping: icmp open socket: Operation not permitted             /* 不允许操作 icmp 的 socket,但仍然允许执行指令 */
 sgid 的作用类似于  sguid

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
地板
 楼主| 发表于 2008-11-22 14:14:13 | 只看该作者

特殊权限对目录的作用

Special permission for directories:

sticky bit : files in directories with the sticy bit set can only be removed by the owner and root,regardless of the write.

sgid : file created in directories with the sgid bit set have group affiliations of the group of the directory

Ofent both the stick bit and the sgid permission will be set on a project directory.



sgid 和 sticky 可以设置在目录上。那么在设置有 sticky 位的目录里的文件,只有文件的拥有者及 root 才可以删除文件权限,而不是看 write 的权限来决定。

比如执行以下指令:

ls -ld /tmp       /*参数 d 只是列出目录的情况,如果省去 d 那么就会列出目录里面的内容*/

结果可以看到:

drwxrwxrwt 169 root root 20480 11-22 13:45 tmp

从上面的显示结果可以看到,/tmp 目录有特殊权限 sticky 。那么这时假设 /tmp 目录下有一个 test.c 的文件,其权限如下:

-rw-rw-rw- 1 beyes users 0 11-22 14:03 test.c

从上面看到,o 组里具有 write 的权限,那看起来好像别的用户(非root)是可以将之删除的,那现在切换到另外一普通用户 l4nneret 来测试一下:
l4nneret@linux-beyes:/tmp> rm -f /tmp/test.c
rm: 无法删除 “/tmp/test.c”: 不允许的操作

结果提示无法删除,不允许操作。这是因为 test.c 是 beyes 用户的文件,而这个文件所在的目录是具有 sticky 特殊权限的目录下,所以即使这个文件具有其它组 write 的权限,那也是除了 root 帐号外,其他人都是无法将之删除的。但是如果往这个文件里写内容,却是可以的。从而可知,sticky 权限具有保护作用的功能!



假如一个目录有 sgid 的权限,那么只有拥有这个目录的 组 中的成员,才能在这个目录中创建文件。

比如我用 beyes 这个用户在 /tmp 下建一个也叫 beyes 的目录,其权限先设置为 777,亦即其他组成员也可以在写这个目录。此时正好有另外一个用户叫 l4nneret ,所属的组为 l4nneret。那么尝试在 /tmp/beyes 目录建立一个文件 l4.test 看看:

touch l4.file

指令执行完毕后,发现 l4.file 文件已经存在于 beyes 文件夹中;且权限信息为:
-rw-r--r-- 1 l4nneret l4nneret 0 11-23 12:03 l4.file

由上可见,l4.file 文件的所有者为 l4nneret,所属的组为 l4nneret  ,这便是一般情况。

那么用以下命令为 beyes 文件夹添加 sgid 特殊权限:

chmod g+s beyes

执行后查看目录的权限情况:
drwxrwsrwx 2 beyes users 4096 11-23 02:51 beyes

从上面可见,sgid 已经成功设置,同时 o 组仍然具备可写的权限。这时再返回用 l4nneret 这个用户尝试在 beyes 文件夹中建立一个叫 l4.file2 的文件看看:
-rw-r--r-- 1 l4nneret users    0 11-23 12:06 l4.file2

由上面看到,l4.file2 这个文件,所有者为 l4nneret,且组的拥有者为 users 。这是因为,l4.file2 是建立在 beyes 这个文件夹下的,而这个文件夹的组的拥有者为 users,且这个文件夹被设置了特殊权限 sgid 。

这种情况可以打一个比方说明:

假设 l4nneret 用户是一个公司里人事部门的员工(人事部对应于组 l4nneret);
        beyes      用户是这个公司里技术部门的员工(技术部门对应组 users);这个技术部门有个档案专柜,并规定不论是公司里的谁,凡是在这个专柜里建立的档案都必须是属于技术部门的(这个专柜相当于目录 beyes,而这个规定相当于设定了 sgid 的特殊权限。

现在,l4nneret 来技术部门这个专柜里建立了一个档案 l4.file2 ,那么自然的,这个 l4.file2 的组拥有者就是技术部门--即 users 。



sticky 位

像 /tmp 这个目录被设置了 sticky 位。在 /tmp 目录下,谁都可以 创建/删除 文件,但一旦设置了 sticky 位后,那么这个目录里的文件只能被创建者和root删除。

而在上面的 beyes 文件夹中,尽管设置了 s 位 和 t 位,beyes 用户还是有权限删除 l4nneret 这个用户所在这个文件夹里的创建的文件!为什么呢?因为 beyes 文件夹是由 beyes 这个用户建立的,所以他是这个文件夹的拥有者,也就相当于这个专柜的专柜经理,所以他有删除这个文件的权限!

但是,如果 beyes 这个文件夹是 别的用户所建,也就是说 beyes 不是这个专柜的经理,那么当对这个文件夹设置了 sgid 和 sticky 权限后,l4nneret 这个用户再在这个文件夹里建立的文件,beyes 也就无法将之删除了。

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
5#
 楼主| 发表于 2008-12-15 02:01:13 | 只看该作者

umask 定义位置(openSUSE )

/etc/profile 中:
beyes@linux-beyes:~/桌面> cat /etc/profile | grep "umask"
# The global umask value is stored in /etc/login.defs and
# will be set by pam_umask.so (see "man pam_umask").
#umask 022

再查看 /etc/login.defs
#
# Umask which is used by useradd and newusers for creating
# new home directories.
#
UMASK            022
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-19 18:07 , Processed in 0.068670 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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