Linux 特殊权限和 ACL 权限管理
Linux 上有三种特殊权限,分别是 set uid,set gid,sticky。对应权限的数值分别为4,2,1。对应权限的字母分别为 s,s,t。对应的操作分别为 chmod u+s file,chmod g+s dir,chmod o+t dir,对应的操作也支持将字母替换为数字
set uid:一般作用于二进制文件,二进制文件在设置了该权限后,用户在执行该文件时会临时获得文件属主的权限
以 netstat 命令的 “-p” 参数为例,netstat 命令在设置了 set uid 权限后 sysop 用户也可以使用 “-p” 参数
set gid:作用于目录文件,如果一个目录被设置了 set gid 的权限,那么任何用户在这个目录下创建的文件,都会属于该目录的所属组
sticky:作用于目录文件,sticky 特殊权限设置的目的是为了降低目录的权限。如果一个普通用户对一个目录具备了 rwx 权限,那么任何用户在该目录下的文件,都可以被该用户删除,包括 root 的文件(/tmp 目录的默认权限就包含 sticky)
ACL(Access Control List,访问控制列表)在 Linux 系统内用来控制文件权限,提升系统安全和可靠性
ACL 权限可通过 setfacl 和 getfacl 命令设置和查看(红帽系列基本都自带这两个命令,Debian 系列安装 acl 软件包即可)
sudo 权限委派
由于 Linux 系统大部分都是使用 normal user 进行 ssh 远程 login,所以熟练的使用 sudo 以及配置一个用户的提权就非常重要。
主配置文件:/etc/sudoers
子配置文件:/etc/sudoers.d/*
# 大部分情况我们都不会修改主配置文件,会在 /etc/sudoers.d/ 目录下创建一个以“需要提权的用户”命名的文件,如下所示
# “NOPASSWD” 表示普通用户在执行 root 用户命令操作时不需要输入 sudo 密码
root@debian:~# cat /etc/sudoers.d/sysop
sysop ALL=(ALL) NOPASSWD: ALL
# 也可以将用户加入用户组,然后对整个用户组提权,具体操作参考 /etc/sudoers
Debian 或 Ubuntu 系统在创建普通用户时,默认不创建普通用户的家目录(即使使用“-d”参数指定也不行)并且创建普通用户默认的 shell 是 sh
可通过两种办法解决,一种是通过命令参数,一种是修改配置文件