如何通过 sudo 运行 Gromisofs?

如何通过 sudo 运行 Gromisofs?

每当我尝试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 介质的数据集,可以通过即时生成mkisofsISO9660 布局来间接访问,也可以直接访问要记录预制图像的数据集。在 下执行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 "$@"

但请注意,上述“解决方法”的建议替代方案实际上是安装growisofsset-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,而且对于个人桌面系统来说,它毫无价值。

相关内容