【问题标题】:Linux Set User and Group Ownership for Future Files and FoldersLinux 为未来的文件和文件夹设置用户和组所有权
【发布时间】:2015-10-31 09:34:18
【问题描述】:

我正在使用以下命令更改用户和组所有权:

sudo chown -R apache:www /var/www

但是,我注意到每当我向该目录添加新文件或文件夹时,所有者将是我当前的用户名,而不是预期用户 apache。如何修改上述命令,以便将来所有的文件夹和文件都归 apache:www 所有?还是我需要使用额外的命令?

【问题讨论】:

    标签: linux permissions filesystems file-permissions ownership


    【解决方案1】:

    我的猜测是您需要在执行命令之前更改用户 - 类似这样的脚本:

    $whoami
    user1
    $ su - apache
    Password:
    $ whoami
    apache
    [add file]
    $ exit
    

    【讨论】:

    • 有没有办法自动设置,这样我就不需要切换用户名了?
    【解决方案2】:

    您可以使用 ACL 来执行此操作。例如:

    $ ls -ld /var/www
    drwxr-xr-x 2 apache www 4096 Aug  7 13:53 /var/www
    
    $ sudo setfacl -dRm u:apache:rwX,g:www:rwX /var/www
    
    $ ls -ld /var/www
    drwxr-xr-x+ 2 apache www 4096 Aug  7 13:53 /var/www
    
    $ getfacl /var/www
    # file: var/www
    # owner: apache
    # group: www
    user::rwx
    group::r-x
    other::r-x
    default:user::rwx
    default:user:apache:rwx
    default:group::r-x
    default:group:www:rwx
    default:mask::rwx
    default:other::r-x
    

    当在那里创建新文件时,它们仍将归您的用户所有,但也会在其上设置 ACL,授予 apache 用户权限:

    $ touch donkey
    $ ls -l donkey
    -rw-rw-r--+ 1 gene gene 0 Aug  7 13:57 donkey
    
    $ getfacl donkey
    # file: donkey
    # owner: gene
    # group: gene
    user::rw-
    user:apache:rwx               #effective:rw-
    group::rwx                      #effective:rw-
    group:www:rwx              #effective:rw-
    mask::rw-
    other::r--
    

    命令概述:

    setfacl -dRm u:apache:rwX,g:www:rwX /var/www
    
    • -d 标志指定应用于默认 ACL 的操作。
    • -R 标志将操作设置为递归应用
    • -m 表示这将是一个修改操作

    然后就很简单了

    • u:USERNAME:权限
    • g:GROUPNAME:权限

    这些条目必须用逗号分隔。

    X 权限(注意:它是大写的)意味着它只会应用于目录而不是文件。

    【讨论】:

      【解决方案3】:

      您可以通过使用chmodSETGID(SET 组 ID)标志在组级别上实现这一点:

      chmod g+s <group> <directory>
      

      设置后,&lt;directory&gt; 中新创建的文件和目录将设置为 &lt;group&gt;。例如

      chmod g+s www /srv/www
      

      将导致/srv/www 中新创建的文件和目录拥有www 组。

      您可以通过执行ls -al 来验证这一点,这将显示s 对目录的组“执行”权限。例如

      drwxr-sr-x.   5 apache www       4096 Mar 13 20:32 www
            ^
          SETGIT
      

      【讨论】:

      • 这是一个错误的命令。第三个参数应该是一个文件夹。
      • @SBimochan 我是&lt;directory&gt; - 你能解释一下你的意思吗?
      猜你喜欢
      • 2018-02-26
      • 2020-11-08
      • 2012-03-04
      • 1970-01-01
      • 2011-12-18
      • 2011-05-15
      • 1970-01-01
      • 2018-09-01
      • 2013-12-22
      相关资源
      最近更新 更多