就这么学Linux 用户身份与文件权限-下

文件的隐藏属性

Linux 系统中的文件除了具备一般权限和特殊权限之外,还有一种隐藏权限,即被隐藏起来的权限,默认情况下不能直接被用户发觉。有用户曾经在生产环境和 RHCE 考试题目中碰到过明明权限充足但却无法删除某个文件的情况,或者仅能在日志文件中追加内容而不能修改或删除内容的情况,这在一定程度上阻止了黑客篡改系统日志的图谋,因此这种“奇怪”的文件权限也保障了 Linux 系统的安全性。

既然叫隐藏权限,那么使用常规的 ls 命令肯定不能看到它的真面目。隐藏权限的专用设置命令是 chattr,专用查看命令是 lsattr。

chattr

chattr 命令用于设置文件的隐藏权限,英文全称为 change attributes,语法格式为“chattr [参数] 文件名称”。

如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加“+参数”,如果想要把某个隐藏功能移出文件,则需要追加“-参数”。chattr 命令中可供选择的隐藏权限参数非常丰富,具体如表所示。
在这里插入图片描述
为了让读者能够更好地见识隐藏权限的效果,我们先来创建一个普通文件,然后立即尝试删除(这个操作肯定会成功):

echo "for test" > linuxprobe
rm linuxprobe

接下来再次新建一个普通文件,并为其设置“不允许删除与覆盖”(+a 参数)权限,然后再尝试将这个文件删除:

echo "for test" > linuxprobe
chatter +a linuxprobe
rm linuxpeobe

可见,上述操作失败了。

lsattr

lsattr 命令用于查看文件的隐藏权限,英文全称为“list attributes”,语法格式为“lsattr [参数] 文件名称”。

在 Linux 系统中,文件的隐藏权限必须使用 lsattr 命令来查看,平时使用的 ls 之类的命令则看不出端倪:

ls -al linuxprobe
lsattr linuxprobe

此时按照显示的隐藏权限的类型(字母),使用 chattr 命令将其去掉:

chattr -a linuxprobe
lsattr linuxprobe
rm linuxprobe

文件访问控制列表

如果希望对某个指定的用户进行单独的权限控制,就需要用到文件的访问控制列表(ACL)了。

为了更直观地看到 ACL 对文件权限控制的强大效果,我们先切换到普通用户,然后尝试进入 root 管理员的家目录中。在没有针对普通用户为 root 管理员的家目录设置 ACL 之前,其执行结果如下所示:

su - linuxprobe
cd /root
exit

setfacl

setfacl 命令用于管理文件的 ACL 权限规则,英文全称为“set files ACL”,语法格式为“setfacl [参数] 文件名称”。

ACL 权限提供的是在所有者、所属组、其他人的读/写/执行权限之外的特殊权限控制。使用 setfacl 命令可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制。其中,针对目录文件需要使用-R 递归参数;针对普通文件则使用-m 参数;如果想要删除某个文件的 ACL,则可以使用-b 参数。setfacl 命令的常用参数如表所示。
在这里插入图片描述
例如,我们原本是无法进入/root 目录中的,现在为普通用户单独设置一下权限,随后再切换到这位普通用户的身份下,现在能正常进入了:

setfacl -Rm u:linuxprobe:rwx /root
su - linuxprobe
cd /root
ls
exit
ls -ld /root

getfacl

getfacl 命令用于查看文件的 ACL 权限规则,英文全称为“get files ACL”,语法格式为“getfacl [参数] 文件名称”。

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

getfacl /root

ACL 权限还可以针对某个用户组进行设置。例如,允许某个组的用户都可以读写/etc/fstab文件:

setfacl -m g:linuprobe:rw /etc/fstab
getfacl /etc/fstab

设置错了想删除?没问题!要清空所有 ACL 权限,请用-b 参数;要删除某一条指定的权限,就用-x 参数:

setfacl -x g:linuxprobe /etc/fstab
getfacl /etc/fstab

在备份/home 目录上的 ACL 权限时,可使用-R 递归参数,这样不仅能够把目录本身的权限进行备份,还能将里面的文件权限也自动备份。另外,再加上第 3 章学习过的输出重定向操作,可以轻松实现权限的备份。需要注意,getfacl 在备份目录权限时不能使用绝对路径的形式,因此我们需要先切换到最上层根目录,然后再进行操作。

cd/
getfacl -R home > backup.acl
ls -l 

ACL 权限的恢复也很简单,使用的是–restore 参数。由于在备份时已经指定是对/home目录进行操作,所以不需要写对应的目录名称,它能够自动找到要恢复的对象:

setfacl -- restore backup.acl

su命令与sudo服务

su 命令可以解决切换用户身份的需求,使得当前用户在不退出登录的情况下,顺畅地切换到其他用户,比如从 root 管理员切换至普通用户:

su - linuxprobe
id

细心的读者一定会发现,上面的 su 命令与用户名之间有一个减号(-),这意味着完全切换到新的用户,即把环境变量信息也变更为新用户的相应信息,而不是保留原始的信息。强烈建议在切换用户身份时添加这个减号(-)。

另外,当从 root 管理员切换到普通用户时是不需要密码验证的,而从普通用户切换成 root管理员就需要进行密码验证了;这也是一个必要的安全检查:

su - root
<输入管理员密码>

授权原则:在保证普通用户完成相应工作的前提下,尽可能少地赋予额外的权限。

在这里插入图片描述
visudo 命令用于编辑、配置用户 sudo 的权限文件,语法格式为“visudo [参数]”

在 Linux 系统中配置服务文件时,虽然没有硬性规定,但从经验来讲新增参数的位置不建议太靠上,以免我们新填写的参数在执行时失败,导致一些必要的服务功能没有成功加载。一般建议在配置文件中找一下相似的参数,然后在相邻位置进行新的修改,或者在文件的中下部位置进行添加后修改。

visudo

猜你喜欢

转载自blog.csdn.net/AdamCY888/article/details/131360630