Bootstrap

Linux就该这么学--文件权限

文件权限与归属

尽管在Linux系统中一切都是文件,但是每个文件的类型不尽相同,因此Linux系统使用了不同的字符来加以区分,常见的字符如下所示。

 -:普通文件。

d:目录文件。

l:链接文件。

b:块设备文件。

c:字符设备文件。

p:管道文件。

 

文件的读、写、执行权限可以简写为rwx,亦可分别用数字4、2、1来表示,文件所有者,所属组及其他用户权限之间无关联,如表5-5所示。                                       

文件权限的字符与数字表示

第5章 用户身份与文件权限。第5章 用户身份与文件权限。

第5章 用户身份与文件权限。第5章 用户身份与文件权限。

数字和字母可以来回定义文件的权限值 

 

文件的特殊权限 

 

 SUID

SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效).临时有效,一次性的。

默认用户在查看/etc/shadow文件中。仔细查看这个文件就会发现它的默认权限是000,也就是说除了root管理员以外,所有用户都没有查看或编辑该文件的权限。

 SGID

SGID主要实现如下两种功能:

让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置);

在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)

 SGID的第一种功能是参考SUID而设计的,不同点在于执行程序的用户获取的不再是文件所有者的临时权限,而是获取到文件所属组的权限。举例来说,在早期的Linux系统中,/dev/kmem是一个字符设备文件,用于存储内核程序要访问的数据

[root@myserver tmp]# mkdir 2021_test
[root@myserver tmp]# ls -ald 2021_test/
drwxr-xr-x. 2 root root 6 Jan 16 22:22 2021_test/
[root@myserver tmp]# chmod -Rf 777 2021_test/
[root@myserver tmp]# ls -ald 2021_test/
drwxrwxrwx. 2 777 root 6 Jan 16 22:22 2021_test/
[root@myserver tmp]# chmod  -Rf g+s 2021_test/
[root@myserver tmp]# ls -ald 2021_test/
drwxrwsrwx. 2 777 root 6 Jan 16 22:22 2021_test/
[root@myserver tmp]# 

 SBIT

当目录被设置SBIT特殊权限位后,文件的其他人权限部分的x执行权限就会被替换成t或者T,原本有x执行权限则会写成t,原本没有x执行权限则会被写成T。

当然普通用户不能删,root用户是可以删的

文件的隐藏属性

chattr命令用于设置文件的隐藏权限,格式为“chattr [参数] 文件”。如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加“+参数”,如果想要把某个隐藏功能移出文件,则需要追加“-参数”

i	无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件
a	仅允许补充(追加)内容,无法覆盖/删除内容(Append Only)
S	文件内容在变更后立即同步到硬盘(sync)
s	彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域)
A	不再修改这个文件或目录的最后访问时间(atime)
b	不再修改文件或目录的存取时间
D	检查压缩文件中的错误
d	使用dump命令备份时忽略本文件/目录
c	默认将文件或目录进行压缩
u	当删除该文件后依然保留其在硬盘中的数据,方便日后恢复
t	让文件系统支持尾部合并(tail-merging)
x	可以直接访问压缩文件中的内容

lsattr命令

lsattr命令用于显示文件的隐藏权限,格式为“lsattr [参数] 文件”。在Linux系统中,文件的隐藏权限必须使用lsattr命令来查看,平时使用的ls之类的命令则看不出端倪:

[root@myserver tmp]# lsattr  chattr_test2021 
----ia-A---------- chattr_test2021
[root@myserver tmp]# 

文件访问控制列表

就需要用到文件的访问控制列表(FACL)了。通俗来讲,基于普通文件或目录设置ACL其实就是针对指定的用户或用户组设置文件或目录的操作权限。另外,如果针对某个目录设置了FACL,则目录中的文件会继承其FACL;若针对文件设置了FACL,则文件不再继承其所在目录的ACL。

setfacl命令

setfacl命令用于管理文件的ACL规则,格式为“setfacl [参数] 文件名称”。文件的ACL提供的是在所有者、所属组、其他人的读/写/执行权限之外的特殊权限控制,使用setfacl命令可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制。其中,针对目录文件需要使用-R递归参数;针对普通文件则使用-m参数;如果想要删除某个文件的ACL,则可以使用-b参数。下面来设置用户在/root目录上的权限

 getfacl命令

getfacl命令用于显示文件上设置的ACL信息,格式为“getfacl 文件名称”。Linux系统中的命令就是这么又可爱又好记。想要设置ACL,用的是setfacl命令;要想查看ACL,则用的是getfacl命令。下面使用getfacl命令显示在root管理员家目录上设置的所有ACL信息

su命令与sudo服务

su命令可以解决切换用户身份的需求,使得当前用户在不退出登录的情况下,顺畅地切换到其他用户,比如从root管理员切换至普通用户,上面的su命令与用户名之间有一个减号(-),这意味着完全切换到新的用户,即把环境变量信息也变更为新用户的相应信息,而不是保留原始的信息。

sudo命令用于给普通用户提供额外的权限来完成原本root管理员才能完成的任务,格式为“sudo [参数] 命令名称”

-h列出帮助信息
-l列出当前用户可执行的命令
-u 用户名或UID值以指定的用户身份执行命令
-k清空密码的有效时间,下次执行sudo时需要再次进行密码验证
-b在后台执行指定的命令
-p更改询问密码的提示语
sudo命令具有如下功能:

限制用户执行指定的命令:

记录用户执行的每一条命令;

配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数;

验证密码的后5分钟内(默认值)无须再让用户再次验证密码。

编辑visudo配置文件

 如果需要让某个用户只能使用root管理员的身份执行指定的命令,切记一定要给出该命令的绝对路径,否则系统会识别不出来。我们可以先使用whereis命令找出命令所对应的保存路径,然后把配置文件第99行的用户权限参数修改成对应的路径即可

;