工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.wdlinux.cn 注册 | 登陆

sudo

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/*

« 上一篇 | 下一篇 »

Trackbacks

点击获得Trackback地址,Encode: UTF-8

发表评论

评论内容 (必填):