用户访问 FTP 并同时将 www-data 设置为所有者/组

Rob*_*Rob 5 permissions ftp apache2

为了让 WordPress 能够读/写文件/文件夹的所有者必须是 www-data。

现在的问题是,如果所有者是组文件传输的 www-data (www-data:filetransfer),则 FTP 用户 ftpclient1 可以登录,但没有对设置为 www-data:filetransfer 的文件夹的写入权限,因为他不是所有者。

我怎样才能做到这一点?

Rob*_*Rob 7

Tom 因ServerFault 上发表的这篇文章而值得获得一枚奖牌

按照他解释的方式设置组 ID 就可以了!

尝试扩展 @Zoredache 的答案,因为我自己尝试了一下:

  • 创建一个新组 (www-pub) 并将用户添加到该组

    groupadd www-pub 
    usermod -a -G www-pub usera    # must use -a to append to existing groups
    usermod -a -G www-pub userb
    groups usera    ## display groups for user
    
    Run Code Online (Sandbox Code Playgroud)
  • 将 /var/www 下所有内容的所有权更改为 root:www-pub

    chown -R root:www-pub /var/www    # -R for recursive
    
    Run Code Online (Sandbox Code Playgroud)
  • 将所有文件夹的权限改为2775

     chmod 2775 /var/www 
    
    Run Code Online (Sandbox Code Playgroud)

    2=设置组ID,7=rwx所有者(root),7=rwx组(www-pub),5=rx世界(包括apache www-data用户)

    设置组 ID ( SETGID ) 位 (2) 会导致组 (www-pub) 被复制到在该文件夹中创建的所有新文件/文件夹。其他选项包括用于复制用户 ID 的 SETUID (4) 和我认为仅允许所有者删除文件的 STICKY (1)。

    有一个-R递归选项,但不会区分文件和文件夹,因此您必须使用 find,如下所示:

    find /var/www -type d -exec chmod 2775 {} +
    
    Run Code Online (Sandbox Code Playgroud)
  • 将所有文件更改为0664

    find /var/www -type f -exec chmod 0664 {} +
    
    Run Code Online (Sandbox Code Playgroud)
  • 将用户的 umask 更改为 0002

    umask 控制默认的文件创建权限,0002 意味着文件将有 664 个,目录有 775 个。设置此项(在我的例子中通过编辑umask底部的行/etc/profile)意味着一个用户创建的文件将可由 www- 中的其他用户写入。无需chmod他们即可进行分组。

通过创建文件和目录并使用ls -l.

注意:您需要注销/登录才能使对组的更改生效!