Chinaunix首页 | 论坛 | 博客

分类: LINUX

2011-08-01 12:58:19

文件权限问题补充
 
1,SUID  --> 先举一个例子:
   [root@localhost ~]# which passwd             #查看系统外部命令对应的二进制文件
 
 
/usr/bin/passwd
[root@localhost ~]# ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 19876 Jul 17  2006 /usr/bin/passwd
[root@localhost ~]# ls -l /etc/shadow
-r-------- 1 root root 1131 Jul 30 18:20 /etc/shadow
 
 

    由以上可发现:passwd 这个文件对应的命令是作用于/etc/shadow这个文件的,root用户作
 
为linux系统中权限最高拥有者,所有的权限问题对它来说都没有意义,所以虽
 
然/etc/shadow 对user用户只有r 权限,root用户一样可以执行文件,但是属组和
 
其他用户
的权限都为零(但是linux所有用户都可以用passwd命令该密码),这是为什么呢
 
答案就是
 
SUID的作用,到这里可能问题差不多该明白了吧,SUID的作用就是如果一个文件被设置了
 
SUID那么属组合其他用户在对文件进行处理的时候都不再以自己的身份而是对应的属主
 
来执行文件,需要注意的是如果原文件的属主有x权限,那么加上后用s表示,否者用S表示
 
chmod u+s /tmp/a.txt 

chmod u-s /tmp/a.txt
 
 
 
2,SGID : 对属组设置S位 (作用于目录!)
 
假设有这样一种场景,公式要做一个项目program,有A B 两个人完成,两人要实现互相能查看对方的所建文件内容,但是其他人不能看,这时候我们可以这样:
 
groupadd  program                #建立一个公用组
 
useradd   zhang                  #新增一个用户
 
useradd   li                     #新增一个用户
 
mkdir  /haha                     #建立一个公共目录(root身份 root组)
 
chown -R :program /haha          #改用户所属组为program
 
usermod -a -G  program zhang     #增program为zhang的附加组
 
usermod -a -G  program li        #........................
 
然后发现zhang 和 li 以前的文件都可以让对方访问,但是如果zhang新建一个文件那么文件的属性为 用户为zhang  所属组为zhang  ,这样新建的文件依然不能让Li访问。。。。。。

 


这个时候给公共目录加上SGID,所有的问题就解决了,这就是其作用。。。。。

chmod g+s  /haha
chmod g-s  /haha

3,sticky : 粘滞位  冒险位
 
 
还是上面的例子,如果在上述情况下,A和B发生矛盾,A一狠心把B的所有文件都删
 
了,那怎么办?这说明这样的权限存在很大的问题,所以我们引入了sticky位
 
chmod o+s /haha                #给haha目录加上了冒险位,
 
这个时候A和B就只能读对方的文件却不可以乱删对方的文件了...........

001   .....sticky          ..........chmod 0755 /file.txt  (二进制到十进制的转换)
010   .....SGID            ..........chmod 2755 /file.txt
011   .....SGID sticky     ..........chmod 3755  /file.txt
100   .....SUID            ..........
101   .....SUID sticky     ..........
110   .....SUID SGID       ..........
111   .....SUID SGID sticky..........
 

4,acl  --> access control list     --> getfacl  --> setfacl
 
 
linux系统当中root用户有至高无上的权限,所有的命令都可以使用,但是一般的用
 
户却有很多的命令不能使用,比如一般用户A想要让一般用户B能写自己的文件的时
 
候该怎么办?chown ?一般用户是不能用这个命令的....这个时候我们就要用acl
 
getfacl a.txt                            #查看文件控制列表
 
setfacl -m u:zhang:rw a.txt              #指定zhang用户对a.txt的权限
 
[tao@localhost Czuoye]$ setfacl -m u:zhang:rw a.txt

[tao@localhost Czuoye]$ getfacl a.txt
# file: a.txt
# owner: tao
# group: tao
user::rw-
user:zhang:rw-
group::rw-
mask::rw-
other::r--
-rw-rw-r--+ 1 tao tao 33 Jul 30 22:18 a.txt
 
setfacl -m g:zhang:rw a.txt           #给组zhang里面的所有用户都给rw权限
 
setfacl -x u:zhang:rw a.txt           #撤销用户zhang的权限列表
 
setfacl -x g:zhang:rw a.txt           #撤销组对文件的权限

 
阅读(1416) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~