课程名称:Linux权限管理之特殊权限
章节名称:第1章 ACL权限
讲师名称:Tony
课程内容
- ACL访问控制权限
- 系统权限管理
课程收获
ACL访问控制权限
权限前的字符,表示文件的具体类型,比如 d 表示目录,- 表示普通文件,l 表示连接文件,b 表示设备文件,等等。
某些情况下,无法实现对某个单独的用户设定访问权限,就需要使用 ACL 访问控制权限。
ACL,是 Access Control List(访问控制列表)的缩写,在 Linux 系统中, ACL 可实现对单一用户设定访问文件的权限。也可以这么说,设定文件的访问权限,除了用传统方式(3 种身份搭配 3 种权限),还可以使用 ACL 进行设定。
开启 ACL 权限
使用 mount 命令可以查看到系统中已经挂载的分区,而使用 dumpe2fs 命令可以查看到这个分区文件系统的详细信息。
如果 Linux 系统如果没有默认挂载,可以执行如下命令实现手动挂载:
mount -o remount,acl /
使用 mount 命令重新挂载,并加入 ACL 权限。但使用此命令只是临时生效,要想永久生效,需要修改 /etc/fstab 文件,修改方法如下:
[root@localhost ~]#vi /etc/fstab
UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 /ext4 defaults,acl 1 1
#加入ACL权限
[root@localhost ~]# mount -o remount /
#重新挂载文件系统或重启系统,使修改生效
在你需要开启 ACL 权限的分区行上(也就是说 ACL 权限针对的是分区),手工在 defaults 后面加入 “,acl” 即可永久在此分区中开启 ACL 权限。
ACL权限设置
getfacl 命令用于查看文件或目录当前设定的 ACL 权限信息。该命令的基本格式为:
getfacl 文件名
etfacl 命令可直接设定用户或群组对指定文件的访问权限。此命令的基本格式为:
setfacl 选项 文件名
setfacl -m:给用户或群组添加 ACL 权限
#给用户st赋予r-x权限,使用"u:用户名:权限" 格式
setfacl -m u:st:rx /project
#为组tgroup2纷配ACL权限
setfacl -m g:tgroup2:rwx project
setfacl -d:设定默认 ACL 权限:
setfacl -m d:u:st:rx project
默认 ACL 权限的作用是,如果给父目录设定了默认 ACL 权限,那么父目录中所有新建的子文件都会继承父目录的 ACL 权限。需要注意的是,默认 ACL 权限只对目录生效。
对目录设定的默认 ACL 权限,可直接使用 setfacl -k 命令删除:
setfacl -k project
setfacl -R:设定递归 ACL 权限:
setfacl -m u:st:rx -R project
递归 ACL 权限指的是父目录在设定 ACL 权限时,所有的子文件和子目录也会拥有相同的 ACL 权限。
注意,默认 ACL 权限指的是针对父目录中后续建立的文件和目录会继承父目录的 ACL 权限;递归 ACL 权限指的是针对父目录中已经存在的所有子文件和子目录会继承父目录的 ACL 权限。
setfacl -x:删除指定的 ACL 权限
setfacl -x u:st project
setfacl -b:删除指定文件的所有 ACL 权限
setfacl -b project
系统权限管理
使用 su 命令可以让普通用户切换到 root 身份去执行某些特权命令,但存在一些问题,比如说:
- 仅仅为了一个特权操作就直接赋予普通用户控制系统的完整权限;
- 当多人使用同一台主机时,如果大家都要使用 su 命令切换到 root 身份,那势必就需要 root 的密码,这就导致很多人都知道 root 的密码;
相对于使用 su 命令还需要新切换用户的密码,sudo 命令的运行只需要知道自己的密码即可,甚至于,我们可以通过手动修改 sudo 的配置文件,使其无需任何密码即可运行。
sudo 命令默认只有 root 用户可以运行,该命令的基本格式为:
sudo [-b] [-u 新使用者账号] 要执行的命令
sudo命令的运行,需经历如下几步:
-
当用户运行 sudo 命令时,系统会先通过 /etc/sudoers 文件,验证该用户是否有运行 sudo 的权限;
-
确定用户具有使用 sudo 命令的权限后,还要让用户输入自己的密码进行确认。出于对系统安全性的考虑,如果用户在默认时间内(默认是 5 分钟)不使用 sudo 命令,此后使用时需要再次输入密码;
-
密码输入成功后,才会执行 sudo 命令后接的命令。
显然,能否使用 sudo 命令,取决于对 /etc/sudoers 文件的配置(默认情况下,此文件中只配置有 root 用户)。
sudo命令的配置文件/etc/sudoers
修改 /etc/sudoers,不建议直接使用 vim,而是使用 visudo。因为修改 /etc/sudoers 文件需遵循一定的语法规则,使用 visudo 的好处就在于,当修改完毕 /etc/sudoers 文件,离开修改页面时,系统会自行检验 /etc/sudoers 文件的语法。
root ALL=(ALL) ALL
#用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
#%wheel ALL=(ALL) ALL
#%组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
模块 | 含义 |
---|---|
用户名或群组名 | 表示系统中的那个用户或群组,可以使用 sudo 这个命令。 |
被管理主机的地址 | 用户可以管理指定 IP 地址的服务器。这里如果写 ALL,则代表用户可以管理任何主机;如果写固定 IP,则代表用户可以管理指定的服务器。如果我们在这里写本机的 IP 地址,不代表只允许本机的用户使用指定命令,而是代表指定的用户可以从任何 IP 地址来管理当前服务器。 |
可使用的身份 | 就是把来源用户切换成什么身份使用,(ALL)代表可以切换成任意身份。这个字段可以省略。 |
授权命令 | 表示 root 把什么命令命令授权给用户,换句话说,可以用切换的身份执行什么命令。需要注意的是,此命令必须使用绝对路径写。默认值是 ALL,表示可以执行任何命令。 |