- 掌握基本权限ugo的命令(chmod、chown),列举2条设置权限命令并解释每个单词含义。
- 掌握基本权限acl的命令(setfacl、getfacl),列举2条设置权限命令并解释每个单词含义。
- 了解特殊权限含义(suid、chattr、umask),列举2条设置权限命令并解释每个单词含义。
1. 设置传统权限ugo
权限对象:
- u(user)文件或目录的所有者,属主
- g(group)文件或目录的所属的组,属组
- o(other)所有其他用户,其他人
- a(all)所有人,u+g+o
权限类型:
- r(read)读取文件内容或列出目录内容,读,r=4
- w(write)修改文件内容或修改目录中的文件,写,w=2
- x(execute)执行文件或访问目录中的文件,执行,x=1
chmod [options] mode filename
更改文件或目录权限change mode
- 使用符号模式
cd /tmp # 切换至/tmp目录
touch f1 # 在/tmp目录下创建名为f1的空文件
ls -l f1 # 长格式列出f1文件的详细信息
# -rw-r--r--. 1 root root 0 11月 6 13:57 f1
chmod ug+x,o-r f1 # 为属主和属组添加执行文件权限,其他人删除读取文件权限
ls -l f1
# -rwxr-xr--. 1 root root 0 11月 6 13:57 f1,f1变为绿色表示可执行文件
chmod g=-,o+rx f1 # 设置属组无任何权限,为其他人添加读取和执行权限
# -rwx---r-x. 1 root root 0 11月 6 13:57 f1
- 使用数字模式
chmod 750 f1 # 设置属主权限为读、写、执行,属组权限为读、执行,其他人无权限
ls -l f1
# -rwxr-x---. 1 root root 0 11月 6 13:57 f1
mkdir d1 # 新建名为d1的目录
touch d1/f2 d1/f3 # 在d1目录下创建f2和f3文件
chmod -R 750 d1 # 递归更改d1目录及其所有子目录和文件的权限,如果不添加选项-R,则只更改目录d1的权限,目录d1下的子目录和文件权限不变
chown [options] [user].[group] filename
或chown [options] [user]:[group] filename
更改文件或目录的属主和属组
chown alice.root f1 # 设置f1文件的属主为alice,属组为root
chown -R :alice d1 # 设置d1目录及d1目录下的子目录和文件的属组为alice
2. 设置扩展权限acl(access control list,访问控制列表)
acl是对传统ugo文件权限模型的扩展,ugo只能为1个用户,1个组和其他人设置权限。而acl提供更细粒度的权限控制,它允许为特定用户而不止是文件的所有者、为特定组而不止是文件所属组设置权限,能设置掩码限制所有组的权限,为新建文件和子目录设置默认权限。acl权限优先级高于ugo,如果一个文件既有ugo又有acl权限,acl权限将决定最终访问权。acl保留了ugo模型的基本结构同时增加了更多灵活性。
getfacl filename
查看acl权限
setfacl -m u:username:jurisdiction filename
,setfacl -m g:groupname:jurisdiction filename
修改或添加acl条目
setfacl -x u:[username] filename
,setfacl -x g:[groupname] filename
删除特定或所有用户或组的acl条目
setfacl -b filename
删除所有acl
setfacl -R [other options] rules dictname
递归地为目录及其子目录和文件设置acl权限
添加acl权限后使用ll
即ls -l
查看会看到权限后面有1个+
,表示该文件或目录有扩展地acl权限,删除acl权限后使用ll
命令查看时,权限后是一个.
,表示该文件或目录有SELinux安全上下文。
3. 其它特殊权限suid,sgid,stick,chattr,umask
- suid允许用户在执行某个程序时暂时获得该程序所有者的权限,这是一种强大的机制,但也可能带来安全风险,因此需要谨慎使用。当一个文件被设置了suid权限时,任何用户执行该文件,都会以文件所有者的身份运行,而不是以执行该文件的用户的身份运行。
chmod u+s filename
设置suid权限,chmod u-s filename
移除suid权限
- sgid类似于suid是一种特殊的文件权限,但作用于组而不是用户。sgid允许用户在执行某个程序时暂时获得该程序所属组的权限,这在需要共享资源或执行需要特定组权限的任务时非常有用。
chmod g+s filename
和chmod g+s dictname
设置sgid权限,chmod g-s filename
和chmod g-s dictname
移除sgid权限。
- stick
- chattr用于更改文件或目录属性的命令,允许设置和取消各种文件属性。
chattr [options] [attributes] filename
chattr +i f1
添加文件不可更改(删除、重命名、修改),chattr -i f1
移除不可更改属性。
- umask用户文件创建模式掩码,用于设置新创建文件和目录的默认权限。文件的默认权限通常为666(rw-rw-rw-),表示所有用户都有读取和写入权限但是没有执行权限,目录的默认权限通常是777(rwxrwxrwx),表示所有用户都有读取写入和执行权限。umask是一个权限掩码,用于从默认权限中移除某些权限位,umask的值表示要移除的权限位。