如何通过sudo运行growisofs?

slm*_*slm 4 permissions sudo

每当我尝试通过运行时growisofssudo我总是收到以下错误消息。

$ 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.
Run Code Online (Sandbox Code Playgroud)

这导致我不得不做一个sudo su -跟着growisofs.

$ sudo su - -c growisofs
growisofs: previous "session" device is not specified, do use -M or -Z option

-or-

$ sudo su -
# growisofs ...
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以做到这一点而不必这样做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 "$@"
Run Code Online (Sandbox Code Playgroud)

但请注意,上述“解决方法”的推荐替代方案实际上是安装growisofsset-root-uid,在这种情况下,它会在访问数据或执行之前放弃特权mkisofs,以防止对数据进行未经授权的访问。

phe*_*mer 6

什么growisofs是这里做的是寻找的SUDO_COMMAND环境变量,如果变量发现中止。有效的原因sudo su -是因为su -清除了环境。

您可以执行以下操作,而不必获得完整的外壳:

sudo env -i growisofs
Run Code Online (Sandbox Code Playgroud)

这将擦除环境,就像su -. 唯一的区别是,su -它还会将基本变量(in/etc/profile等)放回原处,而env -i不会(完全空的环境)。

更精确的解决方案是:

sudo env -u SUDO_COMMAND growisofs
Run Code Online (Sandbox Code Playgroud)

这将保护环境,除了SUDO_COMMAND.