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