ubuntu下vsftpd虛擬用戶配置
以下實驗全部在ubuntu server 14.04 X64上進行。
業務要求:
現在要求創建一個FTP賬號user1,該賬號只能登錄到/www目錄下,不能切換到上級目錄。同時處于安全考慮還要求該賬號上傳的文件權限為644,即上傳的文件具有可讀可寫權限,但是沒有可執行權限。
一:安裝vsftpd
sudo apt-get -y install vsftpd
查看下vsftpd都安裝了那些文件
dpkg -L vsftpd |tac
二:vsftpd配置
1.創建用戶,如下:
sudo useradd -m -s /bin/bash ftpuser
注意:創建的用戶ftpuser現在是無法登錄到系統的,因為沒有給該用戶設置密碼。在此,我們也無需ftpuser登錄到系統,這樣相對來說比較安全。
用戶創建完畢后,我們來創建對應的目錄并修改其所屬用戶,如下:
sudo mkdir /www
sudo chown -R ftpuser:ftpuser /www/
有關用戶相關配置結束后,我們開始設置登錄vsftp的用戶與密碼文件login.txt。如下:
sudo mkdir /etc/vsftpd/
sudo vim /etc/vsftpd/login.txt
user1
password1
login.txt設置完畢后,我們要使用db_load進行加密。而db_load需要db-util這個軟件。所以需要我們現在安裝db-util,如下:
sudo apt-get -y install db-util
db-util安裝完畢后,現在開始使用db_load對loginx.txt進行加密。如下:
sudo db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db
loginx.txt加密完成后,我們現在開始配置vsftpd的PAM驗證。
2. PAM驗證配置
vsftpd的PAM驗證,在此我沒有使用vsftpd安裝時所生成的/etc/pam.d/vsftpd文件。
創建驗證文件,如下:
sudo vim /etc/pam.d/vsftpd.virtual
auth required pam_userdb.so db=/etc/vsftpd/login
account required pam_userdb.so db=/etc/vsftpd/login
vsftpd.virtual文件的內容,也可以根據OS的版本進行調整。我現在使用的是ubuntu x64,所以也可以填寫為:
auth required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/login
account required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/login
3. vsftp權限配置
根據業務要求vsftpd.conf配置內容如下:
grep -vE "^#|^$" /etc/vsftpd.conf
listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
chroot_local_user=YES
chroot_list_enable=NO
allow_writeable_chroot=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
guest_enable=YES
pam_service_name=vsftpd.virtual
user_config_dir=/etc/vsftpd/vu
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
需要添加和默認合并為:
#listen=YES
listen_ipv6=NO
#anonymous_enable=NO
#local_enable=YES
write_enable=YES
local_umask=022
#dirmessage_enable=YES
#use_localtime=YES
#xferlog_enable=YES
#connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
chroot_local_user=YES
chroot_list_enable=NO
allow_writeable_chroot=YES
#secure_chroot_dir=/var/run/vsftpd/empty
#pam_service_name=vsftpd
#rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
guest_enable=YES
pam_service_name=vsftpd.virtual
user_config_dir=/etc/vsftpd/vu
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
在以上配置文件中,有幾點需要重點指出。
local_enable=YES
write_enable=YES
local_umask=022
這兩項是啟用系統用戶的寫權限。特別是write_enable=YES項一定要啟用,否則vsftpd虛擬用戶將無法登錄vsftpd。
為什么會是這樣?因為虛擬用戶依賴與系統用戶。
chroot_local_user=YES
chroot_list_enable=NO
allow_writeable_chroot=YES
這三項是配置vsftpd用戶禁止切換上級目錄的權限。
guest_enable=YES
pam_service_name=vsftpd.virtual
user_config_dir=/etc/vsftpd/vu
這三項是啟用vsftpd虛擬用以及虛擬用戶賬號配置目錄。
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
這三項是啟用vsftpd被動模式及相關端口。
3.4 虛擬用戶相關配置
vsftpd配置文件修改文件后,現在開始配置虛擬用戶的相關權限。如下:
sudo mkdir /etc/vsftpd/vu
guest_username=ftpuser
local_root=/www/
virtual_use_local_privs=YES
anon_umask=133
以上配置參數,其中guest_username=ftpuser表示的是設置FTP對應的系統用戶為ftpuser
local_root=/www/表示使用本地用戶登錄到ftp時的默認目錄。
virtual_use_local_privs=YES虛擬用戶和本地用戶有相同的權限。
anon_umask表示文件上傳的默認掩碼。計算方式是777減去anon_umask就是上傳文件的權限。在此我們設置的是133,也就是說上傳后文件的權限是644。即上傳的文件對所屬用戶來說只有讀寫權限,沒有執行權限。
以上全部配置完畢后,我們來重啟vsftpd,如下:
sudo service vsftpd restart
三 IPtables配置
在實際生產環境中,為了安全起見,我們一般是開啟防火墻的。
在ubuntu上,我們也可以使用IPtables來進行防護。
IPtables配置如下:
sudo iptables-save >/home/ilanni/iptables.rule
sudo iptables-restore < /home/ilanni/iptables.rule
sudo iptables -nL
sudo vim /etc/network/interfaces
pre-up iptables-restore < /home/ilanni/iptables.rule
post-down iptables-save < /home/ilanni/iptables.rule
浙公網安備 33010602011771號