分类:
2008-07-30 10:56:12
Sudo是一款安全工具,它能允许管理员给予某些用户或组以作为root用户或其他用户从而运行特定命令的权利。这个软件还能记录下特定系统用户的命令和参数。sudo的开发者声明这个软件的基本出发点就是“让人们以尽可能少的权限完成他们的工作。Sudo在1986年夏天首次发行,Todd Miller先生现在负责这个程序并在方式的许可证下发行它。Sudo主页位于 。Sudo程序是一款在命令行方式下工作的安全工具,并且我们每次只执行一条命令。它支持的功能如表-1:
功能特征 |
描述 |
命令记录 |
记录命令和参数。该功能用于跟踪用户输入的命令,尤其适合于进行系统审计。因为sudo 会记录下所有作为root用户(或者规定的其他用户)的命令,所以许多管理员经常用它来替代root ,以便记录下自己使用的命令,这不仅能增进系统安全,还能用来进行故障检修。 |
多系统集中记录 |
Sudo联合系统日志守护syslog后,能将所有日志集中存放在一个主机上。 |
命令限制 |
限定用户或者用户组能够使用的命令。 |
票据式系统 |
票据式系统通过创建票据对登录sudo施行时间限制,在给定时间内票据是有效的。每个新命令都刷新这个票据时间。缺省是5分钟 |
多系统集中管理 |
Solaris的Sudo 的配置一般写在/usr/localsudoers这个文件中,而该文件可以供多个系统所用,这样一来,我们就可以在一个主机上对这些系统进行集中管理了。 |
二、下载安装Sudo
#wget ftp://ftp.sunfreeware./pub//intel/10/sudo-1.6.9p16-sol10--local.gz #wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/libintl-3.4.0-sol10-x86-local.gz #wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/libiconv-1.11-sol10-x86-local.gz #wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/libgcc-3.3-sol10-intel-local.gz #gunzip sudo-1.6.9p16-sol10-x86-local.gz #gunzip libintl-3.4.0-sol10-x86-local.gz #gunzip libiconv-1.11-sol10-x86-local.gz #gunzip libgcc-3.3-sol10-intel-local.gz |
下面使用pkgadd –d 命令以此安装以上四个软件包。
说明:Sudo几乎支持所有的UNIX类版本,但如果要从源代码进行安装的话,必须准备好GCC编译器和Gun make工具。也可以使用pkgget安装sudo,solairs有一种工具,这就是pkg_get,由blastwave.推出的。用作者的话说是:“一个用来自动抓取上的包的工具. 模拟了 linux上的"apt-get".”传统的Solaris命令功能并不够强大--这个软件可以补充很多包管理的功能。这个工具简单到仅使用如下命令就可以获取sunfreeware.com上一个包的最新版本。
# pkg-get install sudo
这条命令会自动下载适合你的体系结构和为你的OS修订的版本sudo数据库(如果存在的话),并安装它。如果你已安装了一个较老的版本,就可以使用'upgrade'代替 'install',这样就会用新的版本覆盖老的版本(即升级)。
下载pkg-get:
#wget #pkgadd -d pkg-get.Pkg # pkg-get –I sudo |
要配置 ,我们必须对/usr/local/sudoers 文件进行编辑,该文件中定义了哪些用户可以执行哪些命令。此外,只有root用户才有编辑该文件的权限,并且还必须用visudo 命令对其编辑。在编辑sudoers 文件时,visudo命令会执行以下任务:
(一) 检查语法错
即使在修改中找到一个语法错误,visudo也不会保存所做的修改。当发现语法错误时,它会指出错误所在的行号,并给出相应的指导性的提示。这时,我们会看到一个“What Now ?”提示和三个选项:“e”表示重新编辑文件;“x”表示退出并且不作任何保存;“Q”表示退出并保存更改的内容。如果sudoers 文件存在语法错误,而我们又选择Q退出并保存visudo的修改的话,那么我们是无法正常运行sudo的,直到语法问题得到纠正为止。遇到这种情况,我们必须再一次运行visudo,修正错误,然后再次保存文件。当修正问题时,最好选择e项;如果您对于正误还心存顾虑时,可以选择x项,这样在退出时便不会变成修改了。
(二) sudoers 配置文件中别名规则
使用者说明节区格式:
使用者 接收群组 [: 接收群组 ] ...
接收群组 ::= 主机象征 = [op]指令象征 [,[op]指令象征] ...
主机象征 ::= 一个小写的主机名称或主机别名。
指令象征 ::= 一个指令或指令别名。
op ::= 逻辑的 '!' 否定操作数。
主机别名节区格式:
Host_Alias 主机别名 = 主机列表
Host_Alias ::= 这是一个关键词。
主机别名 ::= 一个大写的别名。
主机列表 ::= 以逗号间隔的一些主机名称。
指令别名节区格式:
Cmnd_Alias 指令别名 = 指令列表
Cmnd_Alias ::= 这是一个关键词。
指令别名 ::= 一个大写的别名。
指令列表 ::= 以逗号间隔的一些指令。
所有在 '#' 符号后面的文字都会被当作是批注。 太长的行可以使用倒斜线 '\' 字符来分成新的行。 保留的别名 'ALL' 在 {Host,Cmnd}_Alias' 里都可以使用。不要用 'ALL' 来定义一个别名,这个别名无效。 注意到 'ALL' 暗示全部的主机跟指令。 你可以使用这个语法从整个范围中减掉一些项目:
user =ALL,!ALIAS1,!/etc/halt...
下面是一个范例
# Host specification Host_Alias HUB=houdini.rootgroup.:\ REMOTE=merlin,kodiakthorn,spirit Host_Alias MACHINES=kalkan,alpo,milkbones Host_Alias SERVERS=houdini,merlin,kodiakthorn,spirit # Command alias specification Cmnd_Alias LPCS=/usr/etc/lpc,/usr/ucb/lprm Cmnd_Alias SHELLS=/bin/sh,/bin/csh,/bin/tcsh Cmnd_Alias MISC=/bin/rm,/bin/cat:\ SHUTDOWN=/etc/halt,/etc/shutdown # User specification britt REMOTE=SHUTDOWN:ALL=LPCS robh ALL=ALL,!SHELLS nieusma SERVERS=SHUTDOWN,/etc/:\ HUB=ALL,!SHELLS jill houdini.rootgroup.com=/etc/shutdown,MISC markm HUB=ALL,!MISC,!/etc/shutdown,!/etc/halt billp ALL=/usr/local/bin/top:MACHINES=SHELLS davehieb merlin=ALL:SERVERS=/etc/halt:\ kodiakthorn=ALL |
上面的 sudoers 说明文件是由 4 个主机别名说明,4 个指令别名说明以及 7个使用者说明所组成的。Britt 被允许在远程机器 (merlin, kodiakthorn,
还有 spirit) 上执行 /etc/halt, /etc/shutdown, /usr/etc/lpc 以及 /usr/ucb/lprm 命令。Rohn 被允许在任何机器上执行除了 SHELL 指令群以外的任 何指令。Jill 被允许在 houdini 上执行 /etc/shotdown命令, /bin/rm命令, 以及 /bin/cat命令。Davehieb 可以在 merlin 以及 kodiakthorn 上执行任何指令并且 可以关闭服务器 。
(三)配置实例
Sudoers文件中包含一个root条目,默认的权限规定如下所示:
root ALL = (ALL ) ALL
该配置允许root用户可以执行所有命令。
要想让其他用户作为root 来运行命令,我们必须将这些用户加入到sudoers 文件中。我们还必须规定允许在哪些主机上运行这些命令。最后,我们还必须列出这些用户可以作为root 来运行的具体命令。在下面的步骤中,我们将创建用户goodcjh1 ,并允许他作为root 用户在我们的机器上执行某些命令。
⒈ 打开该sudoers文件,命令如下所示:
visudo
⒉ Sudoers 文件将在vi 中打开,在其中找到“User specification”部分。然后在root 条目之后,按i键插入下面一项:
goodcjh1 cjh = /sbin/ifconfig, /bin/kill,usr/bin/killall
⒊ 这一行的作用是允许用户bob作为root用户来执行命令ifconfig、kill和ls,killall。
⒋ 按下ESC写入并退出文件,然后键入以下命令:
:wq
这个命令利用vi写并退出该文件。说明您必须事先建立一个goodcjh1的用户。
四、运行Sudo
我们已经配置,让它给予用户goodcjh1以超级用户权限来执行ifconfig、kill命令。当bob 要运行这些命令时,他必须键入sudo 命令,并输入其口令。
⒈ 首先作为用户bob登录。
⒉ 找出bob可以作为root用户执行的命令,为此,键入以下命令:
sudo –l
⒊ 如果第一次以用户bob的身份运行sudo 的话,会给出一个警告
这里提示您输入口令,注意,不要输入root用户的口令,而是goodcjh1的口令。
4 下面将列出允许bob在这个主机上运行的各个命令
5 使用sudo命令查看一个网络接口
sudo /sbin/ifconfig pcn0
五、Sudo 命令参数详解
命令格式如下:
sudo -K | -L | -V | -h | -k | -l | -vsudo [-HPSb] [-a auth_type] [-c |-] [-p prompt] [-u username|#uid] {-e [...] | -i | -s | }
下面我们再来看一下sudo其它常用的一些参数:
还有一些不常用的参数,在手册页sudo(8)中可以找到。
六、无需口令的情形
有些情况下,没有必要每次运行sudo时都得输入口令,因为该用户已经登录到系统上了。所以,sudo 为我们提供了一种有效的方法来避免这种单调乏味的任务,办法就是在sudoers 文件中加入NOPASSWD 标签。修改goodcjh1的用户权限规定,如下所示:
goodcjh1 cjh = NOPASSWD: /sbin/ifconfig, /bin/kill, /bin/ls
然后按ESC键,然后键入:wq 来写入并退出文件。
七、Sudo的日志功能
sudo为安全考虑得很周到,不仅可以记录日志,还能在有必要时向系统管理员报告。但是,sudo的日志功能不是自动的,必须由管理员开启。这样来做:
# touch /var/log/sudo# vi /etc/syslog.conf
在syslog.conf最后面加一行(必须用tab分割开)并保存:
local2. /var/log/sudo
重启日志守候,
ps aux | syslogd
把得到的syslogd进程的PID(输出的第二列是PID)填入下面:
kill –HUP PID
这样,sudo就可以写日志了。
小技巧:缺省visudo命令使用vi编辑。 如果你喜欢emacs或者,可以放置对可变的EDITOR环境变量,命令如下:
例如,如果你使用pico编辑,运行bash解释器:
export EDITOR=/usr/bin/pico
csh和 tcsh解释器:
setenv EDITOR /usr/bin/pico editor
总结:通过sudo,我们能把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全的,所以sudo 也能被称为受限制的su ;另外sudo 是需要授权许可的,所以也被称为授权许可的su; sudo 执行命令的流程是当前用户切换到root(或其它指定切换到的用户),然后以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户;而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权。
附录:许可证
The BSD License(BSD)是 License(柏克莱软件发布授权条款)的缩写,许多软件是在此一授权条款下发布的。因为BSD起源自加州大学柏克莱分校,所以最原始发布的BSD拥有者是加州大学董事会。又因一些软件设计师修订BSD的部份内容以做为其软件程序授权使用,造成BSD有多种不同条款内容,统称BSD-style授权条款。最初的BSD是由四个主要条款构成的,其中广告条款的存在让许多后来参与修改原始码的使用者均会将其名字加入声明之中,而遭受计划(GNU Project)的批评:该广告条款造成非常冗长的声明内容,是相当不便利,且易发生使用上困扰而与不兼容。而为了响应Richard Stallman(GNU 计划的主导者与GPL的起草者),BSD的官方主导人William Hoskins遂在一九九九年七月二十二日率先将该广告条款自BSD中删除,也引发其它使用BSD者的跟进,删除广告条款之后的BSD被称为「三条款 BSD」(3-clause BSD),而原本的被称为「四条款BSD」(4-clause BSD)。而BSD与其它授权条款如GPL条款内容相比,是几乎没有限制的,因此是更接近公共领(public domain)的。BSD授权许可证没有实现"通透性"自由,也就是其不保证软件源代码开放的连续性。这样如果你希望采用别人开发的BSD软件,进行一些修改,然后作为产品卖,或者仅仅保密自己的做的一些除了软件开发以外的工作,那么你就可以从中得利。从赚钱为目的的商务角度看来,如果你使用了BSD授权许可证的软件,那么你就可以任意进行。你可以更好地控制你的OS系统,并且防止其他人拷贝你的商业产品。