每当我尝试growisofs
通过运行时sudo
,我总是收到以下错误消息。
$ sudo -i growisofs
:-( growisofs is being executed under sudo, aborting!
See NOTES paragraph in growisofs manual page for further details.
$ sudo -s growisofs
:-( growisofs is being executed under sudo, aborting!
See NOTES paragraph in growisofs manual page for further details.
这导致我不得不做一个sudo su -
随后的growisofs
.
$ sudo su - -c growisofs
growisofs: previous "session" device is not specified, do use -M or -Z option
-or-
$ sudo su -
# growisofs ...
有没有其他方法可以做到这一点而不必这样做su -
?
背景
此行为内置于工具中growisofs
,以阻止以提升的权限访问文件系统。
摘抄
笔记
如果执行下
sudo(8)
growisofs
拒绝启动。这样做的原因如下。当然,growisofs
必须访问要记录到 DVD 介质的数据集,可以通过即时生成mkisofs
ISO9660 布局来间接访问,也可以直接访问要记录预制图像的数据集。在 下执行sudo(8)
,growisofs
有效地授予 sudoers 对文件系统中任何文件的读取权限。事实上,growisofs 解析MKISOFS
环境变量以确定 mkisofs 可执行映像的替代路径,这一事实加剧了这种情况。这意味着在 下执行sudo(8)
,growisofs 有效地授予 sudoers 以提升的权限执行他们选择的程序的权利。如果您出于某种原因仍然认为上述内容可以接受并且愿意承担后果,那么请考虑就地运行以下包装器脚本sudo(8)
以获取真正的growisofs
二进制文件。#!/bin/ksh unset SUDO_COMMAND export MKISOFS=/path/to/trusted/mkisofs exec growisofs "$@"
但请注意,上述“解决方法”的建议替代方案实际上是安装
growisofs
set-root-uid,在这种情况下,它将在访问数据或执行之前放弃特权,mkisofs
以防止对数据进行未经授权的访问。
答案1
这里所做的growisofs
是查找SUDO_COMMAND
环境变量,如果找到该变量则中止。有效的原因sudo su -
是因为su -
净化了环境。
您可以执行以下操作,而不必获取完整的 shell:
sudo env -i growisofs
这将擦除环境,就像su -
.唯一的区别是,它还su -
会将基本变量(/etc/profile
诸如此类)放回原处,而env -i
不会(完全空的环境)。
更精确的解决方案是:
sudo env -u SUDO_COMMAND growisofs
这将保护环境,除了SUDO_COMMAND
。
答案2
chmod u+s /usr/bin/growisofs solves this problem.
但这是“错误方法”的一个很好的例子,因为它破坏了所提供的安全性sudo
。 SetUIDgrowisofs
带来了比仔细配置更严重的安全问题sudo
,而且对于个人桌面系统来说,它毫无价值。