sftp 登录到指定目录
修改 sshd 配置: /etc/ssh/sshd_config
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp #修改为internal-sftp
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server
Match User test
ChrootDirectory /sftpdata/test
X11Forwarding no
AllowTcpForwarding no
PermitTTY no
ForceCommand internal-sftp #指定sftp命令,ssh不可以登录
Match Group sftpgroup
ChrootDirectory /sftpdata/%u
X11Forwarding no
AllowTcpForwarding no
PermitTTY no
ForceCommand internal-sftp
Match Group sftpgroup #匹配 sftpgroup 组
ChrootDirectory /data/sftp/%u #设定属于用户组 sftpgroup 的用户访问的根文件夹。%h 代表用户 home 目录,%u 代表用户名。
ForceCommand internal-sftp # 该行强制执行内部 sftp
AllowTcpForwarding no # 是否允许 TCP 转发
X11Forwarding no # 是否允许进行 X11 转发。
ChrootDirectory 目录权限:
ChrootDirectory 设置的目录权限及其所有的上级目录权限,属主和属组必须是 root,权限最大为 755
创建 sftp 用户
指定 sftp 的根目录,并不能登录
# 创建 sftpgroup 组
groupadd sftpgroup
# 创建 user1 用户
useradd user1 -g sftpgroup -d /sftpdata/user1 -s /sbin/nologin
passwd user1
# 创建 其他用户等
useradd otheruser -g sftpgroup -d /sftpdata/otheruser -s /sbin/nologin
passwd otheruser
用户不能登录,但有自己的 shell家目录,并能 su 切换
# 正常创建一个用户
adduser tt
usermod tt -g sftpgroup
因为ForceCommand internal-sftp
限制了只能 sftp,不能登录,但用户是可以 su 切换。
创建 sftp 的根目录,并设置对应权限
当 ChrootDirectory
的所有者是 root
且权限设置为 755
时,非特权用户(如 SFTP 用户)在该目录中无法创建新目录或文件。这是因为权限 755
意味着只有目录的所有者(即 root
)可以写入。
如果你希望 SFTP 用户能够创建目录或上传文件,你需要在 ChrootDirectory
的某个子目录中给予该用户写权限。
以 user1 用户为例,以下是具体的步骤:
-
创建用户可写的子目录:
-
使用
root
权限在/sftpdata/user1
内创建一个子目录,比如uploads
。 -
更改子目录的所有者,使其属于特定的 SFTP 用户(如
mkdir /sftpdata/user1/uploads chown user1:user1 /sftpdata/user1/uploads chmod 777 /sftpdata/oasis/uploads # 或者根据需要设成 777
-
-
用户操作:
- 当用户连接到 SFTP 并进入到
uploads
目录时,他们应该可以创建目录和文件,因为他们在这个子目录下有写权限。
- 当用户连接到 SFTP 并进入到
Comments