Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3498600
  • 博文数量: 534
  • 博客积分: 11595
  • 博客等级: 上将
  • 技术积分: 5785
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-22 17:00
文章分类

全部博文(534)

文章存档

2015年(4)

2014年(27)

2013年(15)

2012年(38)

2011年(36)

2010年(85)

2009年(63)

2008年(142)

2007年(124)

分类: LINUX

2007-12-07 10:03:25

Sudo是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登陆和管理时间,同样也提高了安全性。Sudo不是对shell的一个代替,它是面向每个命令的。它的特性主要有这样几点:    
   
  §   Sudo能够限制用户只在某台主机上运行某些命令。    
   
  §   Sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。    
   
  §   Sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票(这个值可以在编译的时候改变)。    
   
  §   Sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0411。    
   
  sudo的下载地址在:   ,现在的最新版本是1.6.3p7,明年1月份出1.6.4正式版(beta版现在已经可以下载)。下面我就从它的安装开始介绍:    
  安装    
  对于大多数系统来说,sudo的配置都是相对比较简单的:    
  0)   $>   cd   /;cp   sudo-1.6.3p7.tar.gz   /    
  1)   $>   tar   vxzf   sudo-1.6.3p7.tar.gz    
  2)   如果是从低版本升级的话,升级之前请仔细阅读UPGRADE文件。    
  3)   如果你在编译之前,已经为另外一台不同的主机运行了’configure’,你必须用make   distclean清除’config.cache’文件。否则,’configure’将不能再运行。你也可以直接’rm   config.cache’.    
  4)   阅读’OS   dependent   notes’看是否支持你的系统。    
  5)   $>   cd   sudo-1.6.3p7    
  6)   阅读configure文件,仔细看其中的’Available   configure   options’部分,看是否要加一些特殊的选项。这里选项很多,不过常用的主要有这么几个主要的配置参数:    
  --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    
9)   你可以用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    
   
  10)   我的sudoers   配置文件是这样的    
  User_Alias   ADMIN   =   root,username    
  Runas_Alias   OP   =   username    
  Cmnd_Alias   IPCHAINS   =   /usr/bin/ipchains    
  Cmnd_Alias   EDIT   =   /bin/vi    
  Cmnd_Alias   SHUTDOWN   =/sbin/shutdown    
  Cmnd_Alias   HALT   =   /usr/bin/halt    
  Cmnd_Alias   DEL   =   /bin/rm    
  Cmnd_Alias   COPY=   /bin/cp    
  Cmnd_Alias   SU=/bin/su    
  Cmnd_Alias   SLEEP=   /bin/sleep    
  Cmnd_Alias   REBOOT   =   /usr/bin/reboot    
  Cmnd_Alias   CHMOD=/bin/chmod    
  Cmnd_Alias   HWCLOCK=/sbin/hwclock    
  Cmnd_Alias   TRACET=/usr/sbin/traceroute    
  Cmnd_Alias   VIPW   =   /sbin/route    
  Cmnd_Alias   PASSWD=/usr/bin/passwd    
  Cmnd_Alias   IPSEC=/usr/local/sbin/ipsec    
  Cmnd_Alias   ARP=/sbin/arp    
  Cmnd_Alias   HOSTNAME=/bin/hostname    
  root   ALL   =   (ALL)   ALL    
  ADMIN   SERVERNAME=(ALL)   NOPASSWD:HOSTNAME    
  ADMIN   SERVERNAME=(ALL)   NOPASSWD:ARP    
  ADMIN   SERVERNAME=(ALL)   NOPASSWD:HWCLOCK    
  ADMIN   SERVERNAME=(ALL)   NOPASSWD:IPCHAINS    
  ADMIN   SERVERNAME=(ALL)   NOPASSWD:HALT    
  ADMIN   SERVERNAME=(ALL)   NOPASSWD:SHUTDOWN    
  ADMIN   SERVERNAME=(ALL)   NOPASSWD:REBOOT    
  ADMIN   SERVERNAME=(ALL)   NOPASSWD:CHMOD    
  ADMIN   SERVERNAME=(ALL)   NOPASSWD:IPSEC    
  ADMIN   SERVERNAME=(ALL)   NOPASSWD:PASSWD    
  ADMIN   SERVERNAME=(ALL)   NOPASSWD:TRACET    
  ADMIN   SERVERNAME=(ALL)   NOPASSWD:DEL    
  ADMIN   SERVERNAME=(ALL)   NOPASSWD:COPY    
  ADMIN   SERVERNAME=(ALL)   NOPASSWD:SU    
  ADMIN   SERVERNAME=(ALL)   NOPASSWD:EDIT    
  ADMIN   SERVERNAME=(ALL)   NOPASSWD:SLEEP    
  ADMIN   SERVERNAME=(ALL)   NOPASSWD:ROUTE    
   
  sudo的使用相对地简单,只要将sudo和sudoers命令拷贝到相应的路径即可。Sudo命令可以rename成你所喜欢的名字,sudoers也一样。    
阅读(1507) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~