when someone abandons you,it is him that gets loss because he lost someone who truly loves him but you just lost one who doesn’t love you.
接触过 shell 的人多少应该指定 su 和 sudo,当需要提权的时候,sudo 是我们常常使用的一个命令。此外,su 也应该是一个比较常听说的命令,虽然个人电脑其实还蛮少用 su 的
接触过 su 的人,应该也看到过 su - 这种写法,那这和 su 有什么区别呢?
使用 su 切换到 root,读取变量的方式是 non-login shell,这样的方式下非常多的变量都不会改变,尤其是 PATH,所以 root 用的非常多的命令都仅仅能用绝对路径来运行,这样的方式仅仅是切换到 root 的身份
使用 su -,是 login shell 方式,是先以 root 身份登录然后再运行别的操作
假设仅仅要切换到 root 做一次操作就好,那么可以在 su 后面加个 -c,运行完这次操作后,又会自己切换回原来的身份
sudo 的运行有这样一个流程
当用户运行 sudo 时,系统于 /etc/sudoers 文件里查找该用户是否有运行 sudo 的权限
若用户具有可运行 sudo 的权限,则让按配置确定是否需要验证当前账户的 password
再来看看 /etc/sudoers 这个配置文件
单个用户
假设要 username 这个用户能运行 root 的全部操作
1 | username ALL=(ALL) ALL |
用户组
假设要 usergroup 这个用户组能运行 root 的全部操作
1 | %usergroup ALL=(ALL) ALL |
限制用户权限
实际中常常不需要用户有那么大的权限,仅仅要让其具有负责范围的权限就能够了,比如管理 password 的人,就仅仅让其能进行 password 的管理,而没有别的权限,这就需要权限的控制了
假设需要当前用户来管理 password,即 username 这个用户能使用 passwd 这个命令来帮 root 改动用户 password
1 | username ALL=(root) /usr/bin/passwd |
假设仅仅是运行 sudo passwd 命令,改动的就是 root 的password,当然不希望普通用户能具有改动 root password 的权限,那么在 visudo 的时候就需要将命令的參数限制好,比如改成这样:
1 | username ALL=(root) !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root |
通过别名设置 visudo
查看 sudoers 这个文件的时候,会看见一些别名,User_Alias 表示具有 sudo 权限的用户列表,Host_Alias 表示主机的列表,Cmnd_Alias 表示同意运行命令的列表,Runas_Alias,表示用户以什么身份登录。别名需要大写字母开头
假设有几个 password 管理员,加上如下配置:
1 | User_Alias PWMNG = manager1, manager2, manager3 |
sudo 搭配 su
不难看出,sudo 仅仅是切换到别的用户然后运行命令,接着切回原来的账户,假设想要像 su 那样直接切换到 root,然后干自己想干的,这个时候就要将命令改成 /bin/su -,例如以下配置:
1 | username ALL=(root) /bin/su - |
当然这个是需要小心的,因为这样配置后,username 就直接切换到 root 了
sudo 输入密码的过期时间设置
当希望 sudo 输入过一次密码以后,后续一段时间内都可以不再验证,就需要如下配置了:
1 | Defaults env_reset, timestamp_timeout=20 # 20 分钟内不验证密码 |
be yourself, everyone else is already taken.