您的位置:首页 > 运维架构 > Linux

Linux笔记 8 (特殊权限位)

2014-11-18 14:43 218 查看

Linux的特殊权限

我们都知道文件和目录最常见的权限有三个:可读(r)、可写(w)、可执行(x),它们分别对应的值是:4(r)、2(w)、1(x)。但是,事实上Linux系统中,文件还具有SUID、SUID、SBIT这三种常见的特殊权限,分别对应的值也是:4(SUID)、2(GUID)、1(SBIT)。下面就探讨下有关SUID、GUID、SBIT这三个特殊权限的作用。

SUID

SUID(SetUID):该权限位的作用是让普通用户可以以文件所有者的身份去运行程序或命令。

先看下 /etc/passwd 文件的权限信息:

[root@localhost ~]# ls -l /etc/passwd
-rw-r--r--. 1 root root 1516 Oct  6 13:44 /etc/passwd

我们通过ls -l 命令可以看到,/etc/passwd 文件的权限是 rw-r--r-- ,也就是说除了root用户可以对 /etc/passwd 文件进行修改之外,其他的普通用户都是不允许修改的。

再看下 /usr/bin/passwd 文件的权限信息:

[root@localhost ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 25980 Feb 22  2012 /usr/bin/passwd
通过 ls -l 命令可以看到,/usr/bin/passwd 文件的权限是rwsr-xr-x,其中权限位中的s就是SUID 的意思,其作用就是普通用户在对 /usr/bin/passwd 文件进行修改的时候,是临时变成了root 用户对 /etc/passwd 进行修改,进而达到修改登录密码的目的。

也就是说,如果一个文件拥有了s权限,那么普通的用户执行该文件的话,将会以该文件的所有者的身份去执行。例如上面的 /usr/bin/passwd 文件所有者是root,那么用户在执行该文件的时候,会瞬间切换到 root 用户进行执行,执行完成之后再切换回用户本身。(TIPS:如果我们将touch 命令设置SUID权限,那么普通用户使用 touch 命令进行创建文件的话,创建出来的新文件所有者为 root ,也即是 touch
命令的所有者,但是,文件的用户组还是该普通用户所在的用户组)。

设置SUID:

chmod u+s 或者 chmod 4[权限值] 如:chmod 4755 [文件名]

取消SUID

chmod u-s 或者 chmod [权限值] 如:chmod 755 [文件名]

TIPS:设置SUID 必须是可执行的文件才可以。如果是不可以执行的文件设置了SUID,就会出现下面的情况。

[root@localhost ~]# chmod u+s /home/suners/2.txt
[root@localhost ~]# ls -l /home/suners/2.txt
-rwSrw-r--. 1 root suners 0 Oct  7 06:51 /home/suners/2.txt
出现一个大写的'S' , 这说明该文件是不可执行的。

SGID

SGID(SetGID):此权限只对目录起作用,目录被设置该位后,任何用户在此目录下创建的文件都具有与该目录所属组相同的组。

直接看下面的例子:

[root@localhost test]# mkdir sgid
[root@localhost test]# chmod 2777 sgid/
[root@localhost test]# ls -dl sgid/
drwxrwsrwx. 2 root root 4096 Oct  7 07:22 sgid/
上面的命令中,创建了一个 sgid 的目录,并且给目录添加了SGID 的权限,目录的所有者和所属组是 root ,并且普通用户对该目录具有读写权限。现在切换到其他账号,进入该目录进行添加文件的操作:
[suners@localhost sgid]$ mkdir dir1
[suners@localhost sgid]$ touch test.txt
[suners@localhost sgid]$ ls -dl dir1 test.txt
drwxrwsr-x. 2 suners root 4096 Oct  7 07:27 dir1
-rw-rw-r--. 1 suners root    0 Oct  7 07:27 test.txt
从上面的执行结果可以看出,当我们切换到 suners 账号之后,在 sgid 目录里面创建了 一个dir1目录 和 test.txt 文件,无论是创建的目录还是文件,所有者是 suners 但 所属组就是与sgid
一样的 root,这就是SGID的作用。

设置SGID:

chmod g+s 或者 chmod 2[权限值] 如:chmod 2755 [目录名]

取消SGID

chmod g-s 或者 chmod [权限值] 如:chmod 755 [目录名]

SBIT

SBIT(Sticky粘着位):当一个目录具有SBIT(粘着位)这个权限之后,用户可以在这个目录下进行创建文件或目录,但是,删除文件的时候,用户只能删除所有者为自己的文件或目录。

直接看下面的例子:

[root@localhost test]# mkdir sbit
[root@localhost test]# chmod 1777 sbit/
[root@localhost test]# ls -dl sbit/
drwxrwxrwt. 2 root root 4096 Oct  7 07:50 sbit/
上面的命令中,创建了sbit 目录,并且给该目录分配了 SBIT 权限。接下来,分别登录两个不同的用户,在sbit 目录里面添加文件,并且,让其中一个用户尝试删除另一个用户创建的文件,我们可以看到如下结果:
[jack@localhost sbit]$ ls -al
total 8
drwxrwxrwt. 2 root   root   4096 Oct  7 07:56 .
drwxr-xr-x. 6 root   root   4096 Oct  7 07:50 ..
-rw-rw-r--. 1 jack   jack      0 Oct  7 07:56 test_jack.txt
-rw-rw-r--. 1 suners suners    0 Oct  7 07:54 test_sun.txt
[jack@localhost sbit]$ rm ./test_sun.txt
rm: remove write-protected regular empty file `./test_sun.txt'? y
rm: cannot remove `./test_sun.txt': Operation not permitted
从上面的结果中,可以得到在具有SBIT 权限的目录里面,删除非自己所有的文件是不被允许的,这就是SBIT的作用。

设置SBIT:

chmod o+t 或者 chmod 1[权限值] 如:chmod 1755 [目录名]

取消SBIT

chmod o-t 或者 chmod [权限值] 如:chmod 755 [目录名]

-

-
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: