由于 vsftp 采用明文传输,使用者名称密码可通过抓包得到,为了安全性,需使用 sftp,锁定目录且不允许 sftp 使用者登到站群服务器。由于 sftp 使用的是 ssh 协议,需保证使用者只能使用 sftp,不能 ssh 到机器进行操作,且使用金钥登陆、不是 22 埠。
1. 建立 sftp 服务使用者组, 建立 sftp 服务根目录

groupadd sftp

#此目录及上级目录的所有者必须为 root,许可权不高于 755,此目录的组最好设定为 sftp

mkdir /data/sftp
chown -R root:sftp /data/sftp
chmod -R 0755 /data/sftp

2. 修改 sshd 配置档案

cp /etc/ssh/sshd_config,_bk}  #备份配置档案
sed -i ‘s@#Port 22@Port 22@’ /etc/ssh/sshd_config  #保证原来 22 埠可以

vi /etc/ssh/sshd_config

注释掉/etc/ssh/sshd_config 档案中的此行程式码:

Subsystem      sftp    /usr/libexec/openssh/sftp-server

新增如下程式码:

Port 2222
Subsystem sftp internal-sftp -l INFO -f AUTH
Match Group sftp
ChrootDirectory /data/sftp/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp -l INFO -f AUTH

凡是在使用者组 sftp 里的使用者,都可以使用 sftp 服务;使用 sftp 服务连线上之后,可访问目录为/data/sftp/username
举个例子:
test 是一个 sftp 组的使用者,它通过 sftp 连线站群服务器上之后,只能看到/data/sftp/test 目录下的内容
test2 也是一个 sftp 组的使用者,它通过 sftp 连线站群服务器之后,只能看到/data/sftp/test2 目录下的内容
3. 建立 sftp 使用者
#此例将建立一个名称为 test 的 sftp 帐号
#建立 test sftp 家目录:test 目录的所有者必须是 root,组最好设定为 sftp,许可权不高于 755

mkdir /data/sftp/test
chmod 0755 /data/sftp/test
chown root:sftp /data/sftp/test
useradd -g sftp -s /sbin/nologin test  #新增使用者,引数-s /sbin/nologin 禁止使用者通过命令列登入

建立 test 使用者金钥对:

# mkdir /home/test/.ssh
# ssh-keygen -t rsa
# cp /root/.ssh/id_rsa.pub /home/test/.ssh/authorized_keys
# chown -R test.sftp /home/test

在 test 目录下建立一个可以写的 upload 目录

mkdir /data/sftp/test/upload
chown -R test:sftp /data/sftp/test/upload

注:sftp 服务的根目录的所有者必须是 root,许可权不能超过 755(上级目录也必须遵循此规则),sftp 的使用者目录所有者也必须是 root, 且最高许可权不能超过 755 。
4. 测试 sftp

service sshd restart

test 使用者金钥登陆如下图: