往期内容:
Linux常用指令合集
Linux文本编辑器
Linux软件包管理
Linux用户管理
但创建的一个用户的权限与属主(rwx),属组(rwx),其他人(—)不同时,也就是需要创建除属主,属组,其他人外的第四种用户是,则需要ACL权限。
我们前面的rwx是用户操作文件的权限,ACL本身也是用户操作文件的权限,但是是否可以支持ACL权限,不是说看文件或者用户是否支持,而是看文件所在的分区是否支持ACL权限。
我使用的是CentOS7,xfs分区支持ACL权限。
getfacle 文件名
setfacl 选项 文件名
选项:
-m #设定ACL权限
-x #删除指定的ACL权限
-b #删除所有的ACL权限
-d #设定默认ACL权限
-k #删除默认ACL权限
-R #递归设定ACL权限
现在我们来演示一下:
mkdir /project
useradd Tony
passwd Tony
useradd Jane
passwd Jane
groupadd tgroup
gpasswd -a Tony tgroup
gpasswd -a Jane tgroup
chown root:tgroup /project/
更改权限
属主(rwx),属组(rwx),其他人(—),即改为(770)
chmod 770 /project/
useradd testuser
passwd testuser
我们现在给testuser用户设定ACL权限,设定的权限为(rw-),如果是给组设定ACL权限,把u改为g即可。
setfacl -m u:testuser:rx /project/
我们再来看看project目录的权限发现多了个“+”,说明除了普通权限外还有ACL权限。
getfacl /project/
上面我们查看ACL权限时,会看到有一个mask,这个就是最大有效权限。
其实我们所赋予的ACL权限并不是用户真正的权限,还需要与mask**“相与”**之后才能得到用户的真正权限。
mask权限是可以通过下列命令进行修改的:
setfacl -m m:rx /project
当我修改为rw后,用户最大拥有的ACL权限就只能是rw了。
setfacl -x u:用户名 文件名 #删除指定用户的ACL权限
setfacl -x g:组名 文件名 #删除指定组的ACL权限
setfacl -b 文件名 #删除文件的所有ACL权限
递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限。
setfacl -m u:用户名:权限 -R 文件名
但如果我再创建一个新目录或文件,该新目录或文件仍然是不具有ACL权限的,原因很简单,这是在递归命令结束之后才创建的。
这时候我们就需要用到下面的默认权限了。
默认ACL权限的作用是如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件/目录都会继承父目录的ACL权限。
注意!!!
该命令是针对新创建文件/目录的,对已经存在的文件/目录无效,已经存在的文件/目录要进行递归ACL权限。
setfacl -m d:u:用户名:权限 文件名
passwd命令拥有SetUID权限,所以普通用户可以修改自己的密码,我们看看passwd的权限,发现多了一个s,也就是说在这个文件的所有者范围内拥有SUID权限。
chmod 4755 文件名 #第2个数代表属主权限,在前面+4则说明赋予SUID权限
chmod u+s 文件名 #执行这个命令用户必须有x权限
chmod 755 文件名
chmod u-s 文件名
locate命令拥有SGID权限,在对应的所属组权限的x的位置改为s。
举个例子:
首先我创建一个目录。
mkdir /tmp/test
赋予目录SGID权限,属主、属组、其他人的权限改为777,命令下面会讲。
chmod 2777 /tmp/test
查看一下目录权限,已经出现了s。
ll -d /tmp/test
这时候我们切换到普通用户:
su - Tony
随意创建一个文件,我们发现这个文件的属主和属组都是该用户,但如果我们进入目录test,并创建文件,这个文件的属组是root。
也就说明了普通用户在该目录中新建文件的默认属组是这个目录的数组。
chmod 2755 文件名
chmod g+s 文件名
tmp目录拥有SBIT,我们可以看到在其他人的权限里有个t。
设置(两种方法):
chmod 1755 目录名
chmod o+t 目录名
取消:
chmod 755 目录名
chmod o-t 目录名
chattr [+-=][选项] 文件或目录名
+:增加权限
-:删除权限
=:等于某权限
选项:
命令:
visudo #实际修改的是/etc/sudoers文件
例如现在我给用户Tony赋予shutdown -r 关机重启命令,则可以这样写:
但我们不能像root用户一样直接敲命令shutdown -r now示例如下:
sudo -l #确定该用户为Tony
sudo /sbin/shutdown -r now #输入命令要输入绝对路径
Linux系列文章均已打包成PDF版本的笔记,关注公众号“大拨鼠Code”回复“Linux”领取,持续更新。