28.linux文件权限讨论
一:普通权限
1.umask查看缺省权限,一般默认为0022

根据缺省权限来配置件的权限,777-022=755。
1.1所以,创建目录的默认权限是755,rwxr_xr_x;
ls -ld aaa //查看当前目录aaa的信息
ls -i //查看节点号iNode

1.2创建文件的默认权限是644,rw_r__r__;(为安全考虑,默认文件不具有可执行权限)

1.3如何来理解这几种读写权限呢?r意味着对文件具有读权限,w意味着对文件具有写权限,x意味着对文件具有执行权限。所以对文件和目录分别来说,具体可执行的命令如下:
对文件来说,
r: cat /more /head /tail /less
w: vim
x: script command
对目录来说,
r: ls
w: touch /mkdir /rmdir /rm
x: cd
2.关于权限几个小问题
问:某用户建立的文件,另一个用户可不可以对其进行删除呢?
答:可以的,删除一个文件的前提是,对这个文件所在的目录具有写权限,如果一个目录的权限是777,那么任何用户都对当前目录下的文件进行删除操作。
问:某用户创建一个文件后,想将其所有者改为root,可不可以?
答:不可以,只有root可以改变文件的所有者,文件的创建者都不可以。
如下例,dazhutizi建立的abcd文件,只有root才可以将所有者改为root

切换到root下,将刚刚普通用户创建的文件abcd的所有者改为root。

删除一个非空目录时,虽然被终止了删除操作,但是终止之前的操作已经完成了,所以如下图我们可以看到文件a3和目录a4已经被删除了。

二:特殊权限:ACL权限
用处:身份不够用时(身份包括,所有者所属组合其他人三种),需用ACL权限
1.查看acl权限是否开启

2.可以看到本系统是默认开启的,如果没有开启,有两种方式来开启ACL权限
2.1.mount -o remount,acl //用mount命令将根分区重新挂载,挂载的时候开启ACL权限,这种方法是临时生效的

2.2.vi /etc/fstab //在根分区的挂载行,defaults后面加,acl
mount -o remount //重新挂载文件系统或重启,使修改生效。

3.设置acl权限
实验:
3.1新建两个普通用户,一个组,然后将这两个用户加入到新组里


3.2创建本次测试的目录,观察其初始权限为755,将其权限改为770,此时作为当前目录的所有者root对目录具有7的权限,所属组root有7的权限,其他人没有任何权限

3.3修改/tmp/project的所有者和所属组,使得刚刚新建的用户user1和user2(在组aclgroup里)能够拥有7的权限,此时其他人仍没有权限

3.4新建一个其他人用户,因为他对这个/tmp/project目录没有任何权限。但其需要对目录进行读和执行的访问,所以为他设定acl权限。

3.5查看/tmp/project目录的权限,可以看到所有者root具有7,普通用户dazhutizi有5,所属组aclgroup有7的权限,其他人没有权限。

4.删除acl权限
setfacl -b +目录 //删除当前目录的所有acl权限
setfacl -x +目录 //删除当前目录的指定用户acl权限
setfacl -g +目录 //删除当前目录的指定组acl权限
5.递归与默认ACL权限
setfacl -m u:user:rx -R /tmp/project //递归,对子文件和子目录也生效
setfacl -m d:u:user:rx /tmp/project //设置默认参数,目录内的子文件继承父文件的acl权限
6.mask:最大有效权限,一般设为rwx
上图中出现了mask权限,mask为最大有效权限,它限制其他用户的权限

acl与所属组对当前文件设定的权限,与mask相与之后,才是真正的权限。
三:特殊权限:SetUID,SetGID...
SetUID设置chmod 4755 xx,4表示SetUID
只针对可执行文件,
执行者需要有x的权限
比如passwd命令,passwd命令修改密码时,会修改/etc/shadow文件,可以看到shadow文件的权限是000,只有root能对其进行读写执行操作,

但是有passwd权限下suid,所以passwd命令在普通用户下执行时,普通用户相当于暂时变成超级用户,故能修改/etc/shadow文件。

但cat命令是不具有suid的,所以它在普通用户下都不能查看/etc/shadow。


给它加一个suid,那么普通用户在使用cat命令时会变身超级用户,此时可以查看/etc/shadow文件了。

结束后删除suid权限

定期查看系统中有哪些SUID和SGID文件:
find / -type f \( -perm -4000 -o -perm -2000 \) -ls

四、特殊权限:文件系统属性权限Chattr,用+-=来设置
-i ——文件,只能查看文件,不能删除修改重命名

——目录,不能在目录下建立和删除文件,但可以修改目录中的文件

-a ——文件,可以用echo追加文件内容,不能删除和修改文件内容
——目录,可以在目录中建立和修改文件,不允许删除
查看文件的chattr权限,用lsattr命令

五、特殊权限:sudo+操作命令
visudo //通过配置/etc/sudoers文件,来实现sudo命令
sudo+操作命令
特殊用法:可以授权普通用户有重启服务器的权限,visudo命令在文件内写入
user1 ALL=/sbin/shutdown -r now


