我正在运行 Ubuntu 22.04.3,并通过 SSHD 配置 sFTP 服务器。我有几个用户主目录,每个目录中都有一个投递文件夹和一个拾取文件夹。虽然我的管理员用户能够导航服务器并查看任何目录的内容。管理员无法在其他用户目录中添加或删除任何文件。上述取件和寄件目录归 root 所有,该组标记为“sftp”。该 sftp 组包含我希望访问我的服务器并拾取/放下文件的所有用户。我的管理员用户不属于 sftp 组。当我将管理员添加到 SFTP 组时,我无法再以管理员身份访问服务器。当管理员不属于该组时,我可以访问服务器,但无法从属于 sftp 组的目录添加/删除文件。
我的sshd.conf如下:
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
PasswordAuthentication yes
Match group sftp
ChrootDirectory /home/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
任何指导将不胜感激。
编辑1:
ls -ld pickup
节目drwxrwxr-x 2 root sftp 4096 Dec 18 16:22 pickup
编辑2:
我正在使用 WinSCP 和 FileZilla 连接到服务器。我有一个不熟悉终端使用的用户,需要向客户端发送文件或从客户端发送文件。此管理员帐户当前可以查看服务器上的所有文件,但无法添加或删除任何文件(例如 .xlsx)。我不会向没有终端经验或不了解 SFTP 是什么的人提供对服务器的完全访问和控制。那将是不明智的。我想做的是为自己创建一个帐户进行测试。这样我就知道在将该帐户授予我的用户之前应授予该帐户哪些权限和属性。
目前,该帐户可以查看诸如 等目录中的文件,/home/client1/dropoff
但无法从 dropoff 目录中添加或删除文件。我需要该帐户能够导航/home/
并进入所有客户端目录和子目录,并随意添加或删除文件。目前我的客户端用户只能访问他们的主目录/client1/
和相应的子目录。他们可以毫无问题地添加或删除文件,因为客户帐户是“sftp”组的成员,子目录也是如此。
我尝试将此管理员帐户添加到 sftp 组,但是当我这样做时,我无法再通过 WinSCP 或 FileZilla 连接到服务器。我尝试在 WinSCP 中将 SFTP 环境设置的协议选项从“默认”更改为“sudo su -c /bin/sftp-server”,但这给了我一个错误,Cannot initialize SFTP protocol. Is the host running an SFTP server?
我知道这是因为当我检查服务器和协议时信息文件传输协议标记为“SFTP-3”。
我的管理员帐户所属的组如下:
sudo adm cdrom dip plugdev lxd ftpadmin
答案1
根据评论,您所说的“管理员用户”应该被称为“FTP/SFTP 看门用户”之类的东西。
您应该为此目的创建一个组,并进行两个都“管理员用户”以及具有该组的接送目录成员的用户。
该sftp
组不适合此目的,因为文件Match
中的子句sshd_config
将该组的成员限制为其主目录和仅 SFTP 访问。显然,您不希望这种情况发生在“管理员用户”身上,因为他们将无法完成管理接送目录的工作。
上车/下车目录应由相应的用户拥有,并chgrp
添加到这个新组。然后,您应该将 a 设置chmod g+swx
为拾取/投递目录:这将导致拾取/投递用户放入的任何新文件都具有新组的组所有权,并且将允许新组的成员可以访问该目录(即接送用户本身和管理员用户)读/写访问权限。
管理员用户应该是新组的成员,但不是该sftp
组的成员。
以这种方式设置权限后,您可以从任何不精通命令行的管理员帐户中删除强大的组成员身份sudo
。adm
如果您想限制管理员用户只能访问 SFTP(因为您说他们不熟悉命令行),那么您可以为管理员用户编写一个新Match
块sshd_config
,位于后块Match group sftp
:
Match group <new group>
X11Forwarding no
AllowTCPForwarding no
ForceCommand internal-sftp
这可以防止使用管理员用户帐户进行命令行访问,使其成为严格基于 SFTP 的取件/寄件目录管理帐户。由于此设置基于组成员身份,因此您稍后可以通过简单地创建用户并将其添加到这个新组来添加新的接送管理员帐户。