我想仅在 /var/www/ 目录(包括所有子目录)中创建一个具有读/写权限的新用户。 /var/www/ 属于一个名为 www-data 的组织。
我想最好的方法是使用 SFTP。我已经以 root 身份拥有 SSH 访问权限。有关限制 SFTP 访问的许多其他答案都与 /home/ 目录相关,并且需要将目录的所有权更改为 root,我不知道在 www 目录上也这样做是否是一个好主意。
答案1
您可以创建一个用户,将其主目录设置为 /var/www/ 并将其添加到 www-data 组。如果您希望他将创建的文件属于 www-data 组,则必须将“s”位添加到 www 目录的 mod 中。
# useradd -m /var/www -g www-data
# chmod g+s /var/www
或者我误解了这个问题?也许您希望该用户无法读取任何其他目录?在这种情况下,你可以chroot
他:
http://how-to.linuxcareer.com/how-to-automatically-chroot-jail-selected-ssh-user-logins
如果您想使用 SFTP:https://bensmann.no/restrict-sftp-users-to-home-folder/
答案2
更好的方法是使用 sshd 和 sftp 子系统的 chroot 功能。
给定一个DocumentRoot
设置/var/www-sites/example.com/html
创建一个组,命名为“chrootwebusers”
root@hostname:~# addgroup chrootwebusers
添加用户并设置他们的主目录和一些其他选项 -
useradd -g chrootwebusers -d /var/www-sites/example.com -s /bin/false theusername
mkdir -p /var/www-sites/example.com/html
chown theusername.www-data /var/www-sites/example.com
chmod -R 750 /var/www-sites/example.com
chmod g+s /var/www-sites/example.com
passwd theusername
theusername
这将在您的组中添加以组成员身份命名的用户chrootwebusers
,其主目录为 /var/www-sites/example.com 并对其下面的所有内容具有读/写访问权限。
该chmod g+s /var/www-sites/example.com
作品的所有者为 www-data 组。在目录上使用该setgid
位可以使在其中创建的任何新文件/目录保持与该example.com
目录相同的组所有权。这意味着网络服务器运行的用户始终能够读取文件(请注意这一点!)
接下来,编辑该/etc/ssh/ssdh_config
文件。细化指定 sftp 子系统的行并将其注释掉 -
#Subsystem sftp /usr/lib/openssh/sftp-server
并添加对内部到 sshd sftp 子系统的引用
Subsystem sftp internal-sftp
最后在文件底部添加
Match Group chrootwebusers
ChrootDirectory /var/www-sites
ForceCommand internal-sftp -u 0027
那么...这一切是如何运作的?内部 sftp子系统sshd
等待具有组成员身份的人员登录chrootwebusers
。当这种情况发生时,它会 chroot 他们,这样你所看到的就像/var/www-sites
他们所看到的一样/
。他们将能够看到 example.com 目录,并更改为该目录并读取/写入其中和目录中的文件DocumentRoot
-/var/www-sites/example.com/html
但他们会将其全部视为/example.com/html
.该-u 0027
选项设置 umask,以便创建的任何新文件/目录都将具有 640/750 权限,而setgid
我们之前使用的技巧将使拥有用户theusername
和拥有组成为用户www-data
(记住有关网络服务器能够读取所有文件/目录的信息)文件)