我会尽力解释。在我以前的服务器上,我的朋友设置了一个名为 webslave 的用户。
该用户的主目录是/var/www。当我使用 FISH 协议传输文件(使用 Krusader)时,用户以 webslave@host 身份登录。
例如,当该用户进行更改时,该组始终保持完整的 www-data。
在我的新服务器上,我使用我的用户名 name@host,文件通常归我和我的团队所有。
我想添加一个如上所述的用户,该用户将 www-data 作为主要组,并且无法访问 /var/www 之外的内容。
只是想确保我以正确的方式做到这一点。
很高兴澄清 - 感谢所有帮助 - 提前致谢!
答案1
您不需要新用户,只需确保该组始终为 www-data 即可。您 chmod 实际目录以具有 setgid 位,并且在该目录下创建的所有新文件都将具有 www-data 组。
因此,为了确保您是否需要将文件与您的用户一起放置在那里,它会保留正确的组、运行和 chmod 来设置目录的 setGID。
sudo chgrp www-data /var/www
sudo chmod +g /var/www
http://blog.superuser.com/2011/04/22/linux-permissions-demystified/
至于用户,创建用户后(如 nkts 建议),其中 M 表示不创建主目录,N 选项表示不创建与用户相同的默认组。
sudo useradd -d /var/www/ -g www-data -M -N -s /sbin/nologin user
我会将其设置为 SFTP 而不是 FISH,因为它更安全、可靠且非常灵活。您还必须将其 chroot 到他的 home,以确保他无法访问文件系统的其余部分,并将其限制为内部 sftp。添加到/etc/ssh/sshd_config
Match User user
ChrootDirectory /var/www
ForceCommand internal-sftp
注意:FISH 更像是一种古老的好奇心,是在 SFTP 之前使用的 shell。
如果您仍想在 Ubuntu 中使用 FISH:
sudo apt-add-repository ppa:fish-shell/release-2
sudo apt-get update
sudo apt-get install fish
然后更改用户的shell
chsh -s /usr/bin/fish
我们还必须再次在 /etc/ssh/sshd_config 中强制使用 shell
Match User user
ForceCommand /usr/bin/fish
本文还将为您提供 FISH 方面的帮助
https://hackercodex.com/guide/install-fish-shell-mac-ubuntu/
用 Fish 对 homedir 进行限制应该是可能的,但设置起来更复杂,并且难以执行,因为如果 /var/www 的所有者是 www-data 会更容易。
要设置这样的限制,您至少需要将 /usr/bin/fish 复制到 /var/www 内部(这不是一个好主意),并且 /var/www 和 /usr/bin/fish 属于root(这也会使更改 /var/www 目录的 setGID 的建议无效。
如前所述,SFTP 是一种比 FISH 更现代、更安全的远程仅文件访问方式。
答案2
您可以使用以下命令创建新用户(我假设您使用的是 RHEL 兼容发行版):
# useradd -d /var/www/ -g www-data -M -N -s /sbin/nologin user
我不知道哪个应用程序通过鱼协议提供访问。