SUID: 运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者
SGID: 运行某程序时,相应进程的属组是程序文件自身的属组,而不说启动者的属组
Sticky: 在一个公共目录,每个人都可以创建文件,删除自己的文件,但不能删除别人 文件
什么意思?这些解释是不是云里雾绕的,还是用例子来解释吧,通俗易懂。
(一)
SUID: 比如,古代的时候,公主嫁给了平民,那么公主的很多权利就没有了,就不能像小时候那样随意的进宫玩耍了。怎么办?没关系,如果有了SUID之后,公主虽然嫁给了平民,但是她的权利不变,进宫或者行使其他的权利的时候,人们还是认她公主的身份,而不是她丈夫平民的身份。这就是SUID的作用。保持原来的身份不变。
一个文件,权限默认是:
-rwxr-xr-x root root /bin/cat
(1) # cat /etc/gshadow //用root用户查看/etc/gshadow可以查看!但是其他用户就没这么好的福气了。/etc/gshadow可不是那么好看的,只有管理员能查看。
(2) $ cat /etc/gshadow //运行这个命令之后,肯定是拒绝,谁让你是普通用户呢。
但是,加上下面这条命令:
(3) # chmod u+s /bin/cat //意思是给cat这个命令加上SUID.
-rwsr-xr-x. 1 root root /bin/cat //rws,看见没有,变成小写s.如果原来就有执行权限,就是小写s,原来没有执行权限,会变成大写的S.
然后:
(4) $ cat /etc/gshadow //现在运行这个命令,就能查看了。因为虽然是普通用户进行查看的,但是因为cat这个命令加上了suid ,所以/etc/gshadow还是认为是root用户进行查看,所以就给看了。suid的作用是,不管是那个用户进行cat,cat在运行时都贴着它本来自己的标签--root属主和root属组。
(二)
SGID
比如,root 是皇帝,其他的3个普通用户是大臣是和�|,刘墉,纪晓岚。
# useradd 和�| //和�|诞生了
# useradd 刘墉 //刘墉诞生了
# useradd 纪晓岚 //纪晓岚诞生了
# mkdir /tmp/朝廷 //朝廷是一个文件夹,请见谅。
# chmod g+w /tmp/朝廷 //让/tmp/朝廷这个文件夹对组内成员有写的权限
# groupadd 一品大臣 //建一个组,名字就叫一品大臣
# chown -R :一品大臣 /tmp/朝廷 //让/tmp/朝廷 这个文件夹的属组为一品大臣
# usermod -a -G 一品大臣 和�| //把和�|加入一品大臣这个附加组,下面相同。
# usermod -a -G 一品大臣 刘墉
# usermod -a -G 一品大臣 纪晓岚
现在,和�|写一个奏折,刘墉写一个奏折,纪晓岚写一个奏折,3个人写的奏折能互相浏览,更能互相更改,怎么实现,请看:
a. 和�|写奏折
$ cd /tmp/朝廷
$ touch 和�|.txt
-rw-rw-r--. 和�| 和�| 和�|.txt //默认其他人有浏览的权限,属主和属组都是本人,因此默认他们只能浏览其他人的权限,不能更改其他人写的内容。
b. 刘墉写奏折
$ cd /tmp/朝廷
$ touch 刘墉.txt
-rw-rw-r--. 刘墉 刘墉 刘墉.txt //同上
c. 纪晓岚写奏折
$ cd /tmp/朝廷
$ touch 纪晓岚.txt
-rw-rw-r--. 纪晓岚 纪晓岚 纪晓岚.txt //同上
经过以上步骤,每个人都能在/tmp/朝廷里面创建文件夹,但是,不能修改其他人的文件夹,怎么办?
答:
# chmod g+s /tmp/朝廷 //让朝廷这个文件夹有SGID的权限
然后,纪晓岚再创建一个文件夹:
$ cd /tmp/朝廷
$ touch 纪晓岚02.txt
-rw-rw-r--. 纪晓岚 一品大臣 纪晓岚02.txt //这个时候创建的文件夹默认属组是一品大臣。意味着只要是一品大臣这个组里面的人,比如和�|,不但可以修改纪晓岚的内容,而且还可以删除这个文件夹。纪晓岚要想不被别人删除他创建的东西,要做这一步:
# chmod o+t /tmp/朝廷 //用root 执行这一步就行了。就不能随便删除别人的东西 了
在上面的o+t 中,这个t指的就是sticky.
-------------------------------------------------------------------------------------------------
附加小知识点:
chmod 755 /tmp/1.txt //意味着的权限是 rwx r-x r-x ,分别是属主 读写执行,属组 读执行, 其他组的人 读执行。
chmod 5755 /tmp/1.txt //这个文件有SUID和Sticky!(数字中的第一个5,就是红色的5,表示有这个意思.)后面的755就是我们普通理解的--属主读写执行,属组读和执行,其他组的人读和执行。
chmod 4755 /tmp/1.txt //只有SUID,因此第一个数字是4.其他后面的755跟上面一样。
chmod 2755 /tmp/1.txt //只有SGID,因此第一个数字是2.其他后面的755跟上面一样。
chmod 1755 /tmp/1.txt //只有Sticky.