需求
使用虛擬用戶登錄訪問ftp, 指定用戶訪問, 公網訪問, 保證安全.
ps.折騰了一整晚發(fā)現如果僅僅是自用的話, 用SSH自帶的
sftp
完全滿足需要, 最關鍵的是不需要任何配置!!!
然后下面的內容不用看了, 權當是個人記錄....
本文涉及到的linux基本操作:
- useradd 和 groupadd 用戶管理;
- chown 和 chmod 文件權限管理;
- PAM
安裝
apt install vsftpd
配置
vim /etc/vsftpd.conf
本人配置內容如下:
listen=NO
listen_ipv6=YES
dirmessage_enable=YES
use_localtime=YES
#打開日志記錄
xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/xferlog
#禁止匿名訪問
anonymous_enable=NO
#允許本地用戶訪問,就是linux本機中存在的用戶
local_enable=YES
#開啟寫模式
write_enable=YES
#本地用戶上傳文件的umask值
local_umask=022
#白名單用戶
userlist_enable=YES
#是否啟動userlist為禁止模式,YES表示在userlist中的用戶禁止登錄ftp(黑名單)镶殷,NO表示黑名單失效械馆,我們已經讓userlist作為一個白名單工育,所以無需使用黑名單功能
userlist_deny=NO
#指定哪個文件作為userlist文件
userlist_file=/etc/vsftpd/vsftpd.user_list
#是否限制本地所有用戶切換根目錄的權限,YES為開啟限制
chroot_local_user=YES
#是否啟動限制用戶的名單list為允許模式缠局,上面的YES限制了所有用戶,可以用這個名單作為白名單,作為例外允許訪問ftp根目錄以外的目錄
chroot_list_enable=YES
#設置哪個文件是list文件著蛙,里面的用戶將不受限制的去訪問ftp根目錄以外的目錄
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
#是否開啟寫模式,開啟后可以進行創(chuàng)建文件夾等寫入操作
allow_writeable_chroot=YES
#開啟虛擬用戶模式
guest_enable=YES
#指定虛擬用戶映射的本地賬戶
guest_username=vsftpd
#虛擬用戶權限配置文件夾
user_config_dir=/etc/vsftpd/vusers_permission
secure_chroot_dir=/var/run/vsftpd/empty
#指定PAM文件
pam_service_name=vsftpd.vu
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
#開啟被動模式
pasv_enable=YES
#被動模式端口范圍
pasv_min_port=60000
pasv_max_port=60099
#關閉PASV模式的安全檢查耳贬。該檢查確保數據連接和控制連接是來自同一個IP地址
#pasv_promiscuous=YES
#主動模式
#connect_from_port_20=YES
使用
service vsftpd start
service vsftpd restart
service vsftpd stop
service vsftpd status
ftp 的原理
ftp 是雙通道的踏堡,一個負責命令,一個負責數據咒劲。分為主動模式和被動模式顷蟆。負責命令的端口是 21,在主動模式下腐魂,負責數據的端口是 20帐偎,在被動模式下負責數據的端口是隨機的……大部分客戶端如 FillaZilla 是可以自行配置用主動模式還是被動模式。你用主動模式就把服務器的安全策略組里的的 21 和 20 打開蛔屹。
如果是被動模式削樊,你可以在/etc/vsftpd/vsftpd.conf
下面可以配置一個地址段,比如 60000-61000
配置ftp為被動模式
#connect_from_port_20=YES
pasv_enable=YES
pasv_min_port=60000
pasv_max_port=61000
然后在阿里云安全策略組里打開這一個范圍(60000/61000 ),這樣相當于開了 1000 個端口允許連接
創(chuàng)建&配置虛擬用戶
todo
pam_service_name=vsftpd.vu
創(chuàng)建&配置本地用戶
創(chuàng)建vsftpd服務程序用于存儲文件的根目錄以及虛擬用戶映射的系統本地用戶。FTP服務用于存儲文件的根目錄指的是,當虛擬用戶登錄后所訪問的默認位置漫贞。
比如我要創(chuàng)建的本地用戶是 vsftpd
, 其用戶主目錄為 /var/ftproot
- 創(chuàng)建用戶
useradd -d /var/ftproot -s /sbin/nologin vsftpd
創(chuàng)建完成后可以通過 id vsftpd
命令查看vsftpd用戶的信息:
id vsftpd
uid=1002(vsftpd) gid=1002(vsftpd) groups=1002(vsftpd)
- 配置用戶主目錄
//創(chuàng)建主目錄
mkdir /var/ftproot
//修改主目錄所有者
chown -R vsftp:vsftp /var/ftproot
//修改目錄權限
chmod -Rf 755 /var/ftproot/
//查看配置結果
ls -ldih /var/ftproot
1058397 drwxr-xr-x 4 vsftpd vsftpd 4.0K Jun 10 22:29 ftproot
客戶端選擇
- 瀏覽器地址欄輸入 ftp:ip
- mac finder (打開finder后, cmd + k)也可以連接, 但是貌似局限于局域網.
- 推薦使用 FillaZilla, 可以看到整個連接過程的日志, 遇到問題可以方便調試.
錯誤處理
1. vsftpd 425 Security: Bad IP connecting
測試以下方法會導致vsftpd無法啟動
//打開配置文件
vim /etc/vsftpd.conf
//添加:
pasv_promiscuous=YES
//重啟vsftpd
service vsftpd restart
pasv_promiscuous選項參數說明:
此選項激活時甸箱,將關閉PASV模式的安全檢查。該檢查確保數據連接和控制連接是來自同一個IP地址迅脐。小心打開此選項芍殖。此選項唯一合理的用法是存在于由安全隧道方案構成的組織中。默認值為NO谴蔑。
合理的用法是:在一些安全隧道配置環(huán)境下豌骏,或者更好地支持FXP時(才啟用它)。
參考資料