1. 程式人生 > >Linux下vsftp建立單使用者訪問多個目錄的方法

Linux下vsftp建立單使用者訪問多個目錄的方法

vsftp作為FTP服務,建立單使用者訪問多個目錄的方法

需求:公司在內網有一臺許可權認證伺服器,用於做安全功能、滲透的驗證。接入的專案比較多,經常有專案組需要取日誌定位問題,日誌分散在三個不同的目錄,需要實時的獲得日誌。思路是想建一個FTP賬號,同時有三個目錄的只讀許可權,可以下載檔案,不能上傳或刪除檔案。

  • 使用預設的配置檔案,檢視vsftpd.conf是否支援單使用者多目錄的配置,很可惜,沒發現
  • 使用Serv、FileZilla等FTP服務端搭建FTP Server,然後通過其他手段,將Linux伺服器上的日誌實時同步到指定目錄。有一些方案,一般都需要藉助第三方的軟體,或者另外的共享伺服器,比較繁瑣。
  • 使用軟連結或硬連結的方式,將多個目錄的日誌檔案指向FTP賬號有操作許可權的檔案。但是考慮到日誌檔案和日誌目錄都有可能被刪除(如日誌檔案過大刪除、升級操作等)造成死連結,所以也不太合適。

使用mount進行整個目錄的掛載是否可行

一般日誌的上級目錄不會被刪除,mount是個非常強大的命令,有很多引數可用,以前用過–bind引數,而且mount –bind跟ln是不同的,ln是連結,並且對外“聲稱”自己是連結,而mont –bind類似於實際操作了原始檔案。(具體原理及區別請大家百度)

建立FTP使用者操作步驟

作業系統版本為Redhat Enterprise Sever 6.8,其他版本的配置檔案可能略有區別。操作前,相關配置檔案一定要備份。
建立FTP賬號,首先建立使用者組,或者是用已有的使用者組,這裡建立了FTP單獨的使用者組:
groupadd ftpgroup
確認FTP使用者的預設目錄,建立FTP使用者:
useradd -d /usr/local/ftpfile -s /sbin/nologin -g ftpgroup -G root public_19
使用root賬號修改密碼:
passwd public_19
配置vsftp服務,編輯/etc/vsftpd/vsftpd.conf檔案,修改以下配置:
anonymous_enable=NO
userlist_enable=NO
去掉以下兩行的註釋:
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
編輯user_list檔案,把ftp使用者名稱新增到最後一行:
public_19
新建chroot_list檔案,輸入以下內容:
public_19
重啟vsftp服務:
service vsftpd restart

使用mount –bind新增多目錄訪問許可權

首先日誌檔案有三個,分別在三個不同的目錄,而且檔名有重複,所以考慮在FTP使用者的預設目錄下建三個子目錄,分別對應三個日誌檔案所在的目錄。
mkdir /usr/local/ftpfile/0_22000
mkdir /usr/local/ftpfile/1_22001
mkdir /usr/local/ftpfile/2_22002
執行mount --bind命令:
mount --bind /home/weblogic/xxx/xxx/xxx/logs/   /usr/local/ftpfile/0_22000/
使用public_19賬號登入,發現無法進入0_22000,應該是沒有許可權,因為子目錄雖然在FTP預設目錄下,但是由root賬號建立的,因此修改目錄許可權:
chmod 755 0_22000
再次登入,成功訪問目錄且可以看到日誌檔案,並且僅可以下載,不支援上傳及刪除操作。
同樣操作其他兩個目錄,最終可以在FTP使用者登入後,預設僅能下載指定不同路徑的三個目錄下的檔案,且不支援刪除、上傳等更新操作。

其他相關命令:
直接使用mount,不加任何引數,可以列出當前所有的mount檔案和分割槽資訊。

umount /usr/local/ftpfile/0_22000
上述命令可以取消bind。

使配置重啟後依然生效。mount命令執行掛載的結果都是臨時的,如果想重啟後依然自動掛載,需修改fstab檔案。
如: /home/weblogic/xxx/xxx/xxx/logs/ /usr/local/ftpfile/0_22000/ none rw,bind 0 0
由於伺服器暫時無法重啟,所以上述命令未經過驗證。

疑問:在執行mount命令時,發現我bind的路徑的許可權都是rw,但是實際上使用FTP賬號登入時,並沒有寫許可權,難道是因為手工設定目錄許可權不包括寫的原因?