sudo是容许
系统管理员让普通用户执行一些或者所有的root
命令的一个
工具,如halt,reboot,su等等。这样不只减小了root用户的登录和管理时间,一样也提升了安全性。Sudo不是对shell的一个代替,它是面向每一个命令的。它的特性主要有这样几点:
§ Sudo可以限制用户只在某台主机上运行某些命令。
§ Sudo提供了丰富的日志,详细地记录了每一个用户干了什么。它可以将日志传到中心主机或者日志
服务器。
§ Sudo使用时间戳
文件来执行相似的“检票”系统。当用户调用sudo而且输入它的密码时,用户得到了一张存活期为5分钟的票(这个值能够在编译的时候改变)。
§ Sudo的配置文件是sudoers文件,它容许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0411。
一,安装
检测是否一经安装了SUDO:
[root@localhost ~]# rpm -q sudo
sudo-1.6.8p12-4.1
若是没有安装,
下载
软件包进行安装:
对于大多数系统来讲,sudo的配置都是相对比较简单的:
0) $> cd /;cp sudo-1.6.8p12.tar.gz /
1) $> tar vxzf sudo-1.6.8p12.tar.gz
2) 若是是从低版本升级的话,升级以前请仔细阅读UPGRADE文件。
3) 若是你在编译以前,已经为另一台不一样的主机运行了’configure’,你必须用make distclean清除’config.cache’文件。不然,’configure’将不能再运行。你也能够直接’rm config.cache’.
4) 阅读’OS dependent notes’看是否支持你的系统。
5) $> cd sudo-8p12
6) 阅读configure文件,仔细看其中的’Available configure options’部分,看是否要加一些特殊的选项。这里选项不少,不过经常使用的主要有这么几个主要的配置参数:
--with-pam 支持使用PAM,使用该选项时要求一个有效的/etc/pam.d/sudo文件
--cache-file=FILE 将缓存test的结果存到FILE文件中。
--help 打印帮助。
--no-create 不要输出.o文件
--quiet, --silent 不打印’checking…’信息
--exec-prefix=EPREFIX
设置包含sudo 和visudo命令的目录
--bindir=DIR 将sudo命令安装到EPREFIX/bin
--sbindir=DIR将visudo命令安装到EPREFIX/bin
--sysconfdir=DIR 将sudoers配置文件安装到DIR,默认为/etc.
--mandir=DIR将man文件安装到DIR,默认为/man.
--with-CC=path 指定你要使用的c编译器的路径。
--with-skey 支持S/Key OTP(一次使用密码)
--with-opie支持NRL OPIE OTP(一次使用密码)
--disable-shadow 不支持shadow密码的系统的选项开关,sudo默认是编译并使用shadow密码的。
--with-sudoers-mode=mode sudoers配置文件模式,默认为0440。
--with-sudoers-uid sudoers配置文件的全部者id,默认为0
--with-sudoers-gid sudoers配置文件的全部者的组id,默认为0
--without-passwd 用户
认证无须密码。
--with-logging=TYPE 日志类型,能够选择’syslog’、’file’或者两种均可以。
--with-logpath=path 日志存放的路径和文件名,默认为/var/log/sudo.log
--with-umask 在运行root命令是用umask,默认的umask是0022
--with-passwd-tries=tries sudo写入log日志前提示输入密码的次数,默认为3次。
--with-timeout=minutes sudo提示输入密码以前的时间,默认为5分钟
--with-password-timeout=minutes 密码的有效期,默认为5分钟,0表示密码永远有效。
--without-lecture 第一次运行sudo不打印lecture信息
--disable-root-sudo root用户不能运行sudo。
--enable-log-host 记录主机host到日志文件
--disable-path-info 出错时,不显示sudo的路径。
如 输入:./configure --with-timeout=10 --without-lecture --disable-root-sudo --disable-path-info --sysconfdir=/home/config/ --bindir=/bin --sbindir=/sbin
7) make
8) make install
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
二,配置,
编辑配置文件命令:visudo
默认配置文件位置:/etc/sudoers
[root@localhost ~]# 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
# Runas alias 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
[root@localhost ~]#
能够用visudo编辑sudoers配置文件,不过也能够直接经过修改sudoers文件实现,不过编辑以前最好看一下它的sample.sudoers文件,里面有一个至关详细的例子能够参考。
#第一部分:用户
定义,将用户分为FULLTIMERS、PARTTIMERS和WEBMASTERS三类。
User_Alias FULLTIMERS = millert, mikef, dowdy
User_Alias PARTTIMERS = bostley, jwfox, crawl
User_Alias WEBMASTERS = will, wendy, wim
#第二部分,将操做类型分类。
Runas_Alias OP = root, operator
Runas_Alias DB = oracle, sybase
#第三部分,将主机分类。这些都是随便分得,目的是为了更好地管理。
Host_Alias SPARC = bigtime, eclipse, moet, anchor :\
SGI = grolsch, dandelion, black :\
ALPHA = widget, thalamus, foobar :\
HPPA = boa, nag, python
Host_Alias CUNETS = 128.138.0.0/255.255.0.0
Host_Alias CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0
Host_Alias SERVERS = master, mail, www, ns
Host_Alias CDROM = orion, perseus, hercules
#第四部分,定义命令和命令地路径。命令必定要使用绝对路径,避免其余目录的同名命令被执行,形成安全隐患 ,所以使用的时候也是使用绝对路径!
Cmnd_Alias DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump,\
/usr/sbin/restore, /usr/sbin/rrestore
Cmnd_Alias KILL = /usr/bin/kill
Cmnd_Alias PRINTING = /usr/sbin/lpc, /usr/bin/lprm
Cmnd_Alias SHUTDOWN = /usr/sbin/shutdown
Cmnd_Alias HALT = /usr/sbin/halt, /usr/sbin/fasthalt
Cmnd_Alias REBOOT = /usr/sbin/reboot, /usr/sbin/fastboot
Cmnd_Alias SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, \
/usr/local/bin/tcsh, /usr/bin/rsh, \
/usr/local/bin/zsh
Cmnd_Alias SU = /usr/bin/su
#这里是针对不一样的用户采用不一样地策略,好比默认全部的syslog直接经过auth 输出。FULLTIMERS组不用看到lecture(第一次运行时产生的消息);用户millert使用sudo时不用输入密码;以及logfile的路径在/var/log/sudo.log并且每一行日志中必须包括年。
Defaults syslog=auth
Defaults:FULLTIMERS !lecture
Defaults:millert !authenticate
Defaults@SERVERS log_year, logfile=/var/log/sudo.log
#root和wheel组的成员拥有任何权利。 若是想对一组用户进行定义,能够在组名前加上%,对其进行设置.
root ALL = (ALL) ALL
%wheel ALL = (ALL) ALL
#FULLTIMERS能够运行任何命令在任何主机而不用输入本身的密码
FULLTIMERS ALL = NOPASSWD: ALL
#PARTTIMERS能够运行任何命令在任何主机,可是必须先验证本身的密码。
PARTTIMERS ALL = ALL
#jack能够运行任何命令在定义地CSNET(128.138.243.0, 128.138.242.0和128.138.204.0/24的子网)中,不过注意前两个不须要匹配子网掩码,然后一个必须匹配掩码。
jack CSNETS = ALL
#lisa能够运行任何命令在定义为CUNETS(128.138.0.0)的子网中主机上。
lisa CUNETS = ALL
#用户operator能够运行DUMPS,KILL,PRINTING,SHUTDOWN,HALT,REBOOT以及在/usr/oper/bin中的全部命令。
operator ALL = DUMPS, KILL, PRINTING, SHUTDOWN, HALT, REBOOT,\
/usr/oper/bin/
#joe能够运行su operator命令
joe ALL = /usr/bin/su operator
#pete能够为除root以外地用户修改密码。
pete HPPA = /usr/bin/passwd [A-z]*, !/usr/bin/passwd root
#bob能够在SPARC和SGI机器上和OP用户组中的root和operator同样运行如何命令。
bob SPARC = (OP) ALL : SGI = (OP) ALL
#jim能够运行任何命令在biglab
网络组中。Sudo默认“+”是一个网络组地前缀。 jim +biglab = ALL #在secretaries中地用户帮助管理打印机,而且能够运行adduser和rmuser命令。 +secretaries ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser #fred可以直接运行oracle或者sybase数据库。 fred ALL = (DB) NOPASSWD: ALL #john能够在ALPHA机器上,su除了root以外地全部人。 john ALPHA = /usr/bin/su [!-]*, !/usr/bin/su *root* #jen能够在除了SERVERS主机组的机器上运行任何命令。 jen ALL, !SERVERS = ALL #jill能够在SERVERS上运行/usr/bin/中的除了su和shell命令以外的全部命令。 jill SERVERS = /usr/bin/, !SU, !SHELLS #steve能够做为普通用户运行在CSNETS主机上的/usr/local/op_commands/内的任何命令。 steve CSNETS = (operator) /usr/local/op_commands/ #matt能够在他的我的工做站上运行kill命令。 matt valkyrie = KILL #WEBMASTERS用户组中的用户能够以www的用户名运行任何命令或者能够su www。 WEBMASTERS www = (www) ALL, (root) /usr/bin/su www #任何用户能够mount或者umount一个cd-rom在CDROM主机上,而不用输入密码。 ALL CDROM = NOPASSWD: /sbin/umount /CDROM,\ /sbin/mount -o nosuid\,nodev /dev/cd0a /CDROM 三,使用 指令名称:sudo 使用权限:在 /etc/sudoers 中有出现的使用者 使用方式:sudo -V sudo -h sudo -l sudo -v sudo -k sudo -s sudo -H sudo [ -b ] [ -p prompt ] [ -u username/#uid] -s 用法:sudo command 说明:以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行 参数: -V 显示版本编号 -h 会显示版本编号及指令的使用方式说明 -l 显示出本身(执行 sudo 的使用者)的权限 -v 由于 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是从新作一次确认,若是超过 N 分钟,也会问密码 -k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟) -b 将要执行的指令放在背景执行 -p prompt 能够更改问密码的提示语,其中 %u 会代换为使用者的账号名称, %h 会显示主机名称 -u username/#uid 不加此参数,表明要以 root 的身份执行指令,而加了此参数,能够以 username 的身份执行指令(#uid 为该 username 的使用者号码) -s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell -H 将环境变数中的 HOME (家目录)指定为要变动身份的使用者家目录(如不加 -u 参数就是系统管理者 root ) command 要以系统管理者身份(或以 -u 更改成其余人)执行的指令 范例: sudo -l 列出目前的权限 sudo -V 列出 sudo 的版本资讯 指令名称:sudoers(在fc5下显示不能找到此命令,但用man能够查到其用法。) 用来显示可使用sudo的用户