Linux之文件和目录权限总结
Linux系统中一切皆文件
一般权限rwx--特殊权限sst--隐藏权限--ACL--sudo---默认权限;
权限虽然是文件的属性,但其实是对于用户来说的,即用户对文件是否有某权限;
文件类型用不同字符区分,常见如下:
-:普通文件,最多
d:目录文件,可用cd进入
l:链接文件,快捷方式
b:块设备文件,一般指硬盘
c:字符设备文件,串行接口设备
p:管道文件,FIFO
s:套接字文件,网络数据连接
说明:linux中文件扩展名没有实际意义,只是为了帮助我们了解文件作用
一、一般权限
Linux系统中每个文件都有其所有者和所属组,
并规定了文件所有者,所属组,其他人对其的可读r,可写w,可执行x等权限,
对目录来说,可读即能读取到目录内文件列表,可写即能在目录能增删重命名文件,
可执行即能够cd进入该目录,能进入才能读取,一般目录都会给x;
文件rwx权限可分别用数字421来表示,
数字表示法可简化权限表示,如rwxrw-r--可表示为764,三者独立;
文件属性信息包括:
文件类型-访问权限-所有者-所属组-文件大小-最近修改日期时间-文件名;
对于自己家目录里的文件,即使不是所有者,没有w权限,也能修改删除,会自动变成所有者;
二、特殊权限
在复杂多变的Linux系统中,单纯的rwx权限无法满足实际需求,
所以就有了特殊权限位,进一步控制文件权限,主要有三种;
SUID-一种对二进制程序文件进行设置的特殊权限,
可以让二进制程序执行者临时拥有所有者的权限,
只能对有执行权限的二进制程序设置,只在执行时有效,
文件所有者的可执行x会变成s,若原本不可执行-,则变成S,
典型如passwd命令修改/etc/shadow文件;
SGID-让执行者临时拥有所属组的权限,只能对拥有执行权限的二进制程序设置,
只在执行时有效,文件所属组的可执行x会变成s,若原本不可执行-,则变成S,
在某个目录中创建的文件自动继承该目录的用户组,只能对目录进行设置,
可用于目录共享,且目录中创建的文件也共享;
SBIT-确保用户只能删除目录内自己的文件,只能对目录进行设置,
文件其他人的可执行x会变成t,若原本不可执行-,则变成T;
说明:以上三种特殊权限可分别用参数u+s,g+s,o+t来设置,
也可用数字法421分别表示,放在一般权限数字前面,
如rwsrw-r--可表示为4764,四者独立;
修改文件属性或权限的最常用命令:
chown-修改文件或目录的所有者和所属组
chgrp-修改文件或目录的所属组
chmod-设置文件或目录的权限
说明:只有文件所有者和root才能执行上述命令,
一般权限参数可用ugoa +-= rwx来设置;
三、隐藏权限
一种被隐藏起来默认不能直接被用户察觉的权限;
chattr-设置文件的隐藏权限
lsattr-显示文件的隐藏权限
说明:chattr命令只有root可以使用,
可通过+-参数来添加或删除文件的隐藏权限,
可能导致root都不能修改删除某个文件,
不宜对目录 /、/dev/、/tmp/、/var/ 等进行设置;
四、文件访问控制列表(ACL)
前三种权限是针对某一类用户设置的,ACL可以对某个指定的用户进行单独的权限控制,
即 针对指定的用户或用户组设置文件或目录的操作权限;
setfacl-设置文件的ACL权限
getfacl-显示文件的ACL权限
说明:可设置是否对目录递归或继承,
可设置有效权限mask,即设置的ACL只在有效范围内才生效,一般为rwx即可,
若设置没有任何权限,则在参数中权限字段加上一个减号-;
五、su命令和sudo服务
可以给普通用户提供额外的权限来完成只有root才能完成的任务;
su-用户身份切换,减号-代表环境也完全切换
sudo-把特定命令的执行权限赋给指定用户,需配置/etc/sudoers文件
visudo-配置/etc/sudoers文件,禁止多个用户同时修改且有语法检查,仅限root
说明:若只想要执行一次root的命令,可用 su - -c "命令串" 的方式,
配置文件修改格式为:用户名/用户组 允许的主机=(可切换身份) 可执行命令,
可通过别名变量来批量修改,要使用大写字符,
可执行的命令字段要填写绝对路径,且可另加限制参数,
使用sudo服务时,可以设置无需输入密码;
六、默认权限
在Linux系统中,文件默认权限是666,目录默认权限是777,
但新建文件或目录的实际权限值需要再减去权限掩码值;
umask-设定当前用户创建文件或目录的权限掩码值
注意 这里指的是默认权限值需要减去的权限值
有四组数字,对应特殊权限和一般权限,如0022;