devin Asked: 2009-07-07 18:30:11 +0800 CST2009-07-07 18:30:11 +0800 CST 2009-07-07 18:30:11 +0800 CST 编辑 sudoers 文件以限制用户的命令 772 是否可以编辑 sudoers 文件,以便用户可以将 sudo 用于除指定命令之外的任何命令?我相信,我反转是真的,可以设置 sudoers 文件,以便用户只能执行给定的命令列表。 编辑:我真正想带走的命令是停止和重新启动......这让我觉得有特殊的系统调用需要停止和重新启动。你能把系统调用从用户那里拿走吗?如果不是,是不是因为unix权限系统抽象了系统调用而忽略了这一点? linux sudo 9 个回答 Voted Best Answer LapTop006 2009-07-07T18:48:47+08:002009-07-07T18:48:47+08:00 另一种看待它的方式是,如果用户具有很大程度上不受限制的 root 访问权限,他们可以轻松获得完全的 root 访问权限。 虽然您可能能够解决一些问题,但它很容易被规避。 SElinux 虽然是一种可能的方式,但需要大量学习。 Jeremy Viet 2009-07-07T18:40:00+08:002009-07-07T18:40:00+08:00 是和否...您可以通过在文件前面加上一个 bang (!) 来阻止用户运行特定文件,但是您不能阻止用户将文件复制到另一个位置然后从那里运行它。 User_Alias ADMINS = peter, bob, bunny, %operator ADMINS ALL = !/usr/bin/su, !SHELLS 以其他用户身份授予对特定文件的访问权限 pjz 2009-07-07T19:24:11+08:002009-07-07T19:24:11+08:00 为了做你想做的事(让用户窗体运行停止、重启和关机),你将不得不查看 SElinux 的东西以防止用户进行这些系统调用。否则用户将首先运行 /bin/sh,然后运行 /bin/halt 而无需通过 sudo。 Ronald Pottol 2009-07-07T19:45:13+08:002009-07-07T19:45:13+08:00 记录他们通过 sudo 所做的所有事情,大概,你有一些方法可以让你不再这样做。 Defaults logfile=/var/log/sudolog 将记录他们运行的所有命令,谷歌搜索更多信息。 user1686 2009-07-07T23:54:36+08:002009-07-07T23:54:36+08:00 如果用户真的想重启,他会想办法的。sudo -s, sudo -i, sudo $EDITOR /etc/sudoers... 可用于删除您的限制。 在类 Unix 系统上,只要您是 root (uid 0),就可以重新启动系统。如果您确实找到了一种限制这些系统调用的方法,则可以这样做: 用户$ 回声 b | sudo tee /proc/sysrq-trigger 或其变体。或者通过引起内核恐慌来重新启动。或者... 最后,拥有 root 访问权限通常使您能够删除任何现有的限制。 ThorstenS 2009-07-07T18:37:59+08:002009-07-07T18:37:59+08:00 当然,作为 root 调用 visudo 并阻止“用户”运行 /sbin/halt: user ALL=(ALL) NOPASSWD: !/sbin/halt bglick 2009-07-07T18:55:42+08:002009-07-07T18:55:42+08:00 以下行应该让用户“jim”运行除 /usr/bin/kill 和 /usr/bin/su 之外的所有内容。 jim ALL= !/usr/bin/kill,!/usr/bin/su Julien 2009-07-18T14:01:02+08:002009-07-18T14:01:02+08:00 这样做存在风险:通常有多种方法可以执行相同的操作。例如,telnit 6 或 init 6 也会重新启动。可能有一种方法可以强制内核进行核心转储并重新启动。 Wayne 2009-07-07T18:38:33+08:002009-07-07T18:38:33+08:00 这是未经测试的 YMMV,但是如何设置您不想运行的命令的 cmd_list,然后为指定的组/用户使用 !cmd_list 呢? 我无权对此进行测试,只是在Sudoers Manual上在线查看了手册页,因此如果我错了,一些专家会在这里纠正我
另一种看待它的方式是,如果用户具有很大程度上不受限制的 root 访问权限,他们可以轻松获得完全的 root 访问权限。
虽然您可能能够解决一些问题,但它很容易被规避。
SElinux 虽然是一种可能的方式,但需要大量学习。
是和否...您可以通过在文件前面加上一个 bang (!) 来阻止用户运行特定文件,但是您不能阻止用户将文件复制到另一个位置然后从那里运行它。
以其他用户身份授予对特定文件的访问权限
为了做你想做的事(让用户窗体运行停止、重启和关机),你将不得不查看 SElinux 的东西以防止用户进行这些系统调用。否则用户将首先运行 /bin/sh,然后运行 /bin/halt 而无需通过 sudo。
记录他们通过 sudo 所做的所有事情,大概,你有一些方法可以让你不再这样做。
将记录他们运行的所有命令,谷歌搜索更多信息。
如果用户真的想重启,他会想办法的。
sudo -s
,sudo -i
,sudo $EDITOR /etc/sudoers
... 可用于删除您的限制。在类 Unix 系统上,只要您是 root (uid 0),就可以重新启动系统。如果您确实找到了一种限制这些系统调用的方法,则可以这样做:
或其变体。或者通过引起内核恐慌来重新启动。或者...
最后,拥有 root 访问权限通常使您能够删除任何现有的限制。
当然,作为 root 调用 visudo 并阻止“用户”运行 /sbin/halt:
以下行应该让用户“jim”运行除 /usr/bin/kill 和 /usr/bin/su 之外的所有内容。
这样做存在风险:通常有多种方法可以执行相同的操作。例如,telnit 6 或 init 6 也会重新启动。可能有一种方法可以强制内核进行核心转储并重新启动。
这是未经测试的 YMMV,但是如何设置您不想运行的命令的 cmd_list,然后为指定的组/用户使用 !cmd_list 呢?
我无权对此进行测试,只是在Sudoers Manual上在线查看了手册页,因此如果我错了,一些专家会在这里纠正我