1. 程式人生 > 其它 >uos-ftp部署文件

uos-ftp部署文件

一、安裝

  • 服務端安裝
sudo apt install -y vsftpd
  • 客戶端安裝
sudo apt install -y ftp

二、配置項

配置檔案路徑:/etc/vsftpd.conf

類別 配置項 描述
匿名使用者 anonymous_enable=yes 允許匿名使用者訪問,需local_enable開啟才生效
anon_upload_enable=YES 允許匿名使用者上傳
anon_mkdir_write_enable=YES 允許匿名使用者建立資料夾
anon_other_write_enable=YES 允許匿名使用者刪除、移動、修改等
anon_umask=077 匿名使用者上傳、建立檔案的預設許可權
全域性使用者配置 local_enable=YES 允許使用者登入
write_enable=YES 允許使用者上傳、修改、移動、刪除檔案
local_umask=022 使用者上傳檔案的預設許可權
訪問限制 chroot_local_user=YES 禁止所有使用者離開家目錄
chroot_list_enable=YES 啟用配置檔案限制,白名單模式
chroot_list_file=/etc/vsftpd/chroot_list 只允許該檔案中使用者離開家目錄,其餘使用者都不可離開家目錄,一行一個使用者名稱
登入限制 userlist_enable=YES 啟用配置檔案限制
userlist_deny=NO NO白名單,YES黑名單
userlist_file=/etc/vsftpd_user_list 使用者配置檔案,一行一個使用者名稱
效能限制 anon_max_rate=0 匿名使用者最大下載速度
local_max_rate=0 使用者最大下載速度
max_clients=2000 最大併發連線數
max_per_ip 單IP的最大併發連線數

三、實驗

1.匿名使用者登入

  • 修改配置檔案
vim /etc/vsftpd.conf
anonymous_enable=YES
write_enable=YES

# 允許匿名使用者上傳
anon_upload_enable=YES
anon_mkdir_write_enable=YES

# 允許匿名使用者刪除、移動檔案
anon_other_write_enable=YES
  • 建立公共目錄
mkdir /srv/ftp/pub

# 必須要給定許可權,否則會不能下載或上傳
chown ftp:ftp /srv/ftp/pub
chmod 755 /srv/ftp/pub
  • 客戶端測試
ftp 192.168.149.140
# 檢視
ls 

# 進入公共目錄
cd pub

# !ls表示檢視作業系統當前位置的檔案,ls表示檢視ftp當前位置下的檔案
!ls

# 上傳檔案
put aaa

2.使用者登入

  • 建立使用者
# 建立一個使用者,要有家目錄
useradd -m zhangsan

# 給使用者設定密碼
passwd zhangsan
  • 登入測試
ftp 192.168.149.140
zhangsan
123456

# 上傳檔案測試
>ls
>!ls
>put aaa

3.白名單或黑名單限制使用者登入

ftp呼叫了pam模組認證,裡面指向了/etc/ftpusers檔案

cat /etc/pam.d/vsftpd

直接修改/etc/ftpusers,將需要禁止登入的賬號新增進去即可禁止登入。


自定義黑白名單使用者列表

  • 建立一個使用者列表檔案
touch /etc/ftp_userlist

裡面每行插入一個使用者名稱即可

  • 修改ftp配置

vim /etc/vsftpd.conf插入以下配置

# 啟用使用者限制登入功能
userlist_enable=YES

# 指定使用者列表檔案
userlist_file=/etc/ftp_userlist

# 指定模式,如果為NO,則表示在ftp_userlist檔案中的使用者可以登入,其他使用者不允許登入(白名單模式),否則相反。
userlist_deny=NO
  • 重啟服務測試
systemctl restart vsftpd

4.禁止使用者離開家目錄

chroot_local_user=YES #禁止所有本地使用者離開家目錄,需要去除家目錄w許可權才能生效。

chroot_list_enable=YES #開啟後,只會允許檔案中的使用者切換目錄

chroot_list_file=/etc/vsftpd/chroot_list #指定使用者檔案路徑

# 建立3個使用者
useradd -m user1
useradd -m user2
useradd -m user3
passwd user1
passwd user2
passwd user3

# 編輯vsftpd.conf
vim /etc/vsftpd.conf

chroot_local_user=YES 
chroot_list_enable=YES 
chroot_list_file=/etc/vsftpd/chroot_list

# 重啟服務
systemctl restart vsftpd.service

# 編輯使用者檔案
echo "user1" >> /etc/vsftpd/chroot_list
echo "user2" >> /etc/vsftpd/chroot_list

測試

  • user1
  • user2
  • user3

5.虛擬使用者

ftp使用者登入使用的是ftp伺服器的本地賬號,當ftp賬號密碼洩露,會對伺服器造成很大的風險。所以一般我們不給使用者這種賬號,而是使用一個虛擬賬號。這樣當這個虛擬賬號密碼洩露後,不會影響系統安全。

虛擬使用者實際上是一個不存在於的作業系統的使用者,ftp-server在進行認真的時候需要呼叫pam模組進行認證。因為虛擬使用者不是系統使用者,虛擬使用者登入ftp需要一個身份許可權,所以需要將虛擬使用者對映到一個系統使用者。

  • 建立一個系統使用者用於對映虛擬使用者
mkdir /srv/ftp/vuser
useradd -d /srv/ftp/vuser vuser
chown vuser.vuser /srv/ftp/vuser
  • 建立虛擬使用者家目錄
# 建立目錄
mkdir /srv/ftp/vuser/user{1..3}

# 目錄一定要給對映的使用者屬組許可權
chown vuser.vuser /srv/ftp/vuser/user*
  • 建立pam認證使用者資料庫
# 建立一個FTP配置資料夾,便於管理
mkdir -p /etc/vsftpd

# 建立使用者賬號密碼檔案,一行賬號,一行密碼
vim /etc/vsftpd/vuser.txt

user1
123456
user2
123456
user3
123456

# 建立本地資料庫,用於pam認證
apt search db | grep -E "^db" 
apt install -y db5.3-util
cd /etc/vsftpd
db5.3_load -T -t hash -f vuser.txt vuser.db

# 修改vsftpd pam模組配置檔案
vim /etc/pam.d/vsftpd

# 注意,實際/etc/vsftpd/vuser檔名叫vuser.db
auth sufficient pam_userdb.so db=/etc/vsftpd/vuser
account sufficient pam_userdb.so db=/etc/vsftpd/vuser

sufficient:表示只要標記sufficient此項配置的模組一旦驗證成功,立即返回成功。
required:表示此項配置的模組必須要驗證成功,驗證成功後還要驗證其他的required,只有當所有的required驗證成功才會返回成功。

  • 修改vsftpd配置檔案
# 新增以下配置
vim /etc/vsftpd.conf

# 啟用虛擬使用者
guest_enable=YES
# 虛擬使用者對映的系統使用者
guest_username=vuser
# 指定虛擬使用者配置檔案目錄
user_config_dir=/etc/vsftpd/vuser_conf
  • 給虛擬使用者新增配置

虛擬使用者的上傳、刪除等許可權和匿名使用者的配置項一樣。

vim /etc/vsftpd/vuser_conf/user1
local_root=/srv/ftp/vuser/user1
anonymous_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

vim /etc/vsftpd/vuser_conf/user2
local_root=/srv/ftp/vuser/user2
anonymous_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

vim /etc/vsftpd/vuser_conf/user3
local_root=/srv/ftp/vuser/user3
anonymous_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
  • 重啟服務測試
systemctl restart vsftpd

測試發現有500報錯,這是因為vsftpd是非常安全的ftp,我們只需要把家目錄的w許可權去掉即可。

chmod a-w /srv/ftp/vuser
chmod a-w /srv/ftp/vuser/user*

發現可以登入了,但是不能建立檔案,因為我們把/srv/ftp/vuser/user1目錄的w許可權給去了,所以所有使用者不能在此目錄下建立、刪除檔案。解決辦法很簡單,我們在伺服器上建立一個上傳目錄即可。

mkdir /srv/ftp/vuser/user1/upload 
chown vuser.vuser /srv/ftp/vuser/user1/upload