SSH访问和控制

有没有一种理想的方式来限制访问服务器pipe理员,他们可以做什么,不能用sudo做什么? 我希望从基本的命令行动到更高级的能力,比如服务控制。 我也不希望他们有能力触摸根或编辑日志。

我正在运行带有CPanel的CentOS 6。

您可以使用命令别名来允许或禁止此类操作,例如:

Cmnd_Alias OPS = /usr/sbin/shutdown,\ /usr/sbin/reboot,\ /bin/su,\ /bin/sh,\ /bin/csh %dev ALL = (ALL:ALL) ALL, !OPS 

基本上, %dev代表开发组的任何部分,可以做任何事情,像任何用户一样,EXCEPT OPS提供了你不希望它们作为sudo运行的命令列表。

或者,您可以创build自己的Cmnd_Alias,并执行%dev ALL=OPS以允许仅使用列出的操作。

您可以为每个用户定义单独的允许的sudo命令。 例如,不是给他们所有的命令,我们可以给一个特定的用户称为testing权限,以sudo重新启动web服务器:

 testing ALL=/etc/init.d/httpd restart 

(这应该在你的sudoers文件中)

除了sudo之外,你可以编写脚本来处理suid位设置(不一定是suid root,也可以是suid www-data甚至suid nobody),并且设置组执行位,并允许用户将它们添加到合适的组中拥有有问题的脚本。

sudo更好,因为它留下了详细的审计线索,并且可以非常灵活,但sudoers(5)手册页相当人性化,并且充满了Backus-Naur意大利面条。 而且sudo往往会抛出并停止处理/ etc / sudoers中的任何语法错误,所以你最好在设置sudoers文件的时候为自己设置一个真正的root密码,否则你可能会发现自己被sudo破坏了。

sudo或不sudo ,在devise脚本,parsing命令行参数,写入pipe理员可控文件时要非常小心。

举一个例子,让我们想象一下你有一个在特权帐户(root或者其他)下被调用的脚本,并且通过截断(>)来写入一个文件,你的pipe理员可以使用一个符号链接来replace你指定的地方。

另一个例子,编辑/ etc / network / interfaces(或者在你的发行版中的一个模拟)然后ifuping一个接口可能看起来是无辜的,但是有前/后/上/下脚本作为根被调用。 哎呀。