Debian 8開啟sftp服務


看到某雲的CDN居然是使用ftp這種早該淘汰的協議,不禁有些吐槽。ftp曾經作為互聯網上最重要的協議,但漫長使用過程中體現出的各種缺點,已不適合再使用。其中最致命的問題就是明文傳輸用戶密碼。建議使用這種CDN時,最好長個心眼關閉ftp管理方式,直接使用回源透傳的模式。

不過某些情況下,不適合使用svn、git之類的方式來傳輸文件時(一般是不需要版本管理的二進制文件),最合適的選擇就是ftp這種類型的協議。ftp的替代品也不少,如sftp、ftps、webdav。我個人最看好的是webdav,但是鑒於幾乎所有的linux服務器都安裝了ssh,使用sftp可以更省資源,不需要開啟額外的進程和端口。接下來記錄sftp的設置過程,系統環境基於debian 8。

我的需求是這樣的:設置一個sftp目錄,可以通過sftp上傳/下載,同時nginx也需要能夠讀寫,以方便我上傳/更新web程序,以及下載web服務器的日志。

操作流程如下:

  • 添加sftp賬號

首先建立好sftp的目錄:

mkdir /var/sftp

創建用於sftp的用戶和用戶組

groupadd sftp
useradd -g sftp -d /var/sftp -s /bin/false sftp
passwd sftp
# 設置密碼
  • 通過chroot限制sftp服務的訪問目錄

編輯ssh的配置文件,設置chroot目錄,把sftp限制在他的用戶目錄下(%h代表用戶目錄),並且禁止掉其他不需要的ssh權限

nano /etc/ssh/sshd_config
# 找到Subsystem,注釋掉原來的那行
#Subsystem sftp /usr/lib/openssh/sftp-server
# 再添加下面的新行
Subsystem sftp internal-sftp
# 限制sftp的目錄,讓他看不到不應該看到的東西
Match Group sftp
    ChrootDirectory %h
    AllowTcpForwarding no
    X11Forwarding no
    ForceCommand internal-sftp

創建上傳目錄並設置權限,ChrootDirectory的目錄和其所有上層目錄的所有者必須是root,並且權限不能大於755

cd /var/sftp
mkdir www
chmod 770 www
chown sftp:sftp www
cd ..
chmod 755 sftp
chown root:root sftp
  • 設置掩碼,以便外部程序能夠使用

sftp上傳過程中創建的目錄和文件所有者固定為sftp:sftp,權限默認為755,其他用戶只能讀不能寫。這里我們需要修改為可以被組成員讀寫(當然了解原理后你也可以圖省事,直接允許所有用戶讀寫)

nano /etc/pam.d/sshd
# 在文件最末尾添加
session optional pam_umask.so umask=0007 # 也可以是0002

給nginx使用的用戶添加用戶組sftp,我這里是www-data

usermod -G sftp www-data

還原shell中的默認umask,避免被sftp覆蓋

nano /etc/profile
# 在文件最末尾添加
umask 022

到此,我們已經順利的架設了sftp服務,可以使用各種流行的ftp客戶端,比如FileZilla、FlashFXP安逸的上傳/下載文件啦。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM