Bash Scripting - 如何设置将使用新文件创建的组?

Ror*_*ory 68 unix linux permissions bash shell

我正在做一个bash shell脚本,我想更改创建新文件的默认组.我知道你umask用来改变权限.这群人有什么东西吗?

mar*_*k4o 168

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

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

    请注意,这是自动继承的新子目录(从Linux 3.10开始),但是,如果子目录已经存在,则此更改将不会应用于它们(使用该-R标志).

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

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

  • 只是一个小小的音符.如果您尝试在具有组y的目录上运行`chmod g + s _dir_`,并且您在用户x下运行命令,并且用户x不是组y的成员,则它将不起作用.你必须以root身份运行它. (10认同)
  • 不要使用 chmod -R 您将对文件应用 setgid,这会产生安全问题(可执行文件将始终以组所有者身份运行,无论谁运行它)。使用它来将其仅应用于目录“find”。-type d -exec chmod g+s {} \;` (4认同)

moo*_*dow 12

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

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

newgrp(1)

  • 这真的被认为是一个答案吗?这是一个链接. (16认同)