咱們在平常使用 UbuntuServer 服務器時,常常會直接使用基於 ssh 的 sftp 鏈接服務器直接進行文件上傳和下載,不過這個方式其實有必定的安全隱患,當一個團隊有多我的員,須要鏈接服務器去發佈時,若是使用 ssh 則意味着須要將系統的 帳戶和密碼 告知對方,別人就不只擁有了 sftp 的鏈接權限,同時也擁有了 ssh 的鏈接權限,意味着能夠直接登錄服務器,並且 對方使用 sftp 登錄以後能夠看到服務器上所有的文件,這顯示是不符合預期的,咱們要的僅僅是給對方提供一個 ftp 文件上傳下載的權限,而且最好可以限定到具體的目錄。nginx
針對上面的痛點,我也百度看過很多解決方案,有人說能夠 經過配置 帳戶的 shell ,好比 /usr/sbin/nologin 來實現 帳戶禁止 ssh 登錄,只保留 sftp 權限,然而我按照多個文章的教程,進行反覆操做以後,發現這樣的配置確實禁止對應帳戶遠程登錄 ssh 了,可是,,,sftp 也連不上了,,因此在反覆實驗以後,選擇放棄,這時迴歸最原始的點,想一想我須要的是一個ftp服務來提供文件上傳下載的方法,爲什麼不直接獨立配置 ftp 服務,順着這個思路,我找到了 Linux Server 下很是優秀的一款軟件 vsftpd,這款軟件 支持 ftp, ftps(隱式加密), ftpes(顯示加密) ,能夠完美解決咱們的需求,接下來開始咱們的正文,在 Ubuntu Server 配置 vsftpd 實現不一樣經過帳戶,指向不一樣的文件夾,而且禁用帳戶的 shell 登錄功能。shell
sudo apt-get update #刷新軟件源信息ubuntu
sudo apt-get vsftpd #安裝 vsftpdvim
sudo vim /etc/vsftpd.conf 安裝好以後開始編輯配置文件,進行以下幾項的調整,有些配置項在配置文件中原本存在,修改對應的值便可,有些則不存在須要手動編寫,在操做的時候小夥伴要注意 安全
listen=YES #開啓監聽 ipv4 地址bash
listen_ipv6=NO #關閉監聽 ipv6 地址,ipv4 和 ipv6 不能夠同時監聽,不然會沒法啓動服務器
chroot_local_user=YES #限定用戶只能操做主目錄ssh
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 這個文件夾了,點擊進入這個文件夾,而後進行文件上傳下載刪除動做就會發現所有均可以正常操做了。