注:本文搭建sftp的系統為CentOS 7 以上
sftp伺服器兩種搭建方式
1、直接在系統上建立一個使用者即可,此種方式最簡單,但最不安全,使用者sftp登陸之後可以随意切換目錄,切使用者可以ssh登陸到系統,很不安全,生産環境中沒這麼幹的,故不詳細介紹了。
- 首先建立sftp登陸使用者
useradd stp-u
echo sftp-u | passwd --stdin sftp-u
- 配置/etc/ssh/sshd_config
注釋掉
#Subsystem sftp /usr/libexec/openssh/sftp-server
添加如下
Subsystem sftp internal-sftp
Match User sftp-u
ChrootDirectory /opt/upload
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
ChrootDirectory設定的目錄權限及其所有的上級檔案夾權限,屬主和屬組必須是root;
ChrootDirectory設定的目錄權限及其所有的上級檔案夾權限,隻有屬主能擁有寫權限,也就是說權限最大設定隻能是755
但如目錄權限由于實際環境的原因不能修改權限的話,也可以通過軟連接配接實作,但最底層的目錄的屬主任然為root,權限最大任然是755
修改目錄權限
chown root.sftp-u test/
重新開機服務
service sshd reload
service sshd restart
登陸
sftp -P 22 [email protected].xxx
顯示本地目錄
sftp> lls
1.json 2.json 3.json ls.txt put.sh
顯示遠端目錄
stp> ls
1.json
上傳
從本地上傳檔案到遠端,本地不指定目錄預設目前目錄,遠端不指定目錄就是上傳到根目錄下
sftp> put 1.json
Uploading 1.json to /1.json
remote open("/1.json"): Permission denied
提示操作遠端權限失敗,因為這是往遠端寫,是以檢查遠端操作的目錄是否有寫權限,發現sftp-u使用者對遠端預設目錄沒有寫權限
于是給sftp-u使用者指定的根目錄加上寫權限,service sshd restart 發現還是不能上傳。
發現需要在根目錄下建立一個子目錄,并且給上sftp-u使用者寫權限,才可以上傳
chown root.sftp-u /root/upload/
mkdir /root/upload/file
chown sftp-u:sftp-u /root/upload/file
chmod 775 /root/upload/file
下載下傳
總結
#file server
useradd sftp-u
echo sftp-u | passwd --stdin sftp-u
mkdir -p /root/upload/
chown root.sftp-u /root/upload/
mkdir /root/upload/file
chown sftp-u:sftp-u /root/upload/file
chmod 775 /root/upload/file
sed -i 's/Subsystem\tsftp\t\/usr\/libexec\/openssh\/sftp-server/#Subsystem\tsftp\t\/usr\/libexec\/openssh\/sftp-server/g' /etc/ssh/sshd_config
echo -e 'Subsystem sftp internal-sftp
Match User sftp-u
\tChrootDirectory /root/upload
\tForceCommand internal-sftp
\tAllowTcpForwarding no
\tX11Forwarding no' >> /etc/ssh/sshd_config