大家都知道,在linux系统中,用户有普通用户和管理员用户之分。普通用户的权限有限,而管理员可以说是无所不能。
大家思考一个问题:管理员现在需要添加或删除多个用户,老板这时又想让身为管理员的你提高工作效率,这时你该怎么办呢?你可能会说,尽量不吃饭也要把工作快点做好。但一个人的力量毕竟有限,此时,你又想找人帮忙。可问题是别人要帮你忙,他(普通用户)也没权限啊,你肯定不会把管理员权限给他吧。再或者你把管理员密码告诉他?呵呵,作为一个正常的管理员,是不会把密码告诉老板之外的第二个人的。于是你百思不得其解。这时,你忽然灵光一现,能不能让他在不知道管理员密码的前提下,执行管理员才能执行的命令呢?答案是肯定的,因为你想到了sudo命令。
sudo的配置文件在/etc/sudoers下,一般情况下,只要更改配置文件就能得到你想要的结果。但sudoers文件的权限是:440(r--r-----),只能读,不能写啊。不用怕,有一个命令专门为了解决这个问题的。她就是:
#visudo (专门用于更改sudo的配置文件/etc/sudoers的,在文件的最后加上)
文件的格式如下:
who which_host=(whom) command_list
例:jerry ALL=(root) /usr/sbin/useradd,/user/sbin/userdel
#su - jerry
$sudo /usr/sbin/useradd www
这时需要输入jerry的密码,输入完密码,回车。
就可以执行这个命令了。
备注:命令一定要使用绝对路径。
如果定义多个用户呢?这时就要使用别名了。
Host_Alias 主机别名
Cmnd_Alias 命令别名
User_Alias 用户别名
例:
Cmnd_Alias USERCMD=/usr/sbin/useradd,/user/sbin/userdel,/usr/bin/passwd
User_Alias USERS=ubuntu,redhat,centos
USERS ALL=(root) USERCMD
#su - redhat
$sudo /usr/bin/passwd centos
发现可以更改centos的密码了。
此时还可以更改root的密码,那为了安全起见,是不会允许更改root密码的。具体看后面。
备注:定义别名时,别名一定要全部使用大写字母。
大家可能会发现,执行第一条命令式需要输入密码,再一次执行时就不需要密码。那如果为了安全起见,每次都输密码呢。
使用sudo -k
$sudo -k
$sudo /usr/sbin/useradd www
这样每一次执行都需要密码了。
但如果我执行的时候既不想输入密码,又不能更改root的密码,该怎么办呢?
就需要这样定义:
例:
Cmnd_Alias USERCMD=NOPASSWD:/usr/sbin/useradd,/user/sbin/userdel,/usr/bin/passwd,!/usr/bin/passwd root(这是一行)
jerry ALL=(root) USERCMD
这样你再切换到jerry用户,执行命令时,就不需要输入jerry的密码,也不能更改root的密码了。
转载于:https://blog.51cto.com/lihuan/799890