由於 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 使用者金鑰登陸如下圖: