当前位置: 首页 > 图文教程 > 服务器 > Linux服务器 > sudo安装、配置和使用

Linux服务器
Linux上双网卡绑定方法(Suse9SP3)
Linux操作系统调优参数的意义
Linux下使用SSH客户端及其Sftp文件传送
教你恢复被误删除的Linux文件
SQL Server注入大全及防御
Linux无法解析域名的解决办法
Linux系统下安装和配置MyEclipse的方法
Ubuntu下VirtualBox 1.4.0设置文件共享
Windows与Linux系统共享StarDict字典文件
修改Linux下相关的登陆信息
Windows通过SecureCRT远程登录Linux主机
Linux操作系统如何修改SWAP交换区的大小
Linux操作系统下为Apache目录添加密码
Linux时间设置与同步(NTP)
Linux内核补丁AMD旁路转换缓冲(TLB)错误
Linux架设DHCP服务器的方法
Fedora 8下Apache配置与管理
Linux操作系统下用单网卡捆绑双IP的方法
Ubuntu Linux系统环境变量配置文件
SUSE Linux中将Tomcat作为Service运行

Linux服务器 中的 sudo安装、配置和使用


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-04   浏览: 93 ::
收藏到网摘: n/a

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的用户。