# 为普通用户分配特权<a name="ZH-CN_TOPIC_0182317327"></a>

使用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主机上运行关机命令。

    >![](public_sys-resources/icon-note.gif) **说明：**   
    >-   可以在一行定义多个别名，中间用冒号 \(:\) 隔开。  
    >-   可在命令或命令别名之前加上感叹号 \(!\)，使该命令或命令别名无效。  
    >-   有两个关键词：ALL和NOPASSWD。ALL意味着“所有”（所有文件、所有主机或所有命令），NOPASSWD意味着不用密码。  


下面是一个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的权限

