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

最后更新于