一、sudo的基本简介

sudo:执行用户临时拥有制定用户的权限(如普通用户jiang可以获取root的useradd的操作权限)

visudo:设置赋予用户执行sudo的权限,visudo实际上编译的环境为/etc/sudoers

[root@localhost ~]# visudo  #执行编辑sudoers文件

定位到如下所示的内容以及各参数的意义

实践说明:用户jiang可以获取root的useradd的操作权限,那么如下所示

1、默认情况没有授权的情况下,普通用户jiang是否可以执行useradd,如增加用户test。

[jiang@localhost ~]$ useradd test

-bash: /usr/sbin/useradd: Permission denied 

2、很显然是不能执行的,其原因在于useradd只有root才有执行权限

[jiang@localhost ~]$ ls -l /usr/sbin/useradd

-rwxr-x---. 1 root root 101168 Oct 15 21:32 /usr/sbin/useradd

3、那如何解决呢?可通过如下的方式解决。

在root用户下,执行命令visudo

[root@localhost ~]# visudo

编辑如下内容

## Allow root to run any commands anywhere

root    ALL=(ALL)       ALL

jiang    ALL=(root)      /usr/sbin/useradd

添加了如上的内容后,此时再在jiang用户下,通过如下方式执行,就可以在普通用户下调用useradd命令(sudo useradd test),此时jiang就获取了root对useradd的执行权限

那么此时在/etc/passwd就可以查看到添加的用户test

二、sudo的特殊应用

应用案例:只允许普通账户登陆Linux,而不允许root账户登陆,而普通账户登陆后,然后通过普通账户登录切换到root账户。

1、拒绝root登录,如下编辑/etc/ssh/sshd_config服务端配置文件(sshd_config表示服务器端配置,ssh_config表示客户端配置)

PermitRootLogin no  #设置该参数为no,就可以拒绝root登录

重新启动服务,/etc/init.d/sshd restart

表示设置过后,root就不能远程登录

[root@localhost ~]# tail /var/log/secure  #日志信息

Mar 23 06:54:48 localhost unix_chkpwd[1737]: password check failed for user (root)

Mar 23 06:54:50 localhost sshd[1732]: Failed password for root from 192.168.1.105 port 64761 ssh2

2、那么在普通用户下,是否可以切换到root用户下呢?

[jiang@localhost ~]$ su - root

Password:

[root@localhost ~]#            #在知道root的用户密码下,可通过su 切换到root下。

3、如果不知道root的密码,如何切换到root下呢?此时就需sudo帮忙了。操作如下

[root@localhost ~]# visudo

## Allow root to run any commands anywhere

jiang    ALL=(root)     NOPASSWD:/bin/su  #表示jiang使用su命令切换到root下不需要密码

测试结果如下:

[jiang@localhost ~]$ sudo su - root

[root@localhost ~]#                   #没有输入密码就直接切换到root下。