groupadd sftp useradd -g sftp -M -s /sbin/nologin mysftp passwd mysftp mkdir -p /data/sftp/mysftp usermod -d /data/sftp/mysftp mysftp chown root:sftp /data/sftp/mysftp chmod 755 /data/sftp/mysftp mkdir -p /data/sftp/mysftp/test chown -R mysftp:sftp /data/sftp/mysftp/test chmod 755 -R /data/sftp/mysftp/test vi /etc/ssh/sshd_config 将Subsystem sftp /usr/libexec/sftp-server 注释掉 在文件末尾添加以下几行 Subsystem sftp internal-sftp Match Group sftp X11Forwarding no AllowTcpForwarding no ChrootDirectory /data/sftp/mysftp ForceCommand internal-sftp systemctl restart sshd.service
时间: 2025-07-23 08:51:40 浏览: 7
### 配置 SFTP 用户及 Chroot 环境
要配置 SFTP 用户及 Chroot 环境,需完成以下步骤:创建用户、设置目录权限、修改 `sshd_config` 文件并重新加载 SSH 服务。
---
### 创建 SFTP 用户
1. 创建一个专门用于 SFTP 的用户组(如 `sftp_users`):
```bash
groupadd sftp_users
```
2. 创建一个新用户并将其加入 `sftp_users` 组:
```bash
useradd -m -G sftp_users -s /sbin/nologin sftpuser
```
3. 为该用户设置密码:
```bash
passwd sftpuser
```
4. 确保用户的主目录存在且权限正确。例如,如果主目录为 `/home/sftpuser`,请确保其所有权和权限如下:
```bash
chown root:root /home/sftpuser
chmod 755 /home/sftpuser
```
5. 在主目录下创建一个子目录,供用户实际上传文件使用:
```bash
mkdir /home/sftpuser/upload
chown sftpuser:sftp_users /home/sftpuser/upload
chmod 755 /home/sftpuser/upload
```
---
### 修改 `sshd_config` 文件
1. 在修改 `sshd_config` 文件前,建议先备份该文件:
```bash
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
```
2. 编辑 `/etc/ssh/sshd_config` 文件,并添加或修改以下内容:
```
Subsystem sftp internal-sftp
Match Group sftp_users
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
```
3. 确保 `ChrootDirectory` 指向用户的主目录(`%h` 表示用户的主目录),并且主目录的所有者不能是 SFTP 用户本身,通常设置为 `root`。用户实际可操作的目录应为主目录下的子目录,如 `/home/sftpuser/upload`。
---
### 重启 SSH 服务
1. 修改完成后,重新加载 SSH 服务以应用新配置:
```bash
systemctl reload sshd
```
---
### 验证配置
1. 使用 SFTP 客户端尝试连接服务器,确保用户只能访问其主目录下的子目录,且无法访问其他系统文件。
2. 检查日志文件 `/var/log/auth.log` 或 `/var/log/secure`,确认是否有错误信息。
---
### 注意事项
- `ChrootDirectory` 设置的目录必须由 `root` 拥有,且不能被 SFTP 用户写入,否则 SSH 服务将拒绝启动。
- 如果用户需要访问特定目录(如 `/var/www/example`),可以将其主目录指向该路径,并确保其子目录由该用户拥有。
- 配置完成后,建议测试不同用户的访问权限,确保配置符合预期。
---
### 示例代码
以下是一个完整的配置示例,展示如何设置 SFTP 用户及其 Chroot 环境:
```bash
# 创建 SFTP 用户组
groupadd sftp_users
# 创建 SFTP 用户并设置密码
useradd -m -G sftp_users -s /sbin/nologin sftpuser
passwd sftpuser
# 设置主目录权限
chown root:root /home/sftpuser
chmod 755 /home/sftpuser
# 创建用户可操作的子目录
mkdir /home/sftpuser/upload
chown sftpuser:sftp_users /home/sftpuser/upload
chmod 755 /home/sftpuser/upload
# 备份并编辑 sshd_config
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
echo "Subsystem sftp internal-sftp" >> /etc/ssh/sshd_config
echo "Match Group sftp_users" >> /etc/ssh/sshd_config
echo " ChrootDirectory %h" >> /etc/ssh/sshd_config
echo " ForceCommand internal-sftp" >> /etc/ssh/sshd_config
echo " AllowTcpForwarding no" >> /etc/ssh/sshd_config
echo " X11Forwarding no" >> /etc/ssh/sshd_config
# 重启 SSH 服务
systemctl reload sshd
```
---
###
阅读全文
相关推荐

















