工具介绍:
Sudo是一个允许系统管理员授权让普通用户执行部分或全部root命令的工具。这样可以减少root登录提高系统安全性。
主要功能:
可以限制特定的用户在特定的主机上运行指定的命令
有非常详细的日志记录
Sudo使用时间戳文件来执行类似检票系统。当用户使用sudo并输入密码后,用户默认获得了一张存活期为5分钟的票(这个数值可以在编译的时候更改),超过5分钟不用的话,就需要重新输入密码才可以使用
配置文件:/etc/sudoers
1.配置格式:
用户/组 主机=(以何种身份来执行命令) 命令
2.主机别名
格式:Host_Alias SERVER=192.168.1.1/255.255.255.0
例:Host_Alias SERVER=192.168.1.22
3.用户别名
格式:User_Alias ADMIN = test,jack,tom
例:User_Alias TEST = user1
4.命令别名
格式:Cmnd_Alias CAT = /bin/cat /etc/sudoers
例:Cmnd_Alias Ls = /bin/ls /root
5.增加日志记录功能
例:Defaults@SERVER log_host, logfile=/var/log/sudo.log
{为host alise 里的主机增加一个附加日志,如果这个日志需要保存多年,则可使用log_year,这样在日志记录的时候将记录详细的年份}
案例分析:
1.用户分类
A. 数据库用户[zabbix,mysql,discuz,appn]
B. Web服务器用户[nginx,apache,zabbix,discuz]
C. ftp服务器用户[ftp]
D. 系统管理员[baby,zhen]
2.命令
A. 所有用户拥有基本的操作命令(ls,cd,cat,pwd,history)
B. 数据库用户拥有基本的数据库操作命令
Mysql,mysqldump,。。。。。。
C. WEB服务器用户拥有对WEB目录进行操作的权限
不同的web操作不同的目录,及用户所属组。
3.服务类型
A. Web服务(nginx,apache)
B. ftp服务
C. 系统管理
D. 数据库服务
4.功能:
A. (配置zhen可以执行所有的root命令,且使用sudo时不需要输入密码)
Zhen ALL=(ALL) NOPASSWD:ALL
B. (配置test用户可以在SERVER执行cat /etc/sudoers,/cat /etc/shadow,ls
/root 命令)
Cmnd_Alias CT = /bin/cat /etc/sudoers,/bin/cat /etc/shadow
Cmnd_Alias CA = /bin/ls /root
test SERVER=CT,CA
C. (配置admin组用户可以在所有机器上执行所有命令)
%admin ALL=(ALL) ALL
D. 增加日志记录功能
Defaults@SERVER log_host, logfile=/var/log/sudo.log
日志文件:
截取/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
Sudo 命令的用法
sudo -h Help 列出使用方法,退出。
sudo -V Version 显示版本信息,并退出。
sudo -l List 列出当前用户可以执行的命令。只有在sudoers里的用户才能使用该选项。
sudo -u username|#uid User 以指定用户的身份执行命令。后面的用户是除root以外的,可以是用户名,也可以是#uid。
sudo -k Kill 清除“入场卷”上的时间,下次再使用sudo时要再输入密码。
sudo -K Sure kill 与-k类似,但是它还要撕毁“入场卷”,也就是删除时间戳文件。
sudo -b command Background 在后台执行指定的命令。
sudo -p prompt command Prompt 可以更改询问密码的提示语,其中%u会代换为使用者帐号名称,%h会显示主机名称。非常人性化的设计。
sudo -e file Edit 不是执行命令,而是修改文件,相当于命令sudoedit。
sudo <command>:用root权限执行命令<command>。
/etc/sudoers文件的使用。(不会上传图) :-(
可以修改此文件以适用自己个性化的需求。
配置中碰到的问题:
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将会出错!