1.特殊权限
SUID:运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者。(SUID权限一般没有特殊情况不要使用)
chmod u+s FILE 添加对应的SUID权限, chmod u-s FILE 减少对应的SUID权限
如果FILE本身原来就有执行权限,则SUID显示为s;否则就显示为S;
SGID:运行某程序时,相应进程的属组是程序文件自身的属组,而不是启动者所属的属组;
chmod g+s FILE 添加对应的SGID权限, chmod g-s FILE 减去对应的SGID权限
Sticky:在一个公共目录下,每个用户都可以创建文件,删除自己创建的文件,不能删除别人创建的文件
chmod o+t DIR chmod o-t DIR
例题练习:
管理员身份 执行的命令
root mkdir /tmp/project 建立一个目录为/tmp/project/
root chmod g+w /tmp/project/ 并给该目录一个写权限
root useradd usera 创建用户 usera
root useradd userb 创建用户 userb
root useradd userc 创建用户 userc
root groupadd developteam 创建一个公共组为developteam,
root usermod -a -G developteam usera 将用户usera的附加组添加至developteam
root usermod -a -G developteam userb 将用户userb的附加组添加至developteam
root usermod -a -G developteam userc 将用户userc的附加组添加至developteam
root su - usera
usera cd /tmp/developteam
usera touch a 我们可发现a 的属主和属组分别为 usera usera
root su - userb
userb cd /tmp/developteam
userb touch b
root chmod g+s /tmp/project 以管理员root身份,添加用户的SGID权限
root su - usera
usera cd /tmp/developteam
usera touch a.sh 可发现a.sh的属主和属组分别为,usera developteam
现在同在一个组为developteam的userb或者userc可以删除usera创建的a.sh
root chmod o+t /tmp/project 以管理员root身份,添加用户的Sticky权限
现在同在一个组为developteam的userb或者userc就不可以删除usera创建的a.sh,现在权限规定只有usera才可以删除这个文件。
2.文件系统访问控制列表
FACL:filesystem Access Control List
利用文件扩展保存额外的访问控制权限
setfacl 设定访问控制权限
-m:设定
u:UID:perm FILE
g:GID:perm FILE
例:setfacl -m u:usera:rw- inittab
d:u:UID:perm DIR 为某个目录设置访问控制列表
d:g:GID:perm DIR
-x:取消
u:UID
g:GID
例:setfacl -x u:usera inittab
getfacl 获得访问控制权限
无论facl给用户多少访问权限,总权限不能超出getfacl中mask最大的访问权限。
3.文件系统访问的顺序:
普通:owner-->group-->other
查看文件的属主是否和访问的属主是同一个,就以属主的访问权限访问该文件,
否则,就查看属主所在的属组是都和文件的属主所在的属组是否一个,就以文件属主所在属组的访问权限,访问该文件,否则就以其他人权限访问该文件
facl:owner-->facl,user-->group-->facl,group-->other
查看文件的属主是否和访问的属主是同一个,就以属主的访问权限访问该文件,否则,看文件属主所设定facl的访问用户是不是可以访问该文件,否则,就查看属主所在的属组是都和文件的属主所在的属组是否一个,就以文件属主所在属组的访问权限,访问该文件,否则,就查看文件属组所设定facl的所规定的可以访问的所属该属组的用户,否则就以其他人权限访问该文件