【问题标题】:Default user for files and directories created in bash under sudo在 sudo 下在 bash 中创建的文件和目录的默认用户
【发布时间】:2014-06-13 19:28:59
【问题描述】:

我正在编写一个在 Mac OSX 下创建目录和复制文件的 bash 脚本。其中一些目录和文件需要放在系统拥有的文件夹中,例如/Library/Audio/Plug-Ins,所以我在sudo下运行脚本。这样的脚本可能看起来像:

复制插件.sh:

#!/usr/bin/env bash
mkdir -p /Library/Audio/Plug-Ins/My-Plugins
cp plugin-A.dylib /Library/Audio/Plug-Ins/My-Plugins
cp plugin-B.dylib /Library/Audio/Plug-Ins/My-Plugins

并调用:

$ sudo ./copy-plugins.sh

但是在 sudo 下运行时,所有创建的目录和复制的文件都归 root 所有。

我希望能够在 sudo 下运行脚本并将文件归我的用户所有。 在创建或复制每个文件/目录后,我可以调用 chown

copy-plugins-cumbersome.sh:

#!/usr/bin/env bash
mkdir -p /Library/Audio/Plug-Ins/My-Plugins
chown 501:501 /Library/Audio/Plug-Ins/My-Plugins

cp plugin-A.dylib /Library/Audio/Plug-Ins/My-Plugins
chown 501:501 /Library/Audio/Plug-Ins/My-Plugins/plugin-A.dylib

cp plugin-B.dylib /Library/Audio/Plug-Ins/My-Plugins
chown 501:501  /Library/Audio/Plug-Ins/My-Plugins/plugin-B.dylib

但我希望有一个更通用的解决方案。

据我所知,bash 没有 setuid。

【问题讨论】:

    标签: macos bash permissions sudo setuid


    【解决方案1】:

    使用cp -p 选项保留文件属性。

    请注意,这将保留用户、组权限文件的修改和访问时间。

    【讨论】:

    • 使用 cp -p 创建带有 _unknown 用户和组的文件:` -rwxr-xr-x 1 _unknown _unknown 0 4 月 28 日 12:43 plugin-A.dylib` ` -rwxr-xr-x 1 _unknown _unknown 0 4 月 28 日 12:43 plugin-B.dylib` 奇怪....
    • 似乎无法从 bash 脚本中设置 uid,所以我接受这个答案,尽管它只是部分回答了这个问题。谢谢!
    • 嗨 - 如果它有助于您可以从 sudo 设置 uid:sudo -u 501 your-script.sh
    【解决方案2】:

    由于您需要 sudo 复制到脚本中要复制到的目录,这意味着您需要成为 root 才能复制这些目录中的任何内容。

    当您执行sudo 时,您是该特定命令或脚本的 root,因此将创建或执行的任何内容都将具有 root 权限。直到您指定的时间。

    在不改变任何东西的情况下摆脱它的可能方法:

    1. 你正在使用的那个,和
    2. 另一个使用-p-acp
    3. rsync -go <source file> <destination file>

      -g 用于保留组和 -o 用于保留所有权。

    注意如果您在脚本之外执行chown,则必须专门执行sudo chown,因为您要接触的文件属于root。

    【讨论】:

    • 对每个命令执行 chown 要求我事先知道用户的 uid。这使我无法创建可供所有用户使用的通用脚本。
    • no 做 chown 用户不需要知道,你可以使用 id -u 作为用户 ID 和 id -g 作为 groupid。此外,我已将 rsync 添加为 sol,检查它是否适合您。他们都在为我工作。
    • 使用 rsync -go 比 chown 更好,因为它不需要用户特定的自定义。然而,即使使用 rsync 复制的文件,也会得到 _unknown 用户和组。
    猜你喜欢
    • 2010-10-09
    • 1970-01-01
    • 2013-09-25
    • 2020-05-21
    • 2013-05-14
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多