我想设计一条 sudo 规则,允许用户ricardo
使用 更新系统aptitude
,但阻止他使用 sudo 运行任何其他命令(他是个问题用户)。这条规则中是否存在我遗漏的缺陷?
ricardo ALL=(root) /usr/bin/aptitude
Ricardo 只使用aptitude
,而不是apt-get
。另外,我目前没有在任何地方安装 Ubuntu,所以我知道这/usr/bin/aptitude
可能不是允许的正确文件。
如果这条规则存在缺陷,我该如何改进它?
答案1
此命令将限制用户使用aptitude
除更新存储库缓存和执行系统安全升级之外的任何操作。
ricardo ALL=(root) /usr/bin/aptitude update, /usr/bin/aptitude safe-upgrade
类似的命令将允许用户执行完整升级,但仅此而已:
ricardo ALL=(root) /usr/bin/aptitude update, /usr/bin/aptitude full-upgrade
每aptitude 文档(10.04),safe-upgrade
:
将已安装的软件包升级到最新版本。除非未使用,否则不会删除已安装的软件包
相比之下,full-upgrade
:
将已安装的软件包升级到最新版本,根据需要删除或安装软件包。此命令不像 safe-upgrade 那样保守,因此更有可能执行不必要的操作。但是,它能够升级 safe-upgrade 无法升级的软件包。
尽你所能判断用户应该被允许运行哪个。如果你不确定,请使用第一条规则,该规则仅允许safe-upgrade
。
请注意,如果您想允许用户安装软件包(这大大降低了对安全性的任何好处,但只是假设),则需要在命令*
后添加一个aptitude
,即
ricardo ALL=(root) /usr/bin/aptitude update, /usr/bin/aptitude safe-upgrade, /usr/bin/aptitude install *
否则,您将收到一条错误消息,提示用户ricardo
无权运行该命令/usr/bin/aptitude install <package_name>
。
答案2
您可以使用它sudo -l
来查看用户可以运行哪些命令。例如,查看 ricardo 可以运行哪些命令:
sudo -ll -U ricardo
看看他是否能跑得快,
sudo -ll -U ricardo /usr/bin/aptitude
这将打印由 sudo 扩展的命令名称,或者如果用户无权使用该命令则以代码 1 退出。
这应该可以在任何最新的基于 debian 的系统上运行,以供您测试;该语法不是 Ubuntu 特有的。
来源:男人须藤
答案3
我什么也看不见错误的sudo
用那行 sudoers。不幸的是,我并没有对 的配置设置进行过多的调整,因此在这种情况下,我的建议可能并不可靠。幸运的是,我能给你一条我知道是安全的线路:
ricardo ALL=/usr/bin/aptitude
这一行保证只让 ricardoaptitude
以 root 身份执行,只要 ricardo 不是启用 sudo 的组的成员,例如sudo
或admin
。