首選的FTP服務器搭建方式
安裝vsftpd
yum install -y vsftpd
systemctl enable vsftpd #設置開機啟動
systemctl is-enabled vsftpd #查看是否開機啟動
基于虛擬用戶的配置
所謂虛擬用戶就是沒有使用真實的帳戶,只是通過映射到真實帳戶和設置權限的目的。虛擬用戶不能登錄CentOS系統,所以是相對安全的登陸方式
auth required pam_mysql.so user=vsftpd passwd=111111 host=localhost db=vftpuser table=users usercolumn=name passwdcolumn=passwd crypt=0
account required pam_mysql.so user=vftpuser passwd=111111 host=localhost db=vftpuser table=users usercolumn=name passwdcolumn=passwd crypt=0
1.修改配置文件
systemctl start vsftpd
2.建立本地映射用戶并設置宿主目錄權限
[root@shewei ~]#useradd –d /home/vftpsite –s /sbin/nologin vftpuser
3.配置vsftpd.conf(設置虛擬用戶配置項)
[root@shewei ~]#vim /etc/vsftpd/vsftpd.conf
guest_enable=YES #開啟虛擬用戶
guest_username=vftpuser #FTP虛擬用戶對應的系統用戶,需要創建系統用戶
pam_service_name=vsftpd #PAM認證文件 這里是手動建立的pam認證文件名
4.在MySQL中建立用戶口令數據庫 #沒有數據庫就安裝數據庫,以下用mariadb
[root@shewei ~]#yum -y install mariadb-server
[root@shewei ~]#systemctl start mariadb
[root@shewei ~]#mysql
MariaDB [(none)]> create database vsftpd; #建立虛擬用戶數據庫,庫名vsftpd
MariaDB [(none)]> use vsftpd; #進入vsftpd數據庫
MariaDB [(none)]>create table users(name char(16) binary,passwd char(16) binary); #建立虛擬用戶口令表,表名users
#16位長度的用戶密碼區分大小寫
MariaDB [(none)]> insert into users (name,passwd) values (‘bobyuan’,password(‘111’));
MariaDB [(none)]> insert into users (name,passwd) values (‘she’,password(‘111’));
#建立兩個虛擬用戶,bobyuan和she
注意:此處還可以批量添加用戶;后期學mysql時可以使用,此時使用單個添加用戶
MariaDB [(none)]> grant select on vsftpd.users to vsftpd@localhost identified by ‘111111’;#授權vsftpd這個賬號可以讀取vsftpd數據庫的user表
5.驗證mysql的設置是否成功
MariaDB [vsftpd]> show databases; #此處會顯示上面添加的vsftpd數據庫名字
MariaDB [vsftpd]> use vsftpd; #這里是切換進此數據庫
show tables; #這里查看建立的虛擬用戶口令表,應顯示users
select * from users; #這里顯示添加的虛擬用戶和密碼
退出后使用mysql看能否登陸
mysql -uvsftpd -hlocalhost -p111111
6.編譯MySQL的PAM認證模塊
查看/lib64/security/目錄下有沒有MySQL對應的PAM模塊,centos7.3也沒有,需要編譯安裝;
# yum install mariadb-devel pam-devel -y
# ./configure –with-pam=/usr –with-mysql=/usr –with-pam-mods-dir=/usr/lib64/security
# make && make install
7.編輯vsftpd的PAM認證文件
在/etc/pam.d目錄下,
[root@shewei ~]#vim /etc/pam.d/vsftpd
將里面其他的都注釋掉,添加下面這兩行: #或者全部刪除
auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=111111 host=localhost db=vsftpd table=users u
sercolumn=name passwdcolumn=passwd crypt=0
account required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=111111 host=localhost db=vsftpd table=user
s usercolumn=name passwdcolumn=passwd crypt=0
這里需要注意的是user和passwd填寫的是授權數據庫訪問賬號和密碼
crypt=0:表示口令使用明文方式保存在數據庫中
crypt=1:表示口令使用UNIX的DES加密方式加密后保存在數據庫中
crypt=2:表示口令使用MySQL的password()函數加密后保存在數據庫中
crypt=3:表示口令使用MD5散列值的方式保存在數據庫中
8. 重啟vsftpd服務
[root@shewei pam_mysql-0.7RC1]#systemctl restart vsftpd
9. 測試虛擬用戶登錄FTP
[root@shewei pam_mysql-0.7RC1]#iptables -F
通過其他linux訪問就大功告成了;一下是匿名訪問和本地用戶禁錮訪問等:
注意:只有共享權限和本地權限都有的權限才能執行,單獨開放一個權限不能讀寫
共享權限:vsftpd中的主配置文件
本地權限:文件的屬主屬組
匿名用戶:
anonymous_enable=YES #是否允許匿名賬號登陸
anon_upload_enable=YES #是否允許上傳
anon_mkdir_write_enable=YES #是否能夠創建目錄
anon_other_write_enable=YES #是否允許其他用戶有寫權限
程序環境:
主程序 : /usr/sbin/vsftpd
主配置文件: /etc/vsftpd/vsftpd.conf
數據根目錄: /var/ftp
Systemd Unit File: /usr/lib/systemd/system/vsftpd.service
配置vsftpd三種用戶類別:
匿名用戶: anonymous –> ftp, /var/ftp
系統用戶: 至少禁止系統用戶訪問ftp服務,/etc/vsftpd/ftpusers
(此文件中的所有用戶禁止登陸)
通過PAM機制實現(/etc/pam.d/vsftpd);
虛擬用戶:
用戶通過vsftpd服務訪問到的默認路徑,是用戶自己的家目錄;默認可以自己有權限訪問的所有路徑間切換;
禁錮用戶于其家目錄中;
配置文件:/etc/vsftpd/vsftpd.conf
directive value
注意:directive之前不能有多余字符;
系統用戶:
local_enable=YES #是否允許本地用戶登陸(包括匿名和虛擬用戶)
write_enable=YES #是否擁有寫權限
yum install -y vsftpd
輔助配置文件/etc/vsftpd/ftpusers;
列在此文件中的用戶均禁止使用ftp服務;
#但是這樣還是不安全,因為登陸時候需要提供密碼后才會顯示登陸失敗
容易被抓包抓到密碼
chroot_local_user=YES
禁錮所有本地用戶于其家目錄;需要事先去除用戶對家目錄的寫權限;
chmod a-w /home/users
如果注釋chroot_local_user,開啟這兩個選項;
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list #此文件需要創建
禁錮列表中文件存在的用戶于其家目錄中;需要事先去除用戶對家目錄的寫權限
寫入此文件中的用戶都被鎖定,
傳輸日志:
xferlog_enable=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
守護進程的類型:
standalone:獨立守護進程;由服務進程自行監聽套按字,并接收用戶訪問請求
transient:瞬時守護進程;由受托管方代為監聽套按字,服務進程沒有訪問
請求時不啟動;當托管方收到訪問請求時,才啟動服務進程;
CentOS 6:xinetd獨立守護進程, /etc/xinetd.d/,
CentOS 7:由systemd代為監聽;
控制可登錄vsftpd服務的用戶列表:
userlist_enable=YES
啟用/etc/vsftpd/user_list文件來控制可登錄用戶;
userlist_deny=
YES:意味著此為黑名單;
NO:白名單;
虛擬用戶:
用戶賬號存儲于何處?
文件、MySQL、Redis、…
vsftpd:認證功能托管給pam;
虛擬用戶的寫權限,通過匿名一樣的指令進行定義;還能實現不同的用戶有不同的權限
user_config_dir=/etc/vsftpd/vusers_config/
原創文章,作者:shewei,如若轉載,請注明出處:http://www.www58058.com/74293