文章目录
文件的普通权限
在linux中,每个文件都有归属的所有者和所属组
对普通文件的权限:可读(r),可写(w),可执行(x)
对目录文件的权限:
可读(r):能够读取目录内的文件列表(ls)
可写(w):能够在目录中新增,删除,重命名文件(touch)
可执行(x):能够进入该目录(cd)
修改权限常用命令
两个命令的共性:针对目录进行操作的时候需要加上大写的参数-R来表示递归操作,即对目录内所有的文件进行整体操作。
chmod
用于设置文件的一般权限及特殊权限。
这是一个与文件权限的日常设置强相关的命令。
u:拥有者
g:同组者
o:其他人
a:以上三者都
+/-:增加/减少权限
-R:对当前目录下的所有子文件(普通文件+目录)进行相同的拥有者变更。
数字:777表示三者同时拥有rwx权限,可自行设置。
chmod -R a+r rootdir//给所有人rootdir目录以及目录下所有子文件的访问权限
chown
用于设置文件的所有者和所有组,此命令普通的用户是没有权限使用的,需切换到root管理员后才能使用
su root
chown -R root:root kevindir//将kevindir目录以及目录下的所有文件的所有者和所有组改成了root
同时修改普通权限和特殊权限
SUID、SGID与SBIT也有对应的数字表示法,分别为4、2、1。也就是说777还不是最大权限,最大权限应该是7777,其中第1个数字代表的是特殊权限位。既然知道了数字表示法是由“特殊权限+一般权限”构成的.
举个例子:rwsrwSr–的数字表示法是6764.
文件的特殊权限
SUID
SUID是一种对二进制程序进行设置的特殊权限,能够让二进制程序的执行者临时拥有所有者的权限。如果在执行此程序的时候加上了SUID权限,就会发现查看这个程序命令的属性的所有者权限由rwx变成了rws。(其中的x改变成了s就意味着文件被赋予了SUID权限,如果原先的权限是rw-,那么就会变成rwS)
注意:不要将SUID权限设置到vim,cat,rm等命令上(凡是正在执行被SUID的人都可以拥有最高权限,注意维护安全)
SGID
SGID特殊权限有两种应用场景。
1,对二进制程序进行设置的时候,能够让执行者临时获取文件所属组的权限
2,对目录进行设置的时候,让目录中新创建的文件自动继承该目录原有用户组的名称(解释:有一个目录的所有组是root且该目录设置了SGID权限,那么用户a在该目录中创建了新的文件,该文件所属的组并不是a,而应该是root)
如果在查看属性的时候发现所有组的权限由rwx变成了rws,就说明了使用了SGID权限。
举个例子:在开始的时候用root身份创建了rootdir的目录,属性中显示此目录的所有者和所有组都是root,然后使用chmod -R 777 rootdir这个命令,将这个目录的权限打开(为了让kevin可以创建新的目录)。切换用户到kevin,这个时候在rootdir中创建一个新的目录rootkevindir发现它的所有者和所有组是kevin。这个时候使用chmod -R g+s rootdir这个命令(将这个目录加上SGID这个权限),然后再切换到kevin用户,在rootdir中创建新的目录rootkevin2这个目录,发现这个目录的所有者是kevin,但是所有组就是root了。可以得出结论文件自动继承该目录原有用户组的名称。
SBIT
SBIT权限可以确保用户只能删除自己的文件,而不能删除其他用户的文件。
去前面的SUID和SGID的权限显示方法不同,当目录被设置为了SBIT特殊权限以后,文件的其他用户o的x执行全权限就会被替换成t或者T(原先有x则变成t,没有则变成T)
chmod o+t kevindir//这样就增加了kevindir目录的特殊权限SBIT
文件的隐藏权限
隐藏起来的权限,默认情况下不能直接被用户发觉,这种“奇怪”的文件权限也保障了Linux系统的安全性。
chattr命令
chattr命令用于设置文件的隐藏权限()
如果想把某个隐藏功能添加到文件上,需要+参数
如果想把某个隐藏功能从文件中移除,需要-参数
chattr命令中可供选择的隐藏权限非常丰富
举个例子:
chattr +a test,在输入完这个命令以后test这个文件就只能被覆盖而不能被删除。
lsattr命令
lsattr命令用于查看文件的隐藏权限。
举个例子
lsattr test
文件访问控制列表
前文中讲到的一般权限,特殊权限,隐藏权限有一个共性就是能够同时对很多人生效。如果想针对某个指定的用户那么就需要用到文件的访问控制列表(ACL)。基于文件或目录设置ACL的意思也就是对设置操作权限
注意:如果针对目录设置了ACL,那么目录中的文件会继承其ACL特权;如果针对文件设置了ACL,那么文件就不再继承其所在目录的ACL特权。
setfacl
setfacl命令用于管理文件的ACL权限规则。
ACL权限提供的是在所有者、所属组、其他人的读/写/执行权限之外的特殊权限控制。使用setfacl命令可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制(也就是针对某个东西设置的特殊权限).其中,针对目录文件需要使用-R递归参数;针对普通文件则使用-m参数;如果想要删除某个文件的ACL,则可以使用-b参数
setfacl -参数 用户权限 文件
让某一个用户对某一个文件具有某种权限
举个例子:
[newuser1@localhost kevindir]$ cd /root
bash: cd: /root: Permission denied//这里看出是会报错的
//进行更改
[root@localhost kevin]# setfacl -m u:newuser1:rwx /root
[root@localhost kevin]# su newuser1
[newuser1@localhost kevin]$ cd /root
[newuser1@localhost root]$
再举个例子:
在kevin用户中创建了文件test,内容是try.需求是用户newuser1对test能够拥有rwx权限.
[root@localhost kevindir]# setfacl -m u:newuser1:rwx test
[root@localhost kevindir]# su newuser1
[newuser1@localhost kevindir]$ cat test
try
如果针对的是某一组的权限,那么把u改成g即可.
权限:-rw-rwxr–+,发现后面有个+,这就说明了此文件已经设置了ACL.
删除某个acl权限:
[root@localhost kevindir]# setfacl -x u:newuser1 test//删除newuser1上关于test权限的acl权限.
getfacl命令
getfacl命令用于查看文件的ACL权限.
[newuser1@localhost kevindir]$ getfacl test
# file: test
# owner: root
# group: kevin
user::rw-
user:newuser1:rwx//可以看出这一句就是加的ACL权限
group::r--
mask::rwx
other::r--