当设计的脚本需要调用某系统命令时,使用sudo
后会提示输入密码,在自己明确自己在干什么时,这很不方便,会极大的降低效率。为解决这一问题,本文给出提升普通用户权限的方法。
sudo 的权限控制
sudo
的权限控制位于配置文件/etc/sudoers
中,如果想要控制某个用户(或某个组用户)只能执行root
权限中的一部分命令,
或者允许某些用户使用sudo
时不需要输入密码.
配置文件设置格式
一般格式 root ALL=(ALL) ALL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| 授权用户/组 主机 =[(切换到哪些用户或组)] [是否需要输入密码验证] 命令1,命令2,... 字段1 字段2 =[(字段3)] [字段4] 字段5 注意:凡是[ ]中的内容, 都能省略; 命令和命令之间用,号分隔; 字段1: 不以%号开头的表示"将要授权的用户" root 以%号开头的表示"将要授权的组" %wheel 字段2:表示允许登录的主机 ALL表示所有; 如果该字段不为ALL,表示授权用户只能在某些机器上登录本服务器来执行sudo命令 eg:jack mycomputer=/usr/sbin/reboot,/usr/sbin/shutdown 表示: 普通用户jack在主机(或主机组)mycomputer上, 可以通过sudo执行reboot和shutdown两个命令 字段3: 如果省略, 相当于(root:root),表示可以通过sudo提权到root; 如果为(ALL)或者(ALL:ALL), 表示能够提权到(任意用户:任意用户组)。 注意:如果没省略,必须使用( )双括号包含起来 字段4: 可能取值是NOPASSWD:。请注意NOPASSWD后面带有冒号:。表示执行sudo时可以不需要输入密码 eg:lucy ALL=(ALL) NOPASSWD: /bin/useradd 表示: 普通用户lucy可以在任何主机上, 通过sudo执行/bin/useradd命令, 并且不需要输入密码 比如:hyc ALL=(ALL:ALL) NOPASSWD:ALL 字段5:授权给用户的操作 逗号分开一系列命令或者ALL表示允许所有操作
|
高阶用法
1 2 3 4 5 6 7 8 9 10 11 12
| 如果写成这样: papi ALL=(root) NOPASSWD: /bin/chown,/usr/sbin/useradd 表示: 用户papi能在所有可能出现的主机上, 提权到root下执行/bin/chown, 不必输入密码; 但运行/usr/sbin/useradd 命令时需要密码. 注意:因为NOPASSWD:只影响了其后的第一个命令: 命令1. 在具有sudo操作的用户下, 执行sudo -l可以查看到该用户被允许和被禁止运行的命令 通配符和取消命令 eg:papi ALL=/usr/sbin/*,/sbin/*,!/usr/sbin/fdisk 命令前面加上!号表示取消该命令 表示意思:用户papi在所有可能出现的主机上, 能够运行目录/usr/sbin和/sbin下所有的程序, 但fdisk除外.
|
系统文档推荐的做法是,修改/etc/sudoers.d
目录下的文件通过此方法修改sudoers
,需要在/etc/sudoers
文件的最后行,加上 1
| @includedir /etc/sudoers.d
|
注意: 这里的指令@includedir
是一个整体, 具体参考 sudoers.5
任何在/etc/sudoers.d/
目录下,不以~
号结尾的文件和不包含.
号的文件,都会被解析成/etc/sudoers
的内容。
比如我新创建的用户 hyc
想要实现root
权限,可在/etc/sudoers.d/
下新建一个文件01_hyc
文件,输入以下语句hyc ALL=(ALL:ALL) NOPASSWD:ALL
。
此时新建的用户就能获取root
权限。
参考文章