# 为普通用户分配特权 使用sudo命令可以允许普通用户执行管理员账户才能执行的命令。 sudo命令允许已经在/etc/sudoers文件中指定的用户运行管理员账户命令。例如,一个已经获得许可的普通用户可以运行如下命令: ``` sudo /usr/sbin/useradd newuserl ``` 实际上,sudo的配置完全可以指定某个已经列入/etc/sudoers文件的普通用户可以做什么,不可以做什么。 /etc/sudoers的配置行如下所示。 - 空行或注释行(以\#字符打头):无具体功能的行。 - 可选的主机别名行:用来创建主机列表的简称。必须以Host\_Alias关键词开头,列表中的主机必须用逗号隔开,如: ``` Host_Alias linux=ted1,ted2 ``` 其中ted1和ted2是两个主机名,可使用linux(别名)称呼它们。 - 可选的用户别名行:用来创建用户列表的简称。用户别名行必须以User\_Alias关键词开头,列表中的用户名必须以逗号隔开。其格式同主机别名行。 - 可选的命令别名行:用来创建命令列表的简称。必须以Cmnd\_Alias开头,列表中的命令必须用逗号隔开。 - 可选的运行方式别名行:用来创建用户列表的简称。不同的是,使用这样的别名可以告诉sudo程序以列表中某一用户的身份来运行程序。 - 必要的用户访问说明行。 用户访问的说明语法如下: ``` user host = [ run as user ] command list ``` 在user处指定一个真正的用户名或定义过的别名,host也可以是一个真正的主机名或者定义过的主机别名。默认情况下,sudo执行的所有命令都是以root身份执行。如果您想使用其他身份可以指定。command list可以是以逗号分隔的命令列表,也可以是一个已经定义过的别名,如: ``` ted1 ted2=/sbin/shutdown ``` 这一句说明ted1可以在ted2主机上运行关机命令。 ``` newuser1 ted1=(root) /usr/sbin/useradd,/usr/sbin/userdel ``` 这一句说明ted1主机上的newuser1具有以root用户权限执行useradd,userdel命令的功能。 >![](public_sys-resources/icon-note.gif) **说明:** >- 可以在一行定义多个别名,中间用冒号 \(:\) 隔开。 >- 可在命令或命令别名之前加上感叹号 \(!\),使该命令或命令别名无效。 >- 有两个关键词:ALL和NOPASSWD。ALL意味着“所有”(所有文件、所有主机或所有命令),NOPASSWD意味着不用密码。 >- 通过修改用户访问,将普通用户的访问权限修改为同root一样,则可以给普通用户分配特权。 下面是一个sudoers文件的例子: ``` #sudoers files #User alias specification User_Alias ADMIN=ted1:POWERUSER=globus,ted2 #user privilege specification ADMIN ALL=ALL POWERUSER ALL=ALL,!/bin/su ``` 其中: - User\_Alias ADMIN=ted1:POWERUSER=globus,ted2 定义了两个别名ADMIN和POWERUSER - ADMIN ALL=ALL 说明在所有主机上,ADMIN用户都可以以root身份执行所有命令 - POWERUSER ALL=ALL,!/bin/su 给POWERUSER用户除了运行su命令外等同ADMIN的权限