设置正确的权限 chmod,setfacl,suid,sgid,sticky
chmod 改变文件、文件夹的使用权限 Change the permissions mode of a file.
u:拥有者
g:所属组
o:其他人
a:所有人(u+g+o)
r:读权限
w:写权限
x:执行权限
文件权限配置行为如下
+:添加权限 -:减少权限 =:赋予权限
例:
chmod a-x test.txt
chmod u+rw
chmod g-wx
chmod o-x
chmod 666 test.txt
setfacl 设定某个文件或目录的ACL (Access control list)
getfacl 取得某个文件或目录的ACL
在setfacl前,首先要检查文件系统是否支持setfacl,还需要编辑/etc/fstab文件,对需要setfacl的分区激活acl功能。
如: /dev/hda1 /home ext3 default,acl 0 2
给用户fxd设置acl功能: setfacl –m u:fxd:rw /project/test
删除用户、组或其他人的所有权限,用-x ,不需要指定权限(r,w,x)
如删除UID为500的用户所有权限:setfacl –x u:500 /project/test
umask –S 查看默认创建文件的权限
如:umask=0022 第一位是特殊权限位 (即setuid 或 setgid 或sticky,setuid=4,setgid=2,sticky=1) ,后三位为用户权限位(掩码值)。那创建的文件权限为 666-022=644。(新建文件默认没有x权限,所以用666-022)。
SUID:对一个可执行文件,不是以发起者身份来获取资源,而是以可执行文件的属主身份来执行。
SGID对一个可执行文件,不是以发起者身份来获取资源,而是以可执行文件的属组身份来执行。
STICKY:粘滞位,通常对目录而言。通常对于全局可写目录(other也可写)来说,让该目录具有sticky后,删除只对属于自己的文件有效(但是仍能编辑修改别人的文件,除了root的)。不能根据安全上下文获取对别人的文件的写权限。
授予setuid: chmod u+s 或 chmod 4755 同理:chmod u-s 或 chmod 755
授予setgid: chmod g+s 或 chmod 2755 同理:chmod g-s 或 chmod 755
授予sticky: chmod o+t 或chmod 1777 同理:chmod o-t 或 chmod 777
特殊权限位很危险,如给vi特殊位,那么会以root身体 编辑任何文件!!!
特殊权限位为 sticky=1,如果一个目录权限为777,且具有粘着位sticky,那么每个用户都可以创建文件,但只能删除自己所有的文件。
对于一个全局可写目录,加上sticky位以后,普通用户将只能删除自己的文件,而不能删除其他用户的文件。
[root@localhost tmp]# su - user1
[user1@localhost ~]$ id
uid=512(user1) gid=512(user1) groups=504(mygrp),512(user1)context=root:system_r:unconfined_t:SystemLow-SystemHigh
[user1@localhost ~]$ cd /tmp/share/
-bash: cd: /tmp/share/: Permission denied
[user1@localhost ~]$ ll -d /tmp/share
drwxrwSr-t 5 root mygrp 4096 Dec 30 16:09 /tmp/share
[user1@localhost ~]$
# 如上例,如果没有原位没有置X权限,即使同组的用户也无法进入目录,
# 再设置SGID位也不起作用