vsftp配置詳解
FTP:文件傳輸協議(File Transfer Protocol)
是用於在網絡上進行文件傳輸的一套標準協議。它屬於網絡傳輸協議的應用層。
FTP服務一般運行在20和21兩個端口
20用於在客戶端和服務器之間傳輸數據流(主動模式時使用)
21用於傳輸控制流,並且是命令通向ftp服務器的進口。
FTP兩種使用模式:
主動PORT模式:PORT模式 由FTP服務器端發起,FTP服務器使用20端口連接客戶端的某一個大於1023的隨機端口。
被動PASV模式:PASV模式 由FTP客戶端發起的,使用一個大於1024的端口連接服務器上大於1023的隨機端口。
數據傳輸模式:
ASCII:文本格式
BINARY:二進制格式
vsftp:very secure FTP
主配置文件:/etc/vsftpd/vsftpd.conf
anonymous_enable=YES 允許匿名用戶登錄
local_enable=YES 允許本地用戶登錄
write_enable=YES 允許用戶上傳
local_umask=022 本地用戶上傳後的權限mask
anon_upload_enable=NO 匿名用戶上傳控制
#anon_mkdir_write_enable=YES 匿名用戶創建目錄
dirmessage_enable=YES 顯示目錄註釋
xferlog_enable=YES 開啓日誌
connect_from_port_20=YES 主動連接使用的數據通道
#chown_uploads=YES
#chown_username=whoever
xferlog_std_format=YES 與wu-ftp相同的日誌文件格式
#idle_session_timeout=600
#data_connection_timeout=120
#nopriv_user=ftpsecure
#async_abor_enable=YES
#ascii_upload_enable=YES
#ascii_download_enable=YES
#ftpd_banner=Welcome to blah FTP service.
#deny_email_enable=YES
#banned_email_file=/etc/vsftpd/banned_emails
#chroot_local_user=NO 若開啓,則本地用戶默認使用chroot()
#chroot_list_enable=NO 如果開啓,需提供文件指定生效用戶,如果chroot_local_user設置爲Yes,則這個列表爲不生效用戶,默認列表文件是/etc/vsftpd.chroot_list,可通過chroot_list_file參數制定文件
#chroot_list_file=/etc/vsftpd/chroot_list
ls_recurse_enable=NO 是否允許用戶使用'ls -R'命令,遞歸顯示目錄
listen=YES 以stand alone的方式啓動(值爲NO時,super daemon方式啓動)
#listen_ipv6=YES
pam_service_name=vsftpd vsftpd服務中PAM驗證模塊的名稱
userlist_enable=YES 使用user_list文件控制用戶登錄(配合userlist_deny)
#userlist_deny=YES
tcp_wrappers=YES 採用tcp_wrappers進行控制訪問
匿名用戶相關配置:
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
系統用戶相關:
local_enable=YES
write_enable=YES
輔助認證配置文件/etc/vsftpd/ftpusers
pam認證的配置文件:/etc/pam.d/vsftpd
chroot_local_users=YES
禁錮所有的本地用戶於自己的家目錄中;需移除用戶對家目錄寫權限;
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
禁錮指定的文件中的用戶於自己的家目錄中;需移除用戶對家目錄寫權限;
數據傳輸日誌:
xferlog_std_format=YES
xferlog_enable=YES
xferlog_file=/var/log/xferlog
控制可登錄vsftpd服務的用戶列表:
userlist_enable=YES
userlist_deny={YES|NO}
如果userlist_deny=NO, 只允許user_list文件中的用戶
如果userlist_deny=YES (默認), 不允許user_list文件中的用戶, 輸入密碼前就會報錯
vsftpd配置實例:
Centos 7
禁錮系統用戶於家目錄;
基於mysql進行用戶認證;
不同的虛擬用戶擁有不同的權限設定;
安裝vsftp、mysql及pam-mysql模塊,用於pam連接mysql存儲密碼:
]# yum isntall vsftpd mariadb-server mariadb-devel pam-devel
]# wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
]# tar xvf pam_mysql-0.7RC1.tar.gz
]# cd pam_mysql-0.7RC1
]# ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security
]# make
]# make install
準備mairadb數據庫:
]# mysql_install_db --user=mysql 初始化數據庫
]# systemctl start mariadb 啓動mariadb
]# mysql_secure_installation 安全設置
]# mysql -p 輸入密碼登陸數據庫
> create database vsftpd; 創建vsftpd數據庫
插入虛擬用戶信息:
> insert into vsftpd.users (name,password) values ('rick',PASSWORD('222222')),('morty',PASSWORD('222222'));
授權:
> grant all on vsftpd.* to 'vuser'@'localhost' identified by '333333';
> grant all on vsftpd.* to 'vuser'@'127.0.0.1' identified by '333333';
> flush privileges;
配置vsftpd通過pam_mysql進行認證
]# vi /etc/vsftpd/vsftpd.conf
#listen_ipv6=YES 註釋該行
pam_service_name=vsftpd.mysql
guest_enable=YES
guest_username=vuser
模塊認證配置文件:
]# vi /etc/pam.d/vsftpd.mysql 添加兩行
auth required /usr/lib64/security/pam_mysql.so user=vuser passwd=333333 host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /usr/lib64/security/pam_mysql.so user=vuser passwd=333333 host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
創建映射的系統用戶賬號:
]# mkdir vpub
]# useradd -d /vpub vuser
]# mkdir /vpub/{pub,upload}
]# chmod u-w /vpub
]# setfacl -m u:vuser:rwx /vpub/upload
設置各虛擬用戶的權限
]# vi /etc/vsftpd/vsftpd.conf 添加一行指定虛擬用戶權限目錄
user_config_dir=/etc/vsftpd/users_conf
]# mkdir users_conf
]# vi rick 虛擬用戶的權限都用匿名指令指定
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
]# vi morty 該用戶無上傳權限
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
測試成功:
lftp rick@10.1.235.7:/upload> put issue
59 bytes transferred
lftp morty@10.1.235.7:/upload> put centos-release
put: Access failed: 550 Permission denied. (centos-release)