Linux权限那些事儿(1)


Linux的权限管理与Windows差异较大,很多Linux使用者难以系统的理解,而权限的重要性不言而喻,本文通过案例式循序渐进的讲解,来为读者朋友们庖丁解牛。在《从ls命令开始》和《深入理解SetUID》文章中,笔者已经分别讲解了rwx权限和特殊权限SetUID ,本文查缺补漏把剩下的权限一一剖析,期望网友能够看完这三篇文章后对Linux权限有一个整体的把握。

一、 权限之粘着位

Linux中有一个存放临时文件的目录/tmp(类似于Windows中的temp目录),每个用户产生的临时文件都存放在此目录下,也就是说每个用户对/tmp目录都应该有写权限(否则无法拷贝生成文件),这样造成一个问题,比如,高洛峰在/tmp目录下创建了一个文件,张沫看着不爽就可以删掉,这如何控制?

其实,这种情况永远都不会发生,因为/tmp目录有一个特殊的权限标记:

ls -ld /tmp

drwxrwxrwt 5 root root 4096 May 24 13:55 /tmp

瞧见那个rwx权限最后的“t”了没,那个神奇的“t”就是粘着位t(有的资料中文也称为粘滞位),是Linux特殊权限中的第三个(另外两个是SetUID和SetGID),定义为:权限为777的目录设置粘着位t以后,具有写权限每个用户都可以在目录下创建文件,不同的是每个用户只能删除自己是所有者的文件,也就是说只能删除自己创建的文件。

读者可以做一下试验,重复一下《草根》第二期“从ls命令开始”中的案例一操作(给目录/test授予777权限用一个普通用户登录删除另一个普通用户创建的文件),不过这次创建的目录/test多授予它一个粘着位权限:

chmod o+t /test # 或 chmod 1777 /test

此时普通用户尝试删除其他用户的文件时,会给出提示“Operation not permitted”(中文翻译:你丫没事吧,瞎得瑟啥,哥的文件你删不了)。

二、 文件系统权限

每个操作系统都要有一种组织管理数据的方式,我们可以理解为就是文件系统,比如Windows的NTFS、FAT ,Linux的EXT ,而在Linux加载分区时可以针对文件系统进行权限设定。

配置文件/etc/fstab保存了Linux启动时自动加载的分区信息,/etc/fstab文件中第四项定义了加载时的设置,默认为defaults ,包括rw、suid、dev、exec、auto、nouser、async ,如果想改变整个分区的限定,可以利用这些选项。本文举两例说明,证明基于文件系统的权限那是相当霸道。

案例一:只读分区

默认加载分区是可读写rw的,但是如果特殊应用希望分区加载后是只读的,可以做一下设置:

vi /etc/fstab # 编辑/etc/fstab文件在defaults后加入ro选项(逗号分隔)

LABEL=/soft /soft ext3 defaults,ro 1 2

mount -o remount /soft # 重新加载/soft分区,使设置生效

如果你不嫌麻烦也可以重启系统,设置同样会生效。

此时整个/soft分区都是只读的,用root登录后执行:

touch /soft/testfile

touch: cannot touch `testfile': Read-only file system

会提示/soft分区是只读的,即便牛X到是root也不可以创建文件,这是凌驾于rwx权限之上的文件系统权限,相当的牛A与牛C之间。像本例是笔者公司的软件共享目录,一般半个月才更新一次软件,平时不想任何人增加或删除(包括不希望root用户误删除),所以设置为ro ,更新软件时,可以临时更改会rw来设置:

mount -o remount,rw /soft

在命令行上也可以设置分区权限,但是只是当前会话有效,而写入/etc/fstab文件后则会一直有效。

案例二:安全分区

数据存储的分区,如用做备份的分区,我们可以增加下安全设置选项:

vi /etc/fstab # 编辑/etc/fstab文件在defaults后加入noexec选项

LABEL=/backup /backup ext3 defaults,noexec 1 2

mount -o remount /backup # 重新加载/backup分区,使设置生效

此时做个试验,我们使用普通用户拷贝一个命令文件pwd在/backup目录下

cp /bin/pwd /backup

/backup/pwd

-bash: pwd: Permission denied

ls -l pwd

-rwxr-xr-x 1 liming liming 93560 Sep 25 10:13 pwd

命令拷贝到/backup下虽然具有可执行权限,但是也无法执行,在/backup分区下,任何可执行文件都将不能执行,这么做的意义在哪里?如果攻击程序、木马、病毒不能够执行,那么就相当于没有意义。

其他选项不做更多演示,这里只抛砖引玉,其他选项设置读者可man mount查看,查看-o选项中的详细介绍,更多设置读者可自行尝试,所谓授之以鱼不如授之以渔读万卷书不如行万里路万恶淫为首窗前明月光啊。


相关内容