一分鐘在Linux環境下建立一臺SFTP伺服器(含賬戶建立)

耕耘實錄發表於2017-12-19

FTP是比較常見的一種服務了,很多公司都會有可能使用到FTP伺服器,本文將以最簡潔的辦法使用系統自帶的ssh軟體在1分鐘內搭建一臺使用方便的FTP伺服器。
SFTP是Secure File Transfer Protocol的縮寫,安全檔案傳送協議。可以為傳輸檔案提供一種安全的網路的加密方法。sftp 與 ftp 有著幾乎一樣的語法和功能。SFTP為SSH的其中一部分,是一種傳輸檔案至 Blogger 伺服器的安全方式。其實在SSH軟體包中,已經包含了一個叫作SFTP(Secure File Transfer Protocol)的安全檔案資訊傳輸子系統,SFTP本身沒有單獨的守護程式,它必須使用sshd守護程式(埠號預設是22)來完成相應的連線和答覆操作,所以從某種意義上來說,SFTP並不像一個伺服器程式,而更像是一個客戶端程式。SFTP同樣是使用加密傳輸認證資訊和傳輸的資料,所以,使用SFTP是非常安全的。但是,由於這種傳輸方式使用了加密/解密技術,所以傳輸效率比普通的FTP要低得多,如果您對網路安全性要求更高時,可以使用SFTP代替FTP。執行以下指令碼在一分鐘之內即可完成SFTP伺服器的搭建。

#!/bin/bash
#===============================================================================
#          FILE: SftpCreate.sh
#         USAGE: ./SftpCreate.sh 
#   DESCRIPTION: Create a Sftp Server
#       OPTIONS: None
#  REQUIREMENTS: Nene
#        AUTHOR: Geeklp (IVAN DU), geeklp@qq.com
#  ORGANIZATION: GEEKLP
#       CREATED: 2017年12月19日 10時29分12秒
#      REVISION: V1.1
#===============================================================================
set -o nounset                              # Treat unset variables as an error
Users=(`chinapay` `ctbx` `haoyilian` `hbgyl` `huaxia` `jczh` `kjb` `lykj` `lzkj` `msyh` `nyjt` `pingan` `xldz` `yigw` `yytwallet`)
PassWord=`Neoby1314`
#modify the /etc/ssh/sshd_config
sed -i `/Subsystem/s/^/#/` /etc/ssh/sshd_config
sed -i `/^#Subsystem/aSubsystem       sftp    internal-sftp` /etc/ssh/sshd_config
#---------Create SFTPUsers----------
for UserName in ${Users[@]};
do
id -u $UserName>& /dev/null
if [ $? -ne 0 ]; then
mkdir /home/$UserName #建立使用者SFTP的root目錄
adduser $UserName -d /home/$UserName/$UserName #建立使用者並指定使用者目錄
echo "The account $UserName  was created!"
echo $PassWord | passwd $UserName --stdin  #從標準輸入流中讀取密碼
usermod -s /bash/false $UserName #禁止ssh登入
echo "
Match User $UserName
      X11Forwarding no
      AllowTcpForwarding no
      ForceCommand internal-sftp
      ChrootDirectory /home/$UserName">>/etc/ssh/sshd_config
else
echo "The username $UserName was existed!"
fi
done
systemctl restart sshd
#----------END-----------------------

在以上指令碼中有幾個關鍵點:
1、使用者目錄。出於安全考慮,分別建立獨立使用者根目錄,如果多個使用者都在同一個根目錄下,其他使用者是可以看到別人的使用者目錄的,這也就是執行建立/home/UserName/UserName的目的所在。這也是與網上大部分文章不同的地方之一。當然,使用者目錄不一定需要使用者的home目錄,只要使用者對目錄具有所有權都是可以的。
2、禁止使用者的ssh登入,本方案中使用的指定登入指令碼為/bin/false,當然也還有其他方案。
3、修改配置檔案。在本方案中,涉及到配置檔案的2個地方的修改。Subsystem這一行的修改,Match User $UserName後面需要加一行來指定使用者根目錄。


相關文章