zl程序教程

您现在的位置是:首页 >  系统

当前栏目

Linux文件类型与文件权限详解(三)

Linux文件权限 详解 文件类型
2023-09-14 09:01:46 时间

今天继续给大家介绍Linux的基础知识,本文主要内容是Linux隐藏权限、文件访问控制列表和Linux sudo提权等。

一、Linux隐藏权限

除了之前介绍的Linux普通权限和Linux特殊权限外,Linux文件还有一种隐藏权限,所谓隐藏权限,即这些权限隐藏起来,一般不易被用户所发现,这些隐藏权限有时会限制表面上允许的操作,因此,当我们在Linux系统中尝试进行某种操作时,如果发现权限符合要求但是操作执行被拒绝,可以考虑尝试排查隐藏权限。
Linux系统的隐藏权限有很多,在这里我仅介绍几个经常用到的,如果遇上其他隐藏权限,届时可以查阅相关资料。
chattr命令可以给文件授予Linux隐藏权限,chattr的参数表明了授予的隐藏权限,chattr常用隐藏权限如下:
i 如果是文件,则无法对文件进行修改;如果是目录,则不能在该目录下创建、重命名、删除文件,但是可以在该目录的子目录下创建、重命名和删除文件。
a 仅允许追加内容,而不允许覆盖和删除原有的内容,日志文件常用。
A 不再修改这个文件或目录的最后访问时间
chattr命令示例如下:

chattr +a target
chattr -a target

上面第一条命令表示给target文件授予追加的隐藏权限,第二条命令表示删除给target文件已经授予的追加的隐藏权限。
使用lasttr命令可以查看文件的隐藏权限,如下:
在这里插入图片描述

二、Linux文件访问控制列表

Linux采用文件属主、属组和其他用户的粒度来控制访问权限,可以基本上满足权限控制需求,但是有时我们需要针对某一特定用户进行特别控制时,就无能为力了。针对这种特殊情况,Linux提供了文件访问控制列表的方式来实现这种控制。
Linux文件访问控制列表的设置使用setfacl命令,重要参数列举如下:
-R 表示递归,如果setfacl命令的作用对象是目录,则需要使用本参数。
-m 表示文件,如果setfacl命令的作用对象是文件,则需要使用本参数。
-b 表示删除,当要删除文件上设置的访问控制列表时使用。
setfacl命令使用示例:

setfacl -m u:user:rw /a/123
setfacl -b /a/123

上述第一条命令表示给user用户授予对/a/123文件的读写权利,第二条命令表示删除/a/123文件上的访问控制列表。
setfacl命令既可以给没有权限的用户进行授权,也可以把原本有权限的用户的权限给剥夺,文件访问控制列表使用如下所示:
剥夺用户的权限:
在这里插入图片描述
给没有权限的用户授权:
在这里插入图片描述
在进行ll查看文件信息时,如果发现文件的权限后面出现了加号,则表示该文件设置了访问控制列表。这一点在上图中我们可以轻易看出。
如果想要查看文件的具体设置的访问控制列表,可以使用getfacl命令,该命令使用如下:
在这里插入图片描述
在文件访问控制列表的实际使用中,我们一定要注意,必须先chmod设置好文件的权限,然后再设置访问控制列表,否则文件的权限设置会出现问题。

三、Linux提权

在Linux系统中,经常会出现一些场景,使得一些普通用户必须执行一些只有root用户才能够执行的命令,如何使得普通用户可以执行root用户的权限(给普通用户root口令可不是一个好办法)却又可以很好的管理这些权限呢?在这里我们就要使用sudo提权命令了。
sudo命令可以把特定命令的执行权限赋予给指定用户,这样既可以保证普通用户能够完成工作,也可以避免泄露root管理员密码。对于root系统管理员而言,要做的就是合理的配置sudo服务,以便兼顾系统的安全性和用户使用的便捷性。
对于root用户而言,执行命令visudo可以配置sudo权限,其实visudo命令在本质上就是使用vi命令打开/etc/sudoers文件,该文件就是sudo的配置文件。
想要配置sudo权限,打开配置文件,大概在99行左右,可以看到如下内容:
在这里插入图片描述
第100行是系统默认的配置,如果我们想要给某个普通用户授予sudo的权限,配置如下:

pzz    ALL=(root)      ALL

上述配置中,第一个“pzz”是被授予sudo权限的用户名,后面的ALL表示该用户登录的地点,ALL表示在任意登录,等号后面的root表示pzz可以以某个用户的身份执行命令,在这里root和ALL含义是相同的,最后面的ALL表示可以执行的命令。
因此,上述配置含义就是:允许在任意地方登陆的用户pzz,在执行任何命令时,sudo提权成root用户的权限。
下面我们再来看一个例子:

pzz2      ALL=(ALL)   /usr/bin/ls,/usr/bin/cd

按照上述分析,容易得到上述配置的含义是:允许在任意地方登陆的用户pzz2,在执行ls命令和cd命令时,sudo提权成root用户的权限。
假设修改后,我们的配置文件如下所示(修改部分是红圈里的部分):
在这里插入图片描述
然后切换到pzz用户查看提权效果
在这里插入图片描述
这样,普通用户通过sudo就可以执行超出自己执行权限的命令了
在用户使用sudo提权时,通常需要输入用户密码,如果我们不想频繁输入用户密码,可以将上述配置文件这样修改:

pzz    ALL=NOPASSWD:      ALL

这样,用户就不需要在提权时频繁的输入密码了。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200/article/details/120595762