大家都知道,在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的密码了。