sudoers(权限管理)

 sudoers 实例:

因为sudoers文件是进行单次语法解析的,所以顺序是相当重要的。一般来说,你应该像这样组织sudoersHost_Alias\User_Alias\Cmnd_Alias定义首先定义,然后紧跟Default_Entry行,最后是Runas_Alias和用户自定义。最基本的经验方法是你不能引用没有被定义的Alias。下面是sudoers条目实例,无可否认,有些条目是有点做作;首先,我们定义aliases:

# 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

Cmnd_Alias     REBOOT = /usr/sbin/reboot

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

Cmnd_Alias     PAGERS = /usr/bin/more, /usr/bin/pg, /usr/bin/less

 

#这儿我们以默认值重写一些编译值。我们想sudo syslog在所有的情况下使用认证机制来记录日志。我们不想让全职人员受sudo lecture支配,用户millert使用sudo不需要密码,当我们以root用户运行命令时,我们不想重置LOGNAME,USERUSERNAME环境变量。另外,在SERVERS Host_Alias主机上,我们保存一个增加的本地日志文件,保证在每行日志都记有年份,因为日志条目会被保留几年。最后一点,我们取消PAGERS Cmnd_Aliasshell转义字符(/usr/bin/more, /usr/bin/pg and /usr/bin/less)

# Override built-in defaults

Defaults               syslog=auth

Defaults>root          !set_logname

Defaults:FULLTIMERS    !lecture

Defaults:millert       !authenticate

Defaults@SERVERS       log_year, logfile=/var/log/sudo.log

Defaults!PAGERS        noexec

 

指定用户是实际决定谁可以运行的部分;

root           ALL = (ALL) ALL

%wheel         ALL = (ALL) ALL

我们让rootwheel组的任何用户在任意主机上运行任何命令;

 

FULLTIMERS     ALL = NOPASSWD: ALL

全职系统管理员可以不用认证在任何主机上就可以运行任何命令;

 

PARTTIMERS     ALL = ALL

兼职系统管理员 (bostley, jwfox, and crawl) 需要首先认证他们自己才能运行任意命令;(因为缺少NOPASSWD标识)

 

jack           CSNETS = ALL

用户jack可以在CSNETS alias上运行所有任何命令;只有128.138.204.0/24指定了子网掩码,其它机器的子网掩码默认与本机一致;

 

lisa           CUNETS = ALL

用户lisaCUNETS alias运行任何命令;

 

operator       ALL = DUMPS, KILL, SHUTDOWN, HALT, REBOOT, PRINTING,\

                sudoedit /etc/printcap, /usr/oper/bin/

用户operator在任何主机上运行有限的命令,如DUMPS/usr/oper/bin/所有的命令;

 

joe            ALL = /usr/bin/su operator

joe只有suoperator

 

pete           HPPA = /usr/bin/passwd [A-z]*, !/usr/bin/passwd root

pete被允许在HPPA上改变除root用户外的任何人的密码。注意,这里假设passwd没有以多个用户名为参数;

 

bob            SPARC = (OP) ALL : SGI = (OP) ALL

用户可以在SPARCSGI上以任何在OP Runas_Alias中列出的用户(rootoperator)的身份运行任何命令;

 

jim            +biglab = ALL

jim可以在biglab网络组的机器上运行任何命令;sudo知道biglab是一个网络组缘于前缀+

 

+secretaries   ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser

secretaries网络组中用户需要帮助管理打印机、增加删除用户;

 

fred           ALL = (DB) NOPASSWD: ALL

fred可以无需密码以DB Runas_Alias中的用户运行任何命令;

 

john           ALPHA = /usr/bin/su [!-]*, !/usr/bin/su *root*

ALPHA机器上,john可以su到除了root的任何人,且不允许给su任何-开头的参数;

 

jen            ALL, !SERVERS = ALL

jen可以在除SERVERS上运行所有命令;

 

jill           SERVERS = /usr/bin/, !SU, !SHELLS

jill可以在SERVERS主机上运行/usr/bin下的除SUSHELLS Cmnd_Aliases之外的所有命令;

 

steve          CSNETS = (operator) /usr/local/op_commands/

steve可以以用户operator执行/usr/local/op_commands/下的命令;

 

matt           valkyrie = KILL

在个人工作站valkyrie上,matt 能够使用kill杀死进程;

 

WEBMASTERS     www = (www) ALL, (root) /usr/bin/su www

在主机wwwWEBMASTERS User_Alias的各个用户可以以www运行所有伪政府或者以root用户切换到www

 

ALL            CDROM = NOPASSWD: /sbin/umount /CDROM,\

                       /sbin/mount -o nosuid\,nodev /dev/cd 0a /CDROM

 

安全要点

使用"!"来从ALL中减去命令一般来说不会产生预期作用.用户可以简单的通过把希望执行的命令改名执行的法子来绕过限制.例如:
bill ALL = ALL, !SU, !SHELLS
这并不会阻止bill执行SUSHELLS中列出的命令.他只需要把这些命令改一个名字,或者从一个编辑器或者其他程序中escapeshell(译注:原文是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
网络组文件

你可能感兴趣的:(职场,sudoers,休闲)