Sudo是Unix/Linux平台上的一个非常有用的工具,它允许系统管理员分配给普通用户一些合理的“权利”,让他们执行一些只有超级用户或其他特许用户才能完成的任务,比如:运行一些像mount,halt,su之类的命令,或者编辑一些系统配置文件,像/etc/mtab, /etc/samba/smb.conf等。这样以来,就不仅减少了root用户的登陆次数和管理时间,也提高了系统安全性。

一、sudo的特点

   sudo扮演的角色注定了它要在安全方面格外谨慎,否则就会导致非法用户攫取root权限。同时,它还要兼顾易用性,让系统管理员能够更有效,更方便地使用它。sudo设计者的宗旨是:给用户尽可能少的权限但仍允许完成他们的工作。所以,sudo有以下特点:

   1、sudo能够限制指定用户在指定主机上运行某些命令。

   2、sudo可以提供日志,忠实地记录每个用户使用sudo做了些什么,并且能将日志传到中心主机或者日志服务器。

   3、sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机。它默认的存放位置是/etc/sudoers

   4、sudo使用时间戳文件来完成类似“检票”的系统。当用户执行sudo并且输入密码后,用户获得了一张默认存活期为5分钟的“入场券”(默认值可以在编译的时候改变)。超时以后,用户必须重新输入密码。

二、sudo命令

1、sudo条目语法如下:

   whowhich_hosts=(runas)  TAG:command

   hadoop  ALL=(root) NOPASSWD:/usr/sbin/useradd, PASSWD:/usr/sbin/userdel

   注释:hadoop用户可以在任何地点以管理的身份执行命令useradd(无需密码)和usermod(需要密码)

2、关于别名(宏)

   此外sudo还支持别名的定义,我们通过引用定义好的别名可以提供工作效率:

       who                User_Alias

       which_hosts    Host_Alias

       runas              Runas_Alias

       command       Cmnd_Alias

   User_Alias   Host_Alias   Runas_Alias   Cmnd_Alias
     用户名     主机名     用户名     命令路径
     组名(%)     IP地址     组名(%)       目录
    User别名   网络地址   Runas别名    Cmnd别名

   host别名

3、使用visudo来编辑配置文件(/etc/sudoers)

   虽然我们可以使用vim直接来编辑sudo的配置文件,但sudo提供了更加智能的编辑命令visudo,它能在编辑配置文件的同时帮我们检查语法错误,并在错误时提供快捷的返回功能,如图:

sudo详解_第1张图片

4、visudo常用选项

   查看当前用户可以使用所有sudo类的命令可以使用 -l 选项,如图:

sudo详解_第2张图片

   由于sudo默认密码刷新时间为5分钟,如果刚好用户输入密码执行命令之后因其他原因离开计算机,其他用户在5分钟之后执行相同的命令依然有效,如图:

   为了防止这种情况的发生,可以使用 -k 选项,如图:

sudo详解_第3张图片5、sudo的日志审计

    为了能够明确的追究责任,sudo还提供了人性化的日志功能,在/var/log/secure日志文件中可以查看到,用于记录所有sudo类用户的所有动作,如图:

sudo详解_第4张图片

   日志文件的安全性  

三、基本实例用法

1、hadoop用户可以在任何地点以管理员的身份执行命令useradd(无需密码)和usermod(需要密码)

   使用visudo命令在配置文件末尾添加如下内容:

hadoop  ALL=(root) NOPASSWD:/usr/sbin/useradd, PASSWD:/usr/sbin/userdel

   切换至hadoop用户测试结果:

sudo详解_第5张图片

2、hadoop用户和组可以在任何地点以管理员的身份执行命令执行增、删、改、设置用户名密码,但不允许设置管理员的密码。

   使用visudo命令在配置文件末尾添加如下内容:

User_Alias USERADMIN = hadoop, %hadoop
Cmnd_Alias USERADMINCMND = /usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/userdel, /usr/bin/passwd [A-Za-z]*, ! /usr/bin/passwd root
USERADMIN ALL=(root) NOPASSWD: USERADMINCMND

sudo详解_第6张图片

3、hadoop用户只能在192.168.1.120主机远程登录并以管理员身份执行ifconfig eth0命令。

   使用visudo命令在配置文件末尾添加如下内容:

Cmnd_Alias NETCMND = /sbin/ifconfig eth0
hadoop 192.168.1.120 = (root) NOPASSWD:NETCMND

   使用192.168.1.104测试,如图:

sudo详解_第7张图片

   使用192.168.1.120测试,如图:

sudo详解_第8张图片

4、hadoop用户可以在任何地点以任何的身份执行所有命令,等同于root。

   使用visudo命令在配置文件末尾添加如下内容:

hadoop  ALL=(ALL)       ALL

sudo详解_第9张图片