Linux系统上的特殊权限
SUID,SGID,Sticky
1 权限
r,w,x
user,group,other
2 安全上下文
前提:进程拥有属主与属组,文件有属主与属组
(1) 任何一个可执行程序文件能否启动为进程,取决于发起者对程序文件是否拥有执行权限
(2) 启动为进程后,其进程属主为进程发起者,属组为发起者所属的组
(3) 进程访问文件时的权限,取决于进程的发起者
(A) 进程的发起者,同文件的属主,则应用文件属主权限
(B) 进程的发起者,属于文件的属组,则应用文件属组权限
(C) 应用文件"其他"权限
3 SUID
(1) 任何一个可执行程序文件能否启动为进程,取决于发起者对程序文件是否拥有执行权限
(2) 启动为进程后,其进程属主仍为原程序文件属主
权限设定:
chmod u+s
chmod u-s
4 SGID
默认情况下,用户创建文件或目录时,其属组为此用户所属的基本组
一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组
权限设定:
chmod g+s
chmod g-s
5 Sticky
对于一个多人可写的目录,如果设置了Sticky,则每个用户仅能删除自己的文件
权限设定:
chmod o+t
chmod o-t
SUID SGID STICKY
chmod 1777 /tmp/a.txt #a.txt属主属组和其他都是读写执行,同时应用了Sticky
几个权限位映射:
SUID:user占据属主的执行权限位
s:属主拥有x权限
S:属主没有x权限
SGID:group,占据group的执行权限位
s:group拥有x权限
S:group没有x权限
Sticky:other,占据other的执行权限位
t:other拥有x权限
T:other没有x权限
bash脚本编程:
过程式编程语言:
顺序执行
选择执行
循环执行
选择执行:
if 判断条件;then
条件为真的分支代码
fi
if 判断条件;then
条件为真的分支代码
else
条件为假的分支代码
fi
访问控制列表:ACL
简介:
可实现灵活的权限管理,除了文件的所有者,所属组和other,可以对更多的用户设置权限
命令:
setfacl [OPTION]... (u|g|group:|d):(USERNAME|GROUPNAME):权限 FILENAME
u:USERNAME:权限 :给指定的用户设定ACL权限
g:GROUPNAME:权限:给指定的组设定ACL权限
d:USERNAME:权限:一般用在目录上,说明以后在指定目录下创建的新文件也会附带此时设定的ACL权限
-k DIR:删除默认权限
-m:添加文件ACL权限
-x:删除ACL权限,只需指定u:USERNAME即可
-R:递归
-M:调用存放有ACL权限的文件(echo u:fang:rwx > fang.acl)括号中就是将权限存放到文件中的方法
例:setfacl -Rm -M fang.acl d2/ #给d2目录赋予fang.acl文件中的acl权限并且递归
-X:批量删除存放有ACL权限的文件(echo u:fang > delete.acl)括号中就是将权限存放到文件中的方法
例:setfacl -X delete.acl d2/ #删除d2目录符合delete.acl文件中定义的ACL权限
-b:清空指定文件或目录的所有ACL权限
--set:指定固定ACL权限,会通过指定的ACL覆盖掉原有的ACL权限
例:setfacl --set u::rw,u:fang:rw,g::r,o::- test.txt #给test.txt文件赋予所有者为rw,fang为rw,所有组为r,other为空的权限
--set-file=:=号后面指定备份的ACL文件
例:getfacl test.txt > test.acl #将test.txt文件的ACL权限备份到test.acl文件中
setfacl --set-file=test.acl test2.txt #将test.acl文件中存储的ACL权限赋予给test2.txt文件
getfacl f1 | setfacl --set-file=- f2 #将f1的ACL权限赋值给f2
getfacl FILENAME 查看指定文件的ACL权限
例:
(1)setfacl -m u:fang:rw test1.txt #在test1.txt上给fang用户读写权限;
getfacl test1.txt
# file: test1.txt #文件名称
# owner: root #文件所有者
# group: root #文件所属组
user::rw- #所有者的权限
user:fang:rw- #设定的ACL权限
group::--- #所属组的权限
mask::rw- #此处与文件所属组权限一样,将影响除了所有者与other的所有人,影响他们的最大权限,限高功能
other::--- #其他人的权限
(2)setfacl -m g:opt:r test1.txt #在test1.txt上给opt组读权限,那么opt组下的所有用户就有了访问此文件的权限
getfacl test1.txt
# file: test1.txt #文件名称
# owner: root #文件所有者
# group: root #文件所属组
user::rw- #所有者的权限
user:fang:rw- #设定的ACL权限
group::--- #所属组的权限
group:opt:r-- #赋予指定的组的权限
mask::rw- #此处与文件所属组权限一样,将影响除了所有者与other的所有人,影响他们的最大权限,限高功能
other::--- #其他人的权限
Note:如果ACL用户的权限与组的权限有了冲突,那么优先根据用户权限生效,组权限不会再继续生效,如果一个用户属于多个组,每个组分别有不同的权限,最后生效时会累加两个组的权限
"group::"如果与"mask::"后方对应的权限有所冲突,也就是不同的话,那么mask值生效
ACL权限生效顺序:
所有者,(自定义用户,所属组|自定义组)不能超过mask权限,Other