我們在日常使用 UbuntuServer 伺服器時,經常會直接使用基於 ssh 的 sftp 連接伺服器直接進行文件上傳和下載,不過這個方式其實有一定的安全隱患,當一個團隊有多個人員,需要連接伺服器去發佈時,如果使用 ssh 則意味著需要將系統的 賬戶和密碼 告知對方,別人就不僅擁有了 sftp 的 ...
我們在日常使用 UbuntuServer 伺服器時,經常會直接使用基於 ssh 的 sftp 連接伺服器直接進行文件上傳和下載,不過這個方式其實有一定的安全隱患,當一個團隊有多個人員,需要連接伺服器去發佈時,如果使用 ssh 則意味著需要將系統的 賬戶和密碼 告知對方,別人就不僅擁有了 sftp 的連接許可權,同時也擁有了 ssh 的連接許可權,意味著可以直接登陸伺服器,而且 對方使用 sftp 登陸之後可以看到伺服器上全部的文件,這顯示是不符合預期的,我們要的僅僅是給對方提供一個 ftp 文件上傳下載的許可權,並且最好能夠限定到具體的目錄。
針對上面的痛點,我也百度看過不少解決方案,有人說可以 通過配置 賬戶的 shell ,比如 /usr/sbin/nologin 來實現 賬戶禁止 ssh 登陸,只保留 sftp 許可權,然而我按照多個文章的教程,進行反覆操作之後,發現這樣的配置確實禁止對應賬戶遠程登陸 ssh 了,但是,,,sftp 也連不上了,,所以在反覆實驗之後,選擇放棄,這時回歸最原始的點,想想我需要的是一個ftp服務來提供文件上傳下載的方法,為何不直接獨立配置 ftp 服務,順著這個思路,我找到了 Linux Server 下非常優秀的一款軟體 vsftpd,這款軟體 支持 ftp, ftps(隱式加密), ftpes(顯示加密) ,可以完美解決我們的需求,接下來開始我們的正文,在 Ubuntu Server 配置 vsftpd 實現不同通過賬戶,指向不同的文件夾,並且禁用賬戶的 shell 登陸功能。
sudo apt-get update #刷新軟體源信息
sudo apt-get vsftpd #安裝 vsftpd
sudo vim /etc/vsftpd.conf 安裝好之後開始編輯配置文件,進行如下幾項的調整,有些配置項在配置文件中本來存在,修改對應的值即可,有些則不存在需要手動編寫,在操作的時候小伙伴要註意
listen=YES #開啟監聽 ipv4 地址
listen_ipv6=NO #關閉監聽 ipv6 地址,ipv4 和 ipv6 不可以同時監聽,否則會無法啟動
chroot_local_user=YES #限定用戶只能操作主目錄
write_enable=YES #開啟文件寫入功能
ssl_enable=YES #開啟 ssl 加密功能,預設為 ftpes 顯示加密
ssl_tlsv1=YES #開啟 tlsv1 加密支持,預設為 tlsv1
ssl_sslv2=YES #開啟 sslv2 協議支持
ssl_sslv3=YES #開啟 sslv3 協議支持
implicit_ssl=YES #指定ssl 加密方式為隱式加密(該項開啟之後 ftp 工作於 ftps 隱式加密模式下,ftps 模式埠預設為 990,需要特意指定埠為 990,如果不開啟則,不需要修改埠)
listen_port=990 #設定ftp服務埠 (預設情況不需要指定埠值,implicit_ssl=YES 時才需要該埠配置,個人推薦使用隱式加密,連接更加穩定)
file_open_mode=0777 #配置 用戶預設上傳的文件許可權為 0777
pasv_min_port=6000 #被動連接模式 最小埠
pasv_max_port=7000 #被動連接模式最大埠
pasv_enable=YES #啟用被動連接模式
pasv_address=x.x.x.x #伺服器對應的外部IP地址(雲伺服器,這裡一定要填寫外網ip地址,如果在內網中使用這邊,這行配置可以直接註釋)
經過上面的調整,vsftpd 模塊就算配置完成了,大家可能在百度的時候可能會看到別人還要配置其他很多選項,但是那些其實沒必要了,vsftpd 的預設配置,在加上我們上面的調整就相對來說比較完美了,下麵介紹三個 vsftpd 的常用命令。
sudo service vsftpd start #啟動 vsftpd
sudo service vsftpd restart #重啟 vsftpd
sudo service vsftpd stop #停止 vsftpd
vsftpd服務安裝完成之後,就可以創建賬戶來進行測試,我們今天教大家的方法,賬戶是基於系統賬戶來配置的,操作如下:
vim /etc/shells #編輯系統 shell 規則,加入靜止登陸的 shell 規則,追加在文件最後一行即可
/usr/sbin/nologin #屏蔽 ssh 登陸
sudo useradd xiaoming #創建用戶xiaoming
sudo passwd xiaoming #修改用戶 xiaoming 的密碼
sudo usermod -d /var/www xiaoming #為xiaoming 指定賬戶主目錄
sudo chmod 555 /var/www #去除主目錄的可寫許可權 (vsfpd在 chroot_local_user=YES 禁止預設的登陸目錄擁有可寫許可權,如果擁有則會無法登陸)
sudo usermod -s /usr/sbin/nologin xiaoming #屏蔽xiaoming對於系統的 ssh 登陸許可權 如果要重新放開登陸許可權,執行 sudo usermod -s /bin/bash xiaoming
這樣一來我就創建了一個賬戶xiaoming,該賬戶無法使用 ssh 連接系統,但是支持 ftp 登陸系統,ftp 登陸系統之後預設就會進入 ubuntu 中 nginx 預設的網站目錄 /var/www ,這個其實就是我們配置的主目錄,大家可以根據自己需求自己調整,主目錄地址。客戶端這時候可以進行連接測試,客戶端推薦使用 FileZilla 創建一個站點,註意 協議選擇 ftp,加密方式 選擇 要求隱式的 FTP over TLS,如下圖:
FileZilla 這時候應該就可以連接到我們 ftp 伺服器了,這時候各位如果進行文件上傳動作,應該會全部失敗,因為我之前設定了主目錄的許可權為 555,意味著沒有任何的可寫許可權,所以我們需要 在 伺服器上提前創建好子目錄,以方便我們使用,操作如下:
sudo mkdir /var/www/www.xxxx.com #創建一個文件夾用於存放 www.xxxx.com 的文件
sudo chmod 777 /var/www/www.xxxx.com #調整創建的文件夾許可權為 777
這時候我們重新刷新 ftps 應該就可以看到我們創建的 www.xxxx.com 這個文件夾了,點擊進入這個文件夾,然後進行文件上傳下載刪除動作就會發現全部都可以正常操作了。