【问题标题】:Bash Scripting - How to set the group that new files will be created with?Bash 脚本 - 如何设置创建新文件的组?
【发布时间】:2010-11-22 05:06:05
【问题描述】:

我正在编写一个 bash shell 脚本,我想更改创建新文件的默认组。我知道您使用umask 更改权限。有什么适合小组的吗?

【问题讨论】:

    标签: linux bash unix shell permissions


    【解决方案1】:

    newgrp 命令用于在登录会话期间更改当前组 ID。

    在该会话中创建的新目录将具有该命令设置的组 ID。

    newgrp(1)

    【讨论】:

    • 我是该组的成员,为什么它要我输入密码?它不喜欢我的密码!
    • 另外,如果我以 root 身份运行“newgrp ”(例如,使用 sudo 运行带有 newgrp 的脚本),它会将我转储到 root shell。
    • 这不是 newgrp 的用途。如果您忘记在脚本之外使用 newgrp 会发生什么?脚本将如何处理 newgrp 创建的新 shell。 @mark40 的回答更好。
    • 这真的被认为是一个答案吗?这是一个链接。
    • 忍不住点赞,因为这是有趣的信息。我仍然认为@mark4o 的答案应该是正确的。
    【解决方案2】:

    有几种方法可以做到这一点:

    1. 您可以更改在特定文件中创建的所有文件的默认组 通过在目录上设置 setgid 标志 (chmod g+s <dir>)。 然后,目录中的新文件将使用 目录(使用chgrp <group> <dir> 设置)。这适用于任何程序 在目录中创建文件。

      请注意,对于新的子目录,这是自动继承的(从 Linux 3.10)。但是,如果子目录已经存在,则此更改 不会应用于他们。假设子目录已经有正确的 组,可以将 setgid 标志添加到其中: find . -type d -exec chmod g+s {} \;(由 cmets 中的 Maciej Krawczyk 建议)

    2. 如果未设置 setgid 标志,则默认组将设置为当前 创建过程的组 id。虽然这可以使用newgrp 进行设置 命令,它创建了一个难以在 shell 中使用的新 shell 脚本。如果要执行特定命令(或一组命令) 对于更改后的组,使用命令sg <group> <command>

      sg 不是 POSIX 标准命令,但在 Linux 上可用。

    【讨论】:

    • 只是一个小笔记。如果您尝试在具有组 y 的目录上运行 chmod g+s _dir_,并且您在用户 x 下运行命令,并且用户 x 不是组 y 的成员,它将无法工作。您必须以 root 身份运行它。
    • @LEDfan 啊!优秀的提示/点!最后一部分(用户必须是该组的成员才能工作)是我过去一直努力让它工作的一个原因。谢谢!
    • 不要使用 chmod -R 您将对产生安全问题的文件应用 setgid(可执行文件将始终以组所有者身份运行,无论谁运行它)。使用它来仅将其应用于目录find . -type d -exec chmod g+s {} \;
    猜你喜欢
    • 2020-05-05
    • 2013-01-19
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多