FTP虛擬用戶及ssl加密配置
註意:配置FTP服務時,最好關閉防火墻和selinux
1、虛擬用戶和真實用戶區別
真實用戶:是在服務器上登錄的用戶,比如安裝系統時的用戶。
虛擬用戶:是創立的用戶,只能登錄ftp,而不能登錄系統,不是系統的用戶。這樣比使用系統用戶要安全。
2、創建FTP虛擬用戶賬號數據步驟
1.建立虛擬FTP用戶的帳號數據庫文件
2.創建FTP根目錄及虛擬用戶映射的系統用戶
3.建立支持虛擬用戶的PAM認證文件,添加虛擬用戶支持
4.在vsftpd.conf文件中添加支持配置
5.為個別虛擬用戶建立獨立的配置文件,啟動服務並測試
6.重新加載vsftpd配置
7.使用虛擬FTP賬戶訪問測試
3、FTP虛擬用戶詳細配置步驟
(1)安裝vsftpd軟件
[root@localhost ~]# yum -y install vsftpd
(2)建立虛擬用戶數據庫文件,文件名隨便起
提示:該虛擬用戶數據庫文件的奇數行為用戶名,偶數行為密碼。
[root@localhost ~]# vim /etc/vsftpd/xuni.list
user1
123
user2
321
user3
123456
user4
654321
[root@localhost ~]# db_load -T -t hash -f /etc/vsftpd/xuni.list /etc/vsftpd/xuni.db
把虛擬用戶數據文件生成認證模塊識別的數據文件
[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# ls 查看生成的數據文件
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh xuni.db xuni.list
[root@localhost ~]# chmod 600 /etc/vsftpd/xuni.*
註意:CentOS中db_load命令默認已經安裝,但是如果沒有這個命令,需要安裝db4-utils-4.7.25-18.el6_4.x86_64這個軟件之後才能使用db_load命令,還有就是要把原文件和生成的文件都修改一下權限,改成
(3)創建一個虛擬用戶映射的真實系統用戶
創建一個虛擬用戶映射的真實系統用戶,指定它的家目錄為其他目錄,如果為/home目錄,虛擬用戶可能沒有權限訪問,指定讓這個用戶不能登錄系統,並賦予指定家目錄權限為755。
[root@localhost ~]# useradd -d /user -s /sbin/nologin user
[root@localhost ~]# chmod 755 /user
(4)配置PAM模塊
通過修改vsftpd的PAM配置文件 /etc/pam.d/vsftpd來決定vsftpd使用何種認證方式,可以是本地系統的真實用戶認證(模塊pam_unix),也可以是獨立的用戶認證數據庫(模塊pam_userdb),也可以是網絡上的LDAP數據庫(模塊pam_ldap)等。所有這些模塊都存放在/lib/security/目錄(對AMD64則是/lib64/security/)下。
[root@localhost ~]# cp -a /etc/pam.d/vsftpd /etc/pam.d/vsftpd.pam 復制認證文件
[root@localhost ~]# vim /etc/pam.d/vsftpd.pam 編輯認證文件,修改成如下內容
auth required pam_userdb.so db=/etc/vsftpd/xuni
account required pam_userdb.so db=/etc/vsftpd/xuni
(5)在vsftpd.conf文件中添加支持PAM的配置
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO 禁止匿名用戶登錄
#anon_upload_enable=YES 允許上傳文件註釋掉
#anon_mkdir_write_enable=YES 允許創建目錄註釋掉
#anon_other_write_enable=YES 其他寫入、刪除、改名功能註釋掉
pam_service_name=vsftpd.pam 設定PAM服務下VSFTP驗證配置文件名
userlist_enable=YES 設定userlist_file中的用戶不能使用ftp
tcp_wrappers=YES 設定支持tcp wrappers
guest_enable=YES 設定啟用虛擬用戶
guest_username=user 指定虛擬用戶的宿主用戶
user_config_dir=/etc/vsftpd/dir 指定虛擬用戶個人的VSFTP文件存放路徑
(6)創建幾個不同權限的虛擬用戶
創建虛擬用戶配置文件存放目錄,在此目錄中創建對應虛擬用戶名稱的配置文件,向虛擬用戶配置文件中添加相應的權限即可給不同虛擬用戶配置不同的權限。
[root@localhost ~]# mkdir /etc/vsftpd/dir 創建虛擬用戶配置文件存放目錄
[root@localhost ~]# vim /etc/vsftpd/dir/user1 編輯user1用戶的配置文件
anon_upload_enable=YES 允許上傳文件
[root@localhost ~]# vim /etc/vsftpd/dir/user2 編輯user2用戶的配置文件
anon_mkdir_write_enable=YES 允許創建目錄
[root@localhost ~]# vim /etc/vsftpd/dir/user3 編輯user3用戶的配置文件
anon_other_write_enable=YES 開放其他寫入權(刪除,改名)
[root@localhost ~]# vim /etc/vsftpd/dir/user4 編輯user4用戶的配置文件
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[root@localhost ~]# systemctl restart vsftpd
(7)測試我們設置的虛擬用戶是否生效
以上配置修改完成並重啟vsftpd服務後,即可開啟一個安裝了ftp的測試虛擬機,用所創建的虛擬用戶進行ftp連接實驗,看是否符合要求。
[root@localhost ~]# ftp 192.168.115.120
按提示輸入用戶名和密碼即可登陸成功,然後實驗創建的虛擬用戶是否符合要求
註意事項:創建的虛擬用戶映射的系統用戶,家目錄所有者和所屬組一定要是此系統用戶的,權限為755,還有給虛擬用戶分配權限的時候,一定要把vsftpd.conf的相應權限關閉或註釋。
(8)登陸時出現的錯誤
報錯現象:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.
421 Service not available, remote server has closed connection
報錯原因:從2.3.5之後,vsftpd增強了安全檢查,如果用戶被限定在了其主目錄下,則該用戶的主目錄不能再具有寫權限了!如果檢查發現還有寫權限,就會報該錯誤。
解決方法:以下兩種方法任意一種即可。
1、 在/etc/vsftpd/vsftpd.conf服務器的配置文件添加allow_writeable_chroot=YES,然後重啟vsftpd服務即可。
2、使用chmod a-w /user去除用戶家目錄的寫權限即可,需要寫權限的用戶不建議使用這種方法。
4、openssl+vsftpd加密驗證方式
(1)查看openssl軟件是否安裝及vsftpd是否支持或調用ssl
[root@localhost ~]# rpm -q openssl 查看是否安裝openssl軟件
openssl-1.0.1e-60.el7.x86_64
[root@localhost ~]# which vsftpd
/usr/sbin/vsftpd
[root@localhost ~]# ldd /usr/sbin/vsftpd | grep ssl 查詢vsftpd軟件是否支持SSL
libssl.so.10 => /lib64/libssl.so.10 (0x00007f5270695000)
(2)生成加密信息
[root@localhost ~]# openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem 生成vsftpd.pem 證書
註釋:req 輸入為證書請求,需要進行處理
-x509 生成自簽名證書
-nodes 不需要密碼
-day 為證書的有效期
-newkey rsa:1024 生成一個1024長度的RSA私鑰文件,用於簽發
-keyout 指定生成的私鑰文件名稱
-out 為輸出的文件名
Generating a 1024 bit RSA private key
.++++++
.......................++++++
writing new private key to '/etc/vsftpd/vsftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn 國家名稱
State or Province Name (full name) []:beijing 省份名稱
Locality Name (eg, city) [Default City]:beijing 地區名稱
Organization Name (eg, company) [Default Company Ltd]:bjgs 組織名稱
Organizational Unit Name (eg, section) []:bjgs 組織單元名稱
Common Name (eg, your name or your server's hostname) []:server 你的名字或主機名
Email Address []:[email protected] 郵箱地址
[root@localhost ~]# ls -l /etc/vsftpd/|grep vsftpd.pem 查看生成vsftpd.pem是否成功
-rw-r--r-- 1 root root 1958 2月 1 23:17 vsftpd.pem
(3)修改主配置文件/etc/vsftpd/vsftpd.conf
下面是ssl參數一些定義,根據自己需求去修改
ssl_enable=yes/no 是否啟用 SSL,默認為no
allow_anon_ssl=yes/no 是否允許匿名用戶使用SSL,默認為no
rsa_cert_file=/path/to/file rsa證書的位置
dsa_cert_file=/path/to/file dsa證書的位置
force_local_logins_ssl=yes/no 非匿名用戶登陸時是否加密,默認為yes
force_local_data_ssl=yes/no 非匿名用戶傳輸數據時是否加密,默認為yes
force_anon_logins_ssl=yes/no 匿名用戶登錄時是否加密,默認為no
force_anon_data_ssl=yes/no 匿名用戶數據傳輸時是否加密,默認為no
ssl_sslv2=yes/no 是否激活sslv2加密,默認no
ssl_sslv3=yes/no 是否激活sslv3加密,默認no
ssl_tlsv1=yes/no 是否激活tls v1加密,默認yes
ssl_ciphers=加密方法 默認是DES-CBC3-SHA
修改vsftpd的主配置文件vsftpd.conf添加如下內容
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
ssl_enable=YES
allow_anon_ssl=YES
force_anon_logins_ssl=YES
force_anon_data_ssl=YES
force_local_logins_ssl=YES
force_local_data_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/vsftpd/vsftpd.pem
[root@localhost ~]# systemctl restart vsftpd 重啟vsftpd服務
(4)測試ssl是否配置成功
這裏我們使用winscp工具進行測試,其他支持ssl的工具也可以。
可以看到我們的配置已經成功了。
FTP虛擬用戶及ssl加密配置