Sudo 是一个允许系统管理员授权让普通用户执行部分或全部root命令的工具。这样可以减少root登陆提高系统安全性。


Sudo特点:

1.可以限制特定的用户在特定的主机上运行指定的命令
2.有非常详细的日志纪录
3.sudo使用时间戳文件来执行类似"检票"系统。当用户使用sudo并且输入密码后,用户默认获得了一张存活期为5分钟的票(这个数值可以在编译的时候更改),超过5分钟不用的话就需要重新输入密码才能使用

sudo安装过程(略):一般系统都默认有安装

配置文件/etc/sudoers:

以下简略介绍该文件的配置项(root使用visudo编辑该文件)

第一部分:# Host alias specification(主机别名定义,用于定义多台住机)
格式:Host_Alias SERVER = 192.168.0.1/255.255.255.0
      Host_Alias SERVER1 = 172.17.1.1

第二部分:# User alias specification(用户别名定义,用于定义多组用户)

格式:User_Alias ADMIN = test,jack,tom
      User_Alias TEST = user1

第三部分:# Cmnd alias specification (命令别名定义,定义用户执行命令列表)

格式:Cmnd_Alias CAT = /bin/cat /etc/sudoers
      Cmnd_Alias Ls = /bin/ls /root

第四部分:# Override built in defaults(增加日志纪录功能)

Defaults@SERVER  log_host, logfile=/var/log/sudo.log
#为host alise里的主机增加一个附加日志,如果这个日志需要保存多年,则可使用log_year,这样在日

志纪录的时候将纪录详细的年份

下面详细解释配置实例:

[test@redflag test]$ sudo cat /etc/sudoers
# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the sudoers man page for the details on how to write a sudoers file.
#

# Host alias specification
Host_Alias SERVER = 172.17.196.10 #配置主机172.17.196.10别名SERVER;Host_Alias前不能有空格
# User alias specification
User_Alias ADMIN = test,jack      #配置用户组ADMIN,所属用户test,jack
# Cmnd alias specification
Cmnd_Alias CT = /bin/cat /etc/sudoers,/bin/cat /etc/shadow
Cmnd_Alias CA = /bin/ls /root

#配置命令别名CT,可以执行cat etc/sudoers,cat /etc/shadow 命令,CA可执行 la /root命令

# Defaults specification

# User privilege specification
root    ALL=(ALL) ALL
test    SERVER=CT,CA #配置test用户可以在SERVER执行cat /etc/sudoers,/cat /etc/shadow,ls

/root 命令
# test ALL=(ALL) NOPASSWD: ALL(配置test可以执行所有的root命令,且使用sudo时不需要输入密码)

# Override built in defaults
Defaults@SERVER  log_host, logfile=/var/log/sudo.log
#配置日志纪录到主机SERVER的/var/log/sudo.log文件

# Uncomment to allow people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL

# Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL

# Samples
# %users  ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users  localhost=/sbin/shutdown -h now

日志文件:

截取/var/log/sudo.log的一段纪录如下:

Mar  3 15:13:14 : test : HOST=redflag : command not allowed ; TTY=pts/0 ;
    PWD=/home/test ; USER=root ; COMMAND=/bin/ls /root
Mar  3 15:13:18 : test : HOST=redflag : command not allowed ; TTY=pts/0 ;
    PWD=/home/test ; USER=root ; COMMAND=/bin/su -
Mar  3 15:13:56 : test : HOST=redflag : TTY=pts/0 ; PWD=/home/test ; USER=root ;
    COMMAND=/bin/cat /etc/sudoers
Mar  3 15:14:10 : test : HOST=redflag : TTY=pts/0 ; PWD=/home/test ; USER=root ;
    COMMAND=/bin/ls /root
Mar  3 16:27:30 : test : HOST=redflag : TTY=pts/0 ; PWD=/home/test ; USER=root ;
    COMMAND=/bin/cat /etc/sudoers
Mar  3 16:29:47 : test : HOST=redflag : command not allowed ; TTY=pts/0 ;
    PWD=/home/test ; USER=root ; COMMAND=/bin/cat /var/log/sudo.log

配置中碰到的问题:

1、主机名配置错误导致sudo不能执行和日志纪录。

错误提示:Sorry, user test is not allowed to execute '/bin/cat /etc/sudoers' as root on

localhost.localdomain.

解决:将其中的localhost改为真实主机名字或IP即可

test    localhost=/sbin/cat /etc/sudoers
Defaults@localhost log_host /var/log/sudo.log

2、命令别名列表中命令错误导致sudo不能执行
错误提示:[jackyu@localhost jackyu]$ sudo cat /etc/sudoers
Sorry, user jackyu is not allowed to execute '/bin/cat /etc/sudoers' as root on

localhost.localdomain.

解决:由于在Cmnd alias里定义的时候命令书写有误(Cmnd_Alias CAT = /bin/cat -n /etc/sudoers).
执行:sudo cat -n /etc/sudoers
[注]:不管在Cmnd alias里还是在# User privilege specification中指定命令,使用sudo运行时必须一

摸一样,否则将出错。比如在Cmnd alias里指定某用户职能运行 /bin/cat /etc/sudoers,如果该用户登

陆后运行 sudo /cat -n /etc/sudoers将会出错.


##################################################################

1. 最简单的配置,让普通用户support具有root的所有权限

执行visudo之后,可以看见缺省只有一条配置:

root    ALL=(ALL) ALL

那么你就在下边再加一条配置:

support ALL=(ALL) ALL

这样,普通用户support就能够执行root权限的所有命令

以support用户登录之后,执行:

sudo su -

然后输入support用户自己的密码,就可以切换成root用户了

2. 让普通用户support只能在某几台服务器上,执行root能执行的某些命令

首先需要配置一些Alias,这样在下面配置权限时,会方便一些,不用写大段大段的配置。Alias主要分成4种

Host_Alias

Cmnd_Alias

User_Alias

Runas_Alias

1) 配置Host_Alias:就是主机的列表

Host_Alias      HOST_FLAG = hostname1, hostname2, hostname3

2) 配置Cmnd_Alias:就是允许执行的命令的列表,命令前加上!表示不能执行此命令.

命令一定要使用绝对路径,避免其他目录的同名命令被执行,造成安全隐患 ,因此使用的时候也是使用绝对路径!

Cmnd_Alias      COMMAND_FLAG = command1, command2, command3 ,!command4

3) 配置User_Alias:就是具有sudo权限的用户的列表

User_Alias USER_FLAG = user1, user2, user3

4) 配置Runas_Alias:就是用户以什么身份执行(例如root,或者oracle)的列表

Runas_Alias RUNAS_FLAG = operator1, operator2, operator3

5) 配置权限

配置权限的格式如下:

USER_FLAG HOST_FLAG=(RUNAS_FLAG) COMMAND_FLAG

如果不需要密码验证的话,则按照这样的格式来配置

USER_FLAG HOST_FLAG=(RUNAS_FLAG) NOPASSWD: COMMAND_FLAG

配置示例:

############################################################################

# sudoers file.

#

# This file MUST be edited with the 'visudo' command as root.

#

# See the sudoers man page for the details on how to write a sudoers file.

#

# Host alias specification

Host_Alias      EPG = 192.168.1.1, 192.168.1.2

# User alias specification

# Cmnd alias specification

Cmnd_Alias      SQUID = /opt/vtbin/squid_refresh, !/sbin/service, /bin/rm

Cmnd_Alias      ADMPW = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd, !/usr/bin/passwd root

# Defaults specification

# User privilege specification

root    ALL=(ALL) ALL

support EPG=(ALL) NOPASSWD: SQUID

support EPG=(ALL) NOPASSWD: ADMPW

# Uncomment to allow people in group wheel to run all commands

# %wheel        ALL=(ALL)       ALL

# Same thing without a password

# %wheel        ALL=(ALL)       NOPASSWD: ALL

# Samples

# %users  ALL=/sbin/mount /cdrom,/sbin/umount /cdrom

# %users  localhost=/sbin/shutdown -h now

###############################################################