linux 文件特殊权限

SUID:set  UID 

简介:

SUID权限只对二进制程序有效

执行者对于该程序需要具有可执行权限

本权限仅在执行该程序的过程有效,执行者将具有该程序拥有者的权限

在文件拥有suid权限时,用户只要有执行这个文件的权限就会获得这个文件的属主权限

SGID

简介:

user对此目录具有r与x的权限时,该用户能够进入此目录

user在此目录下的有效群组将会变成该目录的群组

user若在此目录具有w的权限,则使用者所建立的新档案的群组与此目录的群组相同

Sticky bit(只针对目录有效)

简介:

用户对此目录具有w,x权限,即具有写入权限时,在该目录下建立档案或者目录时,仅有自己与root才有权力删除

这里就先讨论 SUID

建立一个文件,只有root有权限读写

xuebaiji@xbzy007:~/tmp$whoami xuebaijixuebaiji@xbzy007:~/tmp$ll /tmp/test.txt -rw------- 1 root root 26 Feb 23 18:05 /tmp/test.txtxuebaiji@xbzy007:~/tmp$cat /tmp/test.txt cat: /tmp/test.txt: Permission deniedxuebaiji@xbzy007:~/tmp$cat /tmp/test.txt cat: /tmp/test.txt: Permission deniedxuebaiji@xbzy007:~/tmp$sudo  cat /tmp/test.txt hello xbzy007   SUID test

准备一个简单的程序,读取上面的文件

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);   }

编译程序运行

xuebaiji@xbzy007:~/tmp$sudo  gcc  -o test-c test.c       xuebaiji@xbzy007:~/tmp$xuebaiji@xbzy007:~/tmp$./test-c file cannot be opened

提示打不开,因为只有root 才能读取该文件

下来给二进制程序加上suid 权限,在看看

xuebaiji@xbzy007:~/tmp$sudo  chmod u+s test-c       xuebaiji@xbzy007:~/tmp$./test-c hello xbzy007   SUID testxuebaiji@xbzy007:~/tmp$

哈哈 ,奇迹出现了,顺利读取出来了文件内容,到此 SUID 实验完成,不知道你看了是不是有所收获呢

后面将演示其他的特殊权限的使用,3KS