有部分同事想利用Ubuntu服务器来编译其他开源工程,需要安装、配置一些软件。管理员没有精力一一处理他们的请求,希望在不告诉他们root用户密码的情况下授权某些特定的操作,那么使用sudo是比较好的选择。
sudo命令允许用户拥有临时的权限来运行一些他们作为普通用户无法运行的命令。Ubuntu在/ect/sudoers中为sudo提供了一个默认的配置,务必使用visudo工具 对其编辑,因为该工具会自动对配置语法进行严格检查,否则一旦出错可能会给系统带来严重后果。
默认的/etc/sudoers的配置如下:
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
由于同事只是需要安装、卸载软件的权限,那么在文件中增加一行
xxx ALL=(root) /usr/bin/apt-get
第一个参数代表适用对象:用户或组,在本例中是用户xxx。因为系统中的组和用户可以重名,要想指定该规则的适用对象是组而非用户的话,组对象的名称一定要用百分号%开头(例如%xxx)。
第二参数指定该规则的适用主机,但我没搞明白是什么意思,摘抄一段网络上的说明吧:”当我们在多个系统之间部署sudo环境时,这一栏格外有用,这里的ALL代表所有主机。但是,对于桌面系统或不想将sudo部署到多个系统的情况,这一栏就换成相应的主机名。“
第三个参数放在括号内,指出第一个参数规定的用户能够以何种身份来执行命令。本例中该值设为root,那么户xxx能够以root用户的身份来运行后面列出的命令。该值也可以设成通配符ALL,xxx便能作为系统中的任何用户来执行列出的命令了。
最后一个参数是使用逗号分开的命令表(本例中是/usr/bin/apt-get),这些命令能被第一个参数规定的用户以第三个参数指定的身份来运行。注意这里列出的命令一定要使用绝对路径,否则用户xxx可能编写一个同名的脚本来执行非管理员授权的命令。
了解了如何配置sudo的权限后,我们就很清楚了,在/etc/sudoers的默认配置中,admin组中的用户拥有root用户的特权。如果信任某个用户,允许他拥有root特权,那么把该用户加入到admin组中即可:
usermod -g admin xxx