linux 文件特殊权限
SUID:set UID
简介:
SUID权限只对二进制程序有效
执行者对于该程序需要具有可执行权限
本权限仅在执行该程序的过程有效,执行者将具有该程序拥有者的权限
在文件拥有suid权限时,用户只要有执行这个文件的权限就会获得这个文件的属主权限
SGID
简介:
SGID 对普通二进制文件和目录都有效。
对于文件而言,和SUID类似,在执行该文件时,用户将获得该文件所属组的权限;当作用于目录时:
user若在此目录具有w的权限,则使用者所建立的新档案的群组与此目录的群组相同
Sticky bit(只针对目录有效)
简介:
用户对此目录具有w,x权限,即具有写入权限时,在该目录下建立档案或者目录时,仅有自己与root才有权力删除
这里就先讨论 SUID
建立一个文件,只有root有权限读写
1
2
3
4
5
6
7
8
9
10
11
|
xuebaiji@xbzy007:~/tmp$whoami
xuebaiji
xuebaiji@xbzy007:~/tmp$ll /tmp/test.txt
-rw------- 1 root root 26 Feb 23 18:05 /tmp/test.txt
xuebaiji@xbzy007:~/tmp$cat /tmp/test.txt
cat: /tmp/test.txt: Permission denied
xuebaiji@xbzy007:~/tmp$cat /tmp/test.txt
cat: /tmp/test.txt: Permission denied
xuebaiji@xbzy007:~/tmp$sudo cat /tmp/test.txt
hello xbzy007 SUID test
|
准备一个简单的程序,读取上面的文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
xuebaiji@xbzy007:~/tmp$cat test.c
#include "stdio.h"
int
main() {
FILE
*fp;
char
ch;
if
((fp=
fopen
(
"/tmp/test.txt"
,
"r"
))==NULL) {
printf
(
"file cannot be opened\n"
);
exit
(1);
}
while
((ch=
fgetc
(fp))!=EOF)
fputc
(ch,stdout);
fclose
(fp);
}
|
编译程序运行
1
2
3
4
|
xuebaiji@xbzy007:~/tmp$sudo gcc -o test-c test.c
xuebaiji@xbzy007:~/tmp$
xuebaiji@xbzy007:~/tmp$./test-c
file cannot be opened
|
提示打不开,因为只有root 才能读取该文件
下来给二进制程序加上suid 权限,在看看
1
2
3
4
|
xuebaiji@xbzy007:~/tmp$sudo chmod u+s test-c
xuebaiji@xbzy007:~/tmp$./test-c
hello xbzy007 SUID test
xuebaiji@xbzy007:~/tmp$
|
哈哈 ,奇迹出现了,顺利读取出来了文件内容,到此 SUID 实验完成,不知道你看了是不是有所收获呢
后面将演示其他的特殊权限的使用,3KS