![通过 SSH 正确设置用户权限](https://linux22.com/image/682220/%E9%80%9A%E8%BF%87%20SSH%20%E6%AD%A3%E7%A1%AE%E8%AE%BE%E7%BD%AE%E7%94%A8%E6%88%B7%E6%9D%83%E9%99%90.png)
我在 LAMP 堆栈上遇到用户权限问题(如果重要的话,使用 Digital Ocean)。这是我的设置。
用户dev
有以下组:
dev www-data
该/var/www
文件夹已设置所有者为www-data:www-data
,如下所示:
drwxrwxr-x 3 www-data www-data 4096 Mar 30 17:41 www
如果我使用dev
用户通过 sftp 接入,一切看起来都很好,但如果我随后上传文件,新文件的所有权为dev:dev
。
当我有一个名为 的新用户dev2
也在同一目录中工作时,这就会成为一个问题,因为他们无法删除或覆盖属于 的文件dev
。
不幸的是,我与用户打交道的经验仅限于使用 cPanel,在那里我可以创建多个 FTP 用户,而不存在此访问/重叠问题。我如何通过终端做到这一点?
答案1
目录上的位g+s
将强制使用父目录组(BSD 样式),而不是默认的进程组(SysV 样式)。因此,类似
chmod g+s /var/www
(以及任何子目录)应该会导致www-data
在创建新文件时保留该组。另一个选项可能是使用所谓的 POSIX acl(请参阅setfacl(1)
),虽然更复杂,但可以允许多个组访问文件。(无论如何,您最终可能会使用一些 cron 作业来审核/设置权限,或者配置管理也可以在目录树上强制执行权限,这取决于您想要解决的麻烦程度。)