SFTP 服务部署及权限分配
本指南将帮助您在 Linux 服务器上部署一个 SFTP 服务器,并正确配置权限以确保用户只能访问其各自的目录。
安装 OpenSSH
确保您的系统上已安装 OpenSSH。如果没有,使用以下命令进行安装:
sudo apt update
sudo apt install openssh-server创建目录结构
创建用于存储 SFTP 数据的主目录和共享子目录:
sudo mkdir -p /data/sftp-data/shared设置目录权限和所有权
为了确保 Chroot 目录的安全性,必须设置正确的权限:
sudo chown root:root /data/sftp-data
sudo chmod 755 /data/sftp-data
sudo chown root:sftpusers /data/sftp-data/shared
sudo chmod 770 /data/sftp-data/shared创建用户组
创建一个新的用户组 sftpusers:
sudo groupadd sftpusers创建 SFTP 用户
创建用户并将其添加到 sftpusers 组中:
# 创建 user1
sudo useradd -d /data/sftp-data/shared -s /sbin/nologin -G sftpusers user1
sudo passwd user1
# 创建 user2
sudo useradd -d /data/sftp-data/shared -s /sbin/nologin -G sftpusers user2
sudo passwd user2批量创建用户和密码
#! /bin/bash
fro a in user1 user2; do
useradd -d /data/sftpG sftpusers -s /sbin/nologin $a
# 随机生成一个12位的字符内容做密码
PASSWD=$(cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 12)
echo "$a:$PASSWD" | chpasswd
echo "$a:$PASSWD" >> /tmp/sftpusers.txt
done配置 SSH
编辑 SSH 配置文件 /etc/ssh/sshd_config:
sudo nano /etc/ssh/sshd_config找到已有的 Subsystem sftp 行并修改为:
Subsystem sftp internal-sftp并在文件末尾添加以下内容:
Match Group sftpusers
ChrootDirectory /data/sftp-data
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no重启 SSH 服务
保存并关闭文件后,重启 SSH 服务:
sudo systemctl restart sshd步骤 8:验证 SSH 配置 使用以下命令验证 SSH 配置文件是否有语法错误:
sudo sshd -t如果没有返回任何错误信息,说明配置文件的语法是正确的。
测试 SFTP 连接
使用 SFTP 客户端(如 FileZilla)或命令行测试每个用户的连接,并验证用户是否被正确限制在共享目录中:
sftp user1@your_server_ip
sftp user2@your_server_ip总结
通过上述步骤,您已经成功部署并配置了一个安全的 SFTP 服务器,使用户能够安全地上传和更新文件,同时确保他们只能访问指定的目录。以下是关键点的总结:
安装 OpenSSH:确保系统上安装了 OpenSSH 服务器。 创建目录结构:建立用于存储 SFTP 数据的主目录和共享子目录。 设置权限和所有权:确保 Chroot 目录的所有权是 root,且权限是 755;共享目录的权限是 770,所有者为 SFTP 用户。 创建用户组和用户:创建 sftpusers 用户组,并添加需要 SFTP 访问的用户。 配置 SSH:修改 SSH 配置文件以启用 SFTP 子系统和 Chroot 限制。 重启 SSH 服务:应用配置更改并重启 SSH 服务。 验证和测试:验证配置文件的语法,并使用 SFTP 客户端测试连接。
错误处理
如果sftpdata目录会挂载在容器下,可能会出现容器重启后导致目录权限变化的问题。记得检查目录权限 示例 sftpdb目录在/data/www/目录下,www目录挂载在nginx容器中,每次容器重启时,会导致www的权限变成nginx:nginx。结果就是用户无法登录。将www权限改成root:root即可
cd /jpdata/nginx/
ll
total 8
drwxr-xr-x 2 root root 62 Aug 16 14:16 conf.d
drwxr-xr-x 2 root root 4096 Aug 16 03:36 logs
drwxr-xr-x 5 root root 53 Jul 2 09:31 www
cd www/
ll
total 0
drwxr-xr-x 8 48 48 211 Jun 3 2020 dokuwiki
drwxr-xr-x 5 root root 45 Aug 7 08:52 sftp-data
drwxrwxrwx 12 48 48 173 May 25 20:33 zentao
cd sftp-data/
chmod 775 -R UE UI chengyoupei
ll
total 0
drwxrwxr-x 3 root ftpuser 269 Oct 18 2023 chengyoupei
drwxrwxr-x 15 root ftpuser 305 Aug 16 15:57 UE
drwxrwxr-x 6 root ftpuser 54 Jun 29 2020 UI最后更新于