灌溉梦想,记录脚步
« »
2009年5月31日技术合集

/etc/sudoers配置范例以及解释

  /etc/sudoers配置范例以及解释:
  示例
  下面是sudoers条目的示例.显然,一些示例有点不自然.首先,我们定义别名:
  # User alias specification
  User_Alias FULLTIMERS = millert, mikef, dowdy
  User_Alias PARTTIMERS = bostley, jwfox, crawl
  User_Alias WEBMASTERS = will, wendy, wim
  # Runas alias specification
  Runas_Alias OP = root, operator
  Runas_Alias DB = oracle, sybase
  # Host alias specification
  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 specification
  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
  接下来我们改写了一些编译进的默认值.我们希望sudo在所有情况下使用auth设施在系统日志中作记录.我们不想总是输出初次使用sudo的提示,并且用户millert使用sudo不需要口令.另外,我们为SERVERS Host_Alias中的主机维护一个附加的本地日志文件.并且由于这个日志需要保存许多年,我们要在日志的每一行中加入年份信息.
  # Override built in defaults
  Defaults syslog=auth
  Defaults:FULLTIMERS !lecture
  Defaults:millert !authenticate
  Defaults@SERVERS log_year, logfile=/var/log/sudo.log
  实际上决定谁能运行什么的是用户说明部分:
  root ALL = (ALL) ALL
  %wheel ALL = (ALL) ALL
  我们让root和wheel组的成员可以在任何主机上以任何人的身份运行任何命令.
  FULLTIMERS ALL = NOPASSWD: ALL
  专职系统管理员(millert,mikef和dowdy)可以在任何主机上执行任何命令而不需要进行身份验证.
  PARTTIMERS ALL = ALL
  兼职系统管理员(bostley,jwfox和crawl)可以在任何主机上运行任何命令,但他们首先必须进行身份验证(因为这个条目没有NOPASSWD标签).
  jack CSNETS = ALL
  用户jack可以在CSNETS别名(网络128.138.243.0,128.138.204.0和128.138.242.0)中的机器上运行任何命令.在这些网络中,只有128.138.204.0明确的给出了掩码(用CIDR方式),指明这是个C类网.对CSNETS中的其他网络来说,如果本地主机的掩码匹配的话将使用本地主机的掩码.
  lisa CUNETS = ALL
  用户lisa可以在CUNETS别名(B类网络128.138.0.0)中的任何主机上执行任何命令.
  operator ALL = DUMPS, KILL, PRINTING, SHUTDOWN, HALT, REBOOT,\
  /usr/oper/bin/
  用户operator可以执行的命令被限制在一个简单的maintenance中.这里就是和备份,杀死进程,打印系统,关闭系统和任何在/usr/oper/bin/中的命令.
  joe ALL = /usr/bin/su operator
  用户joe只能su成operator.
  pete HPPA = /usr/bin/passwd [A-z]*, !/usr/bin/passwd root
  用户pete可以修改HPPA上除了root以外任何用户的口令.注意,这里人为passwd不会在命令行上使用多个用户名.
  bob SPARC = (OP) ALL : SGI = (OP) ALL
  用户可以在SPARC和SGI上以任何在OP Runas_Alias中列出的用户(root和operator)的身份运行任何命令.
  jim +biglab = ALL
  用户jim可以在biglab网络用户组中的机器上运行任何命令.因为biglab前面加上了前缀”+”,所以sudo知道这是一个网络用户组.
  +secretaries ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser
  网络用户组secretaries中的用户需要帮助管理打印机和进行增删用户的工作,所以需要允许他们在任何机器上执行这些命令.
  fred ALL = (DB) NOPASSWD: ALL
  用户fred可以在DB Runas_Alias (oracle 或 sybase)上以任何人的身份执行任何命令而不需要提供口令.
  john ALPHA = /usr/bin/su [!-]*, !/usr/bin/su *root*
  用户john可以在ALPHA上su成除root的任何人,但是不允许他给su加上任何标志执行.
  jen ALL, !SERVERS = ALL
  用户jen可以在除了SERVERS Host_Alias (master, mail, www 和 ns)以外的任何机器上执行任何命令.
  jill SERVERS = /usr/bin/, !SU, !SHELLS
  用户jill可以在任何SERVERS Host_Alias中的机器上运行/usr/bin/下除了属于SU和SHELLS Cmnd_Aliases外的任何命令.
  steve CSNETS = (operator) /usr/local/op_commands/
  用户steve可以在任何CSNETS中的机器上执行/usr/local/op_commands/中的所有命令,但是只能以operator的身份.
  matt valkyrie = KILL
  用户matt应该可以在他自己的工作站valkyrie上杀死挂起的进程.
  WEBMASTERS www = (www) ALL, (root) /usr/bin/su www
  任何在WEBMASTERS User_Alias (will, wendy,和 wim)中的用户都能够在主机www上以www(网页的所有者)的身份执行任何命令,或者简单的su成www.
  ALL CDROM = NOPASSWD: /sbin/umount /CDROM,\
  /sbin/mount -o nosuid\,nodev /dev/cd0a /CDROM
  所有的用户都应该能够在 CDROM Host_Alias (orion, perseus, hercules)中的主机上mount和unmount光盘驱动器而不需要输入口令.对用户来说敲入这么长的命令有些冗长而乏味,所以把它封装在一个 shell脚本中是一个最佳的选择.
  安全要点
  使用”!”来从ALL中减去命令一般来说不会产生预期作用.用户可以简单的通过把希望执行的命令改名执行的法子来绕过限制.例如:
  bill ALL = ALL, !SU, !SHELLS
  这并不会阻止bill执行SU和SHELLS中列出的命令.他只需要把这些命令改一个名字,或者从一个编辑器或者其他程序中escape到shell(译注:原文是use a shell escape from an editor or other program)就可以运行了.所以这种类型的限制至少应该经过深思熟虑(并从策略上加强它).
  CAVEATS
  sudoers必需总是使用visudo命令来编辑,因为它会锁定文件并且进行语法检察.这强制sudoers摆脱语法错误,因为sudoers有语法错误时sudo是不会运行的.
  当使用机器的网络用户组时(与用户相反),如果您在网络用户组中存贮了完整的主机名(这经常是事实),您需要让主机名像hostname命令的输出一样是完整的或者在sudoers中使用fqdn选项.
  文件
  /etc/sudoers 谁能作什么的一个列表
  /etc/group 本地组文件
  /etc/netgroup 网络组文件

日志信息 »

该日志于2009-05-31 18:29由 admin 发表在技术合集分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。

发表回复