一、文件的隐藏属性
隐藏权限,即被隐藏起来的权限,默认情况下不能直接被用户发觉。
1、chattr命令
chattr命令用于设置文件的隐藏权限,格式为“chattr [参数] 文件”。
如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加“+参数”,如果想要把某个隐藏功能移出文件,则需要追加“-参数”。
参数 | 作用 |
i | 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件 |
a | 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only) |
S | 文件内容在变更后立即同步到硬盘(sync) |
s | 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域) |
A | 不再修改这个文件或目录的最后访问时间(atime) |
b | 不再修改文件或目录的存取时间 |
D | 检查压缩文件中的错误 |
d | 使用dump命令备份时忽略本文件/目录 |
c | 默认将文件或目录进行压缩 |
u | 当删除该文件后依然保留其在硬盘中的数据,方便日后恢复 |
t | 让文件系统支持尾部合并(tail-merging) |
X | 可以直接访问压缩文件中的内容 |
示例:
创建一个abc.txt文件后删除,此时可以删除成功,再次创建abc.txt文件并为其设置不允许删除与覆盖权限后再次删除提示操作失败。
2、lsattr命令
lsattr命令用于显示文件的隐藏权限,格式为“lsattr [参数] 文件”。
文件的隐藏权限必须使用lsattr命令来查看。
使用lsattr查看文件隐藏权限
二、文件访问控制列表
一般权限、特殊权限、隐藏权限其实有一个共性—权限是针对某一类用户设置的。如果希望对某个指定的用户进行单独的权限控制,就需要用到文件的访问控制列表(ACL)。
基于普通文件或目录设置ACL其实就是针对指定的用户或用户组设置文件或目录的操作权限。
如果针对某个目录设置了ACL,则目录中的文件会继承其ACL;若针对文件设置了ACL,则文件不再继承其所在目录的ACL。
示例:
切换普通用户登录后尝试进入root家目录中,在没有针对普通用户对root家目录设置ACL之前提示如下:
1、setfacl命令
setfacl命令用于管理文件的ACL规则,格式为“setfacl [参数] 文件名称”。
文件的ACL提供的是在所有者、所属组、其他人的读/写/执行权限之外的特殊权限控制,使用setfacl命令可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制。其中,针对目录文件需要使用-R递归参数;针对普通文件则使用-m参数;如果想要删除某个文件的ACL,则可以使用-b参数。
示例:设置hello用户在root目录上的权限:
可以看出文件的权限最后一个点变成了加号,这意味着文件已经设置了ACL。
2、getfacl命令
getfacl命令用于显示文件上设置的ACL信息,格式为“getfacl 文件名称”。
示例:使用getfacl命令显示在root管理员家目录上设置的所有ACL信息
三、su命令与sudo命令
su命令可以解决切换用户身份的需求,使得当前用户在不退出登录的情况下,顺畅地切换到其他用户,比如从root管理员切换至普通用户;
另外,当从root管理员切换到普通用户时是不需要密码验证的,而从普通用户切换成root管理员就需要进行密码验证;
使用sudo命令把特定命令的执行权限赋予给指定用户。
sudo命令用于给普通用户提供额外的权限来完成原本root管理员才能完成的任务。
格式为“sudo [参数] 命令名称”。
sudo服务中的可用参数以及作用:
参数 | 作用 |
-h | 列出帮助信息 |
-l | 列出当前用户可执行的命令 |
-u用户名或UID值 | 以指定的用户身份执行命令 |
-k | 清空密码的有效时间,下次执行sudo时需要再次进行密码验证 |
-b | 在后台执行指定的命令 |
-p | 更改询问密码的提示语 |
sudo命令具有如下功能:
限制用户执行指定的命令;
记录用户执行的每一条命令;
配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数;
验证密码的后5分钟内(默认值)无须再让用户再次验证密码;
如果担心直接修改配置文件会出现问题,则可以使用sudo命令提供的visudo命令来配置用户权限。这条命令在配置用户权限时将禁止多个用户同时修改sudoers配置文件,
还可以对配置文件内的参数进行语法检查,并在发现参数错误时进行报错。
只有root管理员才可以使用visudo命令编辑sudo服务的配置文件。
在sudo命令的配置文件中,按照下面的格式填写上相应的信息
切换至指定的普通用户身份,此时就可以用sudo -l命令查看到所有可执行的命令
作为一名普通用户是肯定不能看到root管理员的家目录(/root)中的文件信息的,但是,只需要在想执行的命令前面加上sudo命令就可以了
如果需要让某个用户只能使用root管理员的身份执行指定的命令,切记一定要给出该命令的绝对路径,否则系统会识别不出来。
使用whereis命令找出命令所对应的保存路径
用户权限参数修改成对应的路径
保存退出,再次切换到指定的普通用户,然后尝试正常查看某个文件的内容,此时系统提示没有权限。这时再使用sudo命令就可以顺利地查看文件内容
添加NOPASSWD参数,使得用户执行sudo命令时不再需要密码验证,当切换到普通用户后再执行命令时,就不用再频繁地验证密码
閱讀更多 JavaCodingfarmer 的文章