一、安裝
- 服務端安裝
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