暗无天日

=============>DarkSun的个人博客

配置SFTP Server

安装

SFTP是sshd的一部分,无需独立安装

sudo pacman -S openssh --noconfirm
resolving dependencies...
looking for conflicting packages...

Packages (1) openssh-7.6p1-2

Total Installed Size:  4.66 MiB
Net Upgrade Size:      0.00 MiB

:: Proceed with installation? [Y/n] 
(0/1) checking keys in keyring                     [----------------------]   0%
(1/1) checking keys in keyring                     [######################] 100%
(0/1) checking package integrity                   [----------------------]   0%
(1/1) checking package integrity                   [######################] 100%
(0/1) loading package files                        [----------------------]   0%
(1/1) loading package files                        [######################] 100%
(0/1) checking for file conflicts                  [----------------------]   0%
(1/1) checking for file conflicts                  [######################] 100%
(0/1) checking available disk space                [----------------------]   0%
(1/1) checking available disk space                [######################] 100%
:: Processing package changes...
(1/1) reinstalling openssh                         [----------------------]   0%
(1/1) reinstalling openssh                         [######################] 100%
:: Running post-transaction hooks...
(1/3) Reloading system manager configuration...
(2/3) Creating temporary files...
(3/3) Arming ConditionNeedsUpdate...

配置

创建SFTP服务的根目录

这里我们先创建一个 /data 目录作为SFTP服务的根目录,所有SFTP用户的操作不能脱离该根目录范围。

sudo mkdir -p /data
sudo chmod 771 /data

创建SFTP用户和用户组

首先创建一个 sftpusers 用户组

sudo groupadd sftpusers

所有SFTP用户都归属于该组

sudo chown -R root:sftpusers /data
for user in ftpuser1 ftpuser2 ftpuser3;do
    sudo useradd -g sftpusers -d /$user -s /usr/bin/nologin $user
    sudo passwd $user
    sudo mkdir -p /data/$user
    sudo chown -R $user:sftpusers /data/$user
done

这里注册了三个用户,ftpuser1,ftpuser2和ftpuser3,三个用户都通过 -g 参数指定为 sftpusers 的用户。 然后通过 -d 参数设置这三个用户的主目录为 /$user, 通过后面的配置将根目录设置为 /data 后,实际上他们的家目录地址为 /data/$user. 并且通过 -s /usr/bin/nologin 让这些用户无法通过SSH登陆。

配置sshd

将下面内容添加到 /etc/ssh/sshd_config

cat |sudo tee -a /etc/ssh/sshd_config<<EOF
Match Group sftpusers
ChrootDirectory /data
ForceCommand internal-sftp
EOF
Match Group sftpusers
ChrootDirectory /data
ForceCommand internal-sftp

重启sshd

sudo systemctl restart sshd