Linux
下Sudo命令的使用方法 “Sudo” 是Unix/Linux平台上的一个非常有用的工具,它允许系统管理员分配给普通用户一些合理的“权利”,让他们执行一些只有超级用户或其他特许用户才能完成的任务,比如:运行一些像mount,halt,su之类的命令,或者编辑一些系统配置文件,像/etc/mtab, /etc/samba/smb.conf等。这样以来,就不仅减少了root用户的登陆次数和管理时间,也提高了系统安全性。
sudo
的特点
Sudo能够限制用户只在某台主机上运行某些命令。
Sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。
Sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票(这个值可以在编译的时候改变)。
Sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0411。
sudo配置文件
默认配置文件位置:/etc/sudoers
[root@localhost bin]# 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
# User alias specification
# Cmnd alias specification
# Defaults specification
# User privilege specification
root ALL=(ALL) ALL
# 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
用户可以用visudo编辑sudoers配置文件,不过也可以直接通过修改sudoers文件实现。
别名类型(Alias_Type):别名类型包括如下四种
Host_Alias 定义主机别名;
User_Alias 用户别名,别名成员可以是用户,用户组(前面要加%号)
Runas_Alias 用来定义runas别名,这个别名指定的是“目的用户”,即sudo 允许切换至的用户;
Cmnd_Alias 定义命令别名;
定义用户别名
User_Alias TEST = ser1,user2,user3
User_Alias Yield = user1,user2,user3
User_Alias
TEST= user1,user2,user3: Yield=user1,user2,user3
定义主机别名
Host_Alias THOST = 192.168.1.0/255.255.255.0
Host_Alias YHOST = 172.18.0.0,172.18.1.0/24
Host_Alias MHOST = PC-001,PC-002,PC-003,10.0.0.0,255.255.255.0,
定义命令别名
Cmnd_Alias DISKMAG = /sbin/fdisk,/bin/df
Cmnd_Alias PWMAG = /usr/sbin/reboot,/usr/sbin/halt
Cmnd_Alias SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, \
/usr/local/bin/tcsh, /usr/bin/rsh
Cmnd_Alias KILL = /usr/bin/kill:PWMAG = /usr/sbin/reboot,/usr/sbin/halt
定义操作类型
Runas_Alias DBADM = db2,mysql,oracle
/etc/sudoers中的授权规则:
授权规则是分配权限的执行规则,我们前面所讲到的定义别名主要是为了更方便的授权引用别名;如果系统中只有几个用户,其实下放权限比较有限的话,可以不用定义别名,而是针对系统用户直接直接授权,所以在授权规则中别名并不是必须的;
授权用户 主机=命令动作
test ALL=/bin/rm, /bin/kill
表示test用户在任何主机中执行rm和kill操作。通过sodo –l 来查看test用户可执行的命令。
[switch@localhost ~]$ sudo -l
User switch may run the following commands on this host:
(root) /bin/ls
(root) /bin/rm
[switch@localhost ~]$ sudo ls /root/
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these two things:
#1) Respect the privacy of others.
#2) Think before you type.
Password:
anaconda-ks.cfg Desktop install.log install.log.syslog
test ALL=(root) NOPASSWD:
/bin/rm, /bin/kill
test ALL=(test) /bin/ls
(root) 表示切换到哪些用户或用户组,默认为root用户,(ALL) 代表所有用户。
NOPASSWD: 系统默认的情况下是需要用户密码,加入NOPASSWD参数后就无需用户输入自己密码。
%member ALL=/bin/*,/sbin/*
表示member中所有成员在所有主机上以root身份执行/bin和sbin下所有命令。
Member ALL=/bin/*,!/bin/kill
表示member中所有成员在所有主机上以root身份执行/bin,但kill命令除外。
sudo日志
在sudo中管理员可以启用sudo日志,通过sudo日志文件跟踪用户执行的任何指令。
Defaults logfile=/var/log/sudo.log #指定sudo.log
Defaults loglinelen=0 #表示不记录空命令行
Defaults !syslog #表示不记录到/var/log/messages
[root@localhost bin]# cat /var/log/sudo.log
Mar 3 03:17:30 : root : TTY=pts/0 ; PWD=/bin ; USER=root ; COMMAND=list
Mar 3 03:17:37 : switch : TTY=pts/0 ; PWD=/home/switch ; USER=root ;
COMMAND=/bin/ls -l /root/ggg
Mar 3 03:17:38 : switch : TTY=pts/0 ; PWD=/home/switch ; USER=root ;
COMMAND=/bin/ls -l /root
sudo命令格式如下:
sudo -K -L -V -h -k -l -vsudo [-HPSb] [-a auth_type] [-c
class-] [-p prompt] [-u username#uid] {-e file [...] -i -s command}
下面我们再来看一下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 在后台执行指定的命令。
别名实例
User_Alias NORMAL = localuser,pubuser,shuser,backuser
User_Alias MANGE = admin,member,switch
User_Alias POWER = shutuser
User_Alias TEST = adtest,test1,test2,test3
Host_Alias APPSYS = web,ftp,mail
Host_Alias PRODUCT = db1,db2,db3,backup
Host_Alias TESTSYS = 192.168.2.0/255.255.255.0
Cmnd_Alias FILE = /bin/ls,/bin/ln,/bin/cp,/bin/cat,/bin/chmod,/bin/cut,/bin/more,/bin/mv,\
/bin/vi,/bin/rm,/bin/rmdir,/bin/touch
Cmnd_Alias ADSHELL = /bin/*,/sbin/*
Cmnd_Alias SHUT = /sbin/shutdown,/sbin/reboot,/sbin/halt
Runas_Alias DBA = mysql
#NORMAL
组
只能在
PRODUCT
网络和APPSYS中执行FILE指令
NORMAL APPSYS = FILE:NORMAL PRODUCT = FILE
#MANGE
用户组可在所有网络上执行
/bin
和
/sbin
下所有指令
MANGE ALL = ADSHELL
#admin用户
可在任何网络环境中执行任何所有命令除TESTSYS
网络主机外
admin ALL =(root)
NOPASSWD: ALL:!admin=TESTSYS
#admin
用户可以修改所有网络除root外用户口令
admin ALL = /usr/bin/passwd[A-z]*,!/usr/bin/passwd root
#MANGE
组无需输入口令可在所有网络上执行ADSHELL,和SHUT命令
MANGE ALL = NOPASSWD: ADSHELL,SHUT
#shutuser用户可在所有网络环境中执行ADSHELL命令
shutuser ALL =(ALL) ADSHELL
#
NORMAL组
可以在
APPSYS
网络上su除root之外的所有人
NORMAL APPSYS=/bin/su [!-]*,!/bin/*root*
#MANGE
组用户可在PRODUCT网络环境上执行 mysql用户指令
MANGE PRODUCT=( DBA) /usr/local/mysql/bin/*