linux上ftp服務安裝配置介紹

一.在linux上安裝ftp服務

vsftp安裝:yum install vsftpd
查看vsftp是否安裝rpm -qa | grep vsftpd
關閉selinux
否則會報錯:
[root@zabbix-server vsftpd]# getenforce
Enforcing
[root@zabbix-server cacti]# lftp [email protected]
Password:
lftp [email protected]:~> ls
ls: Login failed: 500 OOPS: cannot change directory:/home/cacti
[root@zabbix-server vsftpd]# setenforce 0
[root@zabbix-server vsftpd]# getenforce
Permissive
[root@zabbix-server cacti]# lftp [email protected]
Password:
lftp [email protected]:~> ls
ls: Login failed: 500 OOPS: cannot change directory:/home/cacti
lftp [email protected]:~> ls
drwxr-xr-x 3 500 500 4096 Dec 24 02:34 test01
二.基本屬性介紹:
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
去掉#號默認配置文件:
[root@zabbix-server vsftpd]# grep -v "^#" /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
參數介紹參考文檔:
http://moerjinrong.blog.51cto.com/11124564/1881357
vsftpd.conf的基本屬性
local_root=/var/ftp 指定實體FTP用戶所使用的目錄,如不指定,實體用戶的默認目錄爲自己的家目錄。
ftpd_banner=Welcome!! 登陸後的註釋信息。
xferlog_file=/var/log/xferlog 日誌存放位置。


listen_port=21 監聽的端口。
local_root=/var/ftp 使用的ftp目錄,全局。
write_enable=YES (NO) 是否允許寫入,全局。


local_enable=YES|NO 是否允許實體用戶登陸。
local_max_rate=# 限制real user的傳輸速度,單位爲Byte/s,如果爲0則表示不限制。
allow_writeable_chroot=YES|NO 是否限制ftp文件夾對實體用戶的W權限,如果爲NO,則設置W權限時,會報錯。


anonymous_enable=YES|NO 是否允許匿名用戶登錄,預設爲YES,如果關閉則所有的匿名設置屬性都將無效。
anon_root=/path/filename 指定匿名用戶ftp目錄
anon_world_readable_only=YES|NO 是否允許匿名用戶具有下載的權限,預設爲YES。
anon_other_write_enable=YES|NO 是否允許匿名用戶具有寫入(W)的權限,如刪除與更改伺服器上的檔案與檔名等權限,預設爲NO。
anon_mkdir_write_enable=YES|NO 是否允許匿名用戶具有創建目錄的權限 預設爲NO。
anon_upload_enable=YES|NO 是否允許匿名用戶上傳文件,預設爲NO


guest_enable=YES|NO 所有的實體賬號登陸都視爲以guest的身份登陸。
guest_username=username 指定訪客使用哪個用戶的身份。

三.具體應用:本地用戶管理

3.1匿名用戶是否允許訪問
anonymous_enable=YES
anon_mkdir_write_enable=YES
3.2本地用戶管理參數chroot_local_user
將用戶添加到vsftpd/chroot_list文件中允許訪問
local_enable=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
將用戶添加到vsftpd/chroot_list文件中允許訪問
[root@zabbix-server vsftpd]# cat /etc/passwd |grep ":5[0-9][0-9]:" | awk -F : '{print $1}' >/etc/vsftpd/chroot_list
主配置文件
linux上ftp服務安裝配置介紹
注意:此時可以任意切換目錄,而且可以任意刪除文件和目錄,危險,要限制登陸用戶只能在固定的目錄下操作:修改參數:chroot_local_user=NO
[root@zabbix-server tmp]# grep "chroot_local_user=YES" /etc/vsftpd/vsftpd.conf
chroot_local_user=YES
[root@zabbix-server tmp]# sed -i 's#chroot_local_user=YES#chroot_local_user=NO#g' /etc/vsftpd/vsftpd.conf
[root@zabbix-server tmp]# grep "chroot_local_user=NO" /etc/vsftpd/vsftpd.conf
chroot_local_user=NO
啓動 VSFTPD 服務
service vsftpd restart
查看21端口是否開放
netstat -atln |grep 21
測試:
linux上ftp服務安裝配置介紹
此時,只能在家目錄/home/cacti/下操作:
linux上ftp服務安裝配置介紹
3.3 參數local_root=/var/ftp/pub
指定實體FTP用戶所使用的目錄,如不指定,實體用戶的默認目錄爲自己的家目錄。
測試:
[root@zabbix-server pub]# lftp [email protected]
Password:
lftp [email protected]:~> ls
lftp [email protected]:/> ls
[root@zabbix-server pub]# mkdir /var/ftp/pub/{test003,test004} –p

[root@zabbix-server test01]# cd /var/ftp/pub/
[root@zabbix-server pub]# ll
total 8
drwxr-xr-x. 3 root root 4096 Dec 24 14:54 test003
drwxr-xr-x. 2 root root 4096 Dec 24 12:30 test004
lftp [email protected]:/> ls
drwxr-xr-x 2 0 0 4096 Dec 24 04:30 test003
drwxr-xr-x 2 0 0 4096 Dec 24 04:30 test004
lftp [email protected]:/> cd test003
lftp [email protected]:/test003> ls [root@zabbix-server ~]# lftp [email protected]
Password:
lftp [email protected]:~> ls
drwxr-xr-x 2 0 0 4096 Dec 24 06:45 test003
drwxr-xr-x 2 0 0 4096 Dec 24 04:30 test004
lftp [email protected]:/> cd test004
lftp [email protected]:/test004> mkdir test001
mkdir: Access failed: 550 Create directory operation failed. (test001)
但是不能mkdir dirname 創建目錄,原因是上面的目錄權限是root
授權:
chown -R test01.test01 pub
[root@zabbix-server ~]# lftp [email protected]
Password:
lftp [email protected]:~> ls
drwxr-xr-x 3 890 890 4096 Dec 24 06:54 test003
drwxr-xr-x 2 890 890 4096 Dec 24 04:30 test004
lftp [email protected]:/> cd test004/
lftp [email protected]:/test004> mkdir test001
mkdir ok, `test001' created
lftp [email protected]:/test004> ls
drwxr-xr-x 2 890 890 4096 Dec 24 07:12 test001
提示:當前/var/ftp/pub下的目錄屬主都是test01,所以當使用cacti登陸時,是無法在/var/ftp/pub 下上傳文件或者是創建目錄的
linux上ftp服務安裝配置介紹
linux上ftp服務安裝配置介紹

3.4參數listen=YES
註釋掉掉參數:listen=YES
測試:
/etc/init.d/vsftpd restart 啓動報錯:
[root@zabbix-server pub]# /etc/init.d/vsftpd restart
Shutting down vsftpd: [FAILED]
Starting vsftpd for vsftpd: 500 OOPS: vsftpd: not configured for standalone, must be started from inetd
[FAILED]
[root@zabbix-server pub]# /etc/init.d/vsftpd restart
Shutting down vsftpd: [FAILED]
Starting vsftpd for vsftpd: [ OK ]

3.5參數local_max_rate
限制real user的傳輸速度,單位爲Byte/s,如果爲0則表示不限制。
測試:
local_max_rate=10240 每秒傳輸10KB
linux上ftp服務安裝配置介紹
linux上ftp服務安裝配置介紹
local_max_rate=1024000 每秒傳輸1MB

linux上ftp服務安裝配置介紹

四.虛擬用戶管理
4.1vsftpd基於數據庫文件來實現虛擬用戶
4.1.1在主配置文件內添加參數,創建多個虛擬用戶共享操作一個目錄
(1)要用到文件數據庫db4
rpm -qa |grep db4
(2)將帳戶放入文本:(奇數行)用戶名 (偶數行)密碼
[root@zabbix-server vsftpd]# cat /etc/vsftpd/vsftpd.txt
test0001
wujianwei
txt01
jianwei
txt02
lixu
(3)生成帳戶的文件數據庫
db_load -T -t hash -f vsftpd.txt /etc/vsftpd/vsftpd_zhanghu.db
(4)修改文件數據庫訪問權限
chmod 600 /etc/vsftpd/vsftpd_zhanghu.db
(5)手工建立虛擬用戶所需的PAM配置文件
編輯認證相關的一個配置文件:(告訴配置文件你得用哪種方式去認證,要不然會用系統默認的用戶名和密碼,現在我們要用虛擬用戶的來認證,這時候就需要告訴配置文件他的這些密碼庫文件這些在哪裏,要去用它)
vi /etc/pam.d/vsftpd 編輯此配置文件,註釋掉原來的內容,添加下面的紅色字體代碼
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_zhanghu
類型爲認證 設置爲required 傳遞pam_userdb.so參數 數據庫文件在
/etc/vsftpd/vsftpd_zhanghu無需加.db,默認的!
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_zhanghu
實踐驗證可行配置文件:
[root@zabbix-server vsftpd]# cat /etc/pam.d/vsftpd
#%PAM-1.0
#session optional pam_keyinit.so force revoke
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
#auth include password-auth
#account include password-auth
#session required pam_loginuid.so
#session include password-auth
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_zhanghu
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_zhanghu

保存之前我們要先去確認下/lib/security/pam_userdb.so這個文件存在不存在
(因爲這個關係到系統是32位還是64位的問題,32位的系統是存放在上面所說的路徑下的,但是如果是64位操作系統的話
是存放在/lib64/security/pam_userdb.so裏的) 可以用uname -a查看系統是多少位的操作系統

(6)添加一個虛擬用戶的入口帳戶
useradd -d /var/zhandian -s /sbin/nologin xunirukou

(7)在主配置文件中添加虛擬用戶的配置內容/etc/vsftpd/vsftpd.conf
虛擬用戶的新添加配置
chroot_local_user=YES
guest_enable=YES
guest_username=xunirukou
pam_service_name=vsftpd
local_root=/var/zhandian/xuesong
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/extra

完整配置文件如下:
[root@zabbix-server zhandian]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
max_clients=3
max_per_ip=3
local_max_rate=102400

chroot_local_user=YES
guest_enable=YES
guest_username=xunirukou
pam_service_name=vsftpd
virtual_use_local_privs=YES
local_root=/var/zhandian/xuesong
user_config_dir=/etc/vsftpd/extra(可有可無)

(8)在vsftpd.conf配置文件中指定用戶配置文件的目錄(此步驟可以省略)
user_config_dir=/etc/vsftpd/extra
(9)建立配置文件中指定用戶配置文件的目錄(此步驟可以省略)
mkdir /etc/vsftpd/extra
(10)因爲入口帳戶是一個本地帳戶,所以要指定虛擬用戶具有本地帳戶的權限,才能讀寫 自己空間中的文件,虛擬用戶就可以就擁有寫權限
virtual_use_local_privs=YES
(11)此處的步驟可以省略
touch /etc/vsftpd/vsftpd_zhandian/xuesong
echo "local_root=/var/zhandian/xuesong" >> /etc/vsftpd/vsftpd_zhandian/xuesong
(12)
mkdir /var/zhandian/xusong
(13)
chown -R xunirukou: xunirukou /var/zhandian/
(14)重啓服務
/etc/init.d/vsftpd restart
此時,主配置文件內容爲:
[root@zabbix-server extra]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

chroot_local_user=YES
guest_enable=YES
guest_username=xunirukou
pam_service_name=vsftpd
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/extra
local_root=/var/zhandian/xusong1

(15)客戶端虛擬賬號測試
[root@zabbix-server vsftpd]# lftp [email protected]
Password:
lftp [email protected]:~> ls
drwxr-xr-x 4 892 892 4096 Dec 25 00:04 xuesong
lftp [email protected]:/> cd xuesong/
lftp [email protected]:/xuesong> ls
-rw-r--r-- 1 892 892 22179 Dec 25 00:04 install.log
drwxr-xr-x 2 892 892 4096 Dec 25 00:03 test01
drwxr-xr-x 2 892 892 4096 Dec 25 00:03 test03
lftp [email protected]:/xuesong> rm -fr test01 test03
rm ok, 2 files removed
lftp [email protected]:/xuesong> ls
-rw-r--r-- 1 892 892 22179 Dec 25 00:04 install.log
lftp [email protected]:/xuesong> mkdir test01
mkdir ok, `test01' created
lftp [email protected]:/xuesong> put /root/install.log.syslog
5890 bytes transferred
lftp [email protected]:/xuesong> ls
-rw-r--r-- 1 892 892 22179 Dec 25 00:04 install.log
-rw-r--r-- 1 892 892 5890 Dec 25 00:45 install.log.syslog
drwxr-xr-x 2 892 892 4096 Dec 25 00:45 test01
lftp [email protected]:/xuesong>

[root@zabbix-server vsftpd]# lftp [email protected]
Password:
lftp [email protected]:~> ls
drwxr-xr-x 3 892 892 4096 Dec 25 00:45 xuesong
lftp [email protected]:/> cd xuesong/
lftp [email protected]:/xuesong> ls
-rw-r--r-- 1 892 892 22179 Dec 25 00:04 install.log
-rw-r--r-- 1 892 892 5890 Dec 25 00:45 install.log.syslog
drwxr-xr-x 2 892 892 4096 Dec 25 00:45 test01

如果顯示鏈接超時,或者報錯530檢查selinx,iptbales規則,
以及重啓防火牆執行modprobe ip_conntrack_ftp
4.1.2在子配置文件下創建獨立的單個虛擬用戶操作單個目錄
提示:此標題下面的配置是有效的可以實踐操作成功
1.將用戶限制到某個目錄下:
修改配置文件: vim /etc/vsftpd/vsftpd.conf
2.生成一個虛擬的用戶來操作ftp(正常我們配置ftp一般是不能用系統用戶來使用的,要不然都知道你係統用戶了那都可以通過sshd來登錄系統了,這也是一個安全隱患,所以我們需要配置一個虛擬用戶來操作)
3.創建一個虛擬用戶對應的那個系統用戶:useradd virftp -s /sbin/nologin
4.創建一個虛擬用戶存放用戶名密碼的文件:vim /etc/vsftpd/vsftpd_login
[root@zabbix-server test1]# cat /etc/vsftpd/vsftpd_login
test1
wujianwei
test2
jianweiwu
然後更改其權限:chmod 600 /etc/vsftpd/vsftpd_login

5.將vsftpd_login這個文件生成一個vsftpd這個服務能識別的一個二進制的庫文件:
db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db
6.創建虛擬用戶:
(1)創建一個虛擬用戶配置文件存放的一個目錄: mkdir /etc/vsftpd/extra
(2)進入到這個目錄下進行配置文件的創建: cd /etc/vsftpd/extra
(3)創建一個跟第4步配置文件中用戶名同名的一個配置文件: vim test1
子配置文件寫入內容:
[root@zabbix-server vsftpd]# cat /etc/vsftpd/extra/test1
local_root=/home/virftp/test1
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=600
data_connection_timeout=120
max_clients=10
max_per_ip=5
local_max_rate=50000

此時的主配置文件內容爲:
[root@client01 vsftpd]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
#
write_enable=YES
#
local_umask=022
#
dirmessage_enable=YES

This depends on setting xferlog_std_format parameter

xferlog_enable=YES
#
connect_from_port_20=YES
#
xferlog_std_format=YES
#
listen=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

chroot_local_user=YES
guest_enable=YES
guest_username=virftp
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/extra
(4)既然在上面配置文件中我們有限制test1的家目錄到/home/vsftpd/test1下,我們自然要去創建這個目錄:
mkdir /home/virftp/test1
然後更改其屬主以及屬組爲我們的系統用戶:
chown -R virftp:virftp /home/virftp/test1
(5)編輯認證相關的一個配置文件:(告訴配置文件你得用哪種方式去認證,要不然會用系統默認的用戶名和密碼,
現在我們要用虛擬用戶的來認證,這時候就需要告訴配置文件他的這些密碼庫文件這些在哪裏,要去用它)
vim /etc/pam.d/vsftpd 把配置文件中原來的信息註釋掉(不註釋掉,會在登陸的時候報錯),然後在下面添加信息:
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
此處默認/etc/vsftpd/vsftpd_login 的vsftpd_login.db一定要去掉後綴.db

[root@zabbix-server vsftpd]# cat /etc/pam.d/vsftpd
#%PAM-1.0
#session optional pam_keyinit.so force revoke
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
#auth include password-auth
#account include password-auth
#session required pam_loginuid.so
#session include password-auth
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

保存之前我們要先去確認下/lib/security/pam_userdb.so這個文件存在不存在
(因爲這個關係到系統是32位還是64位的問題,32位的系統是存放在上面所說的路徑下的,但是如果是64位操作系統的話
是存放在/lib64/security/pam_userdb.so裏的) 可以用uname -a查看系統是多少位的操作系統
7.編輯vsftpd的配置文件: vim /etc/vsftpd/vsftpd.conf
(將一些關於匿名用戶信息行的選項打開並將其改成NO;注:local_enable=YES這一行就是默認的YES別去改)
並在配置文件最底下添加一些配置信息:
[root@zabbix-server vsftpd]# tail -5 /etc/vsftpd/vsftpd.conf
chroot_local_user=YES
guest_enable=YES
guest_username=virftp
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/extra
8.重啓vsftpd服務: /etc/init.d/vsftpd restart

9.測試:
[root@zabbix-server vsftpd]# lftp [email protected]
Password:
lftp [email protected]:~> ls
lftp [email protected]:/> mkdir txt01
mkdir ok, `txt01' created
lftp [email protected]:/> cd txt01/
lftp [email protected]:/txt01> ls
lftp [email protected]:/txt01> put /root/install.log
22179 bytes transferred
lftp [email protected]:/txt01> ls
-rw-r--r-- 1 893 893 22179 Dec 25 08:16 install.log
lftp [email protected]:/txt01>

如果測試鏈接不上,很大情況是iptables 導致的,
要在命令行執行命令:modprobe ip_conntrack_ftp 基本上可以解決問題
[root@zabbix-server ~]# ll /home/virftp/test1/
total 4
drwxr-xr-x. 2 virftp virftp 4096 Dec 25 16:16 txt01
[root@zabbix-server ~]# ll /home/virftp/test1/
total 24
-rw-r--r--. 1 virftp virftp 22179 Dec 25 16:16 install.log
[root@zabbix-server ~]# ll /home/virftp/test1
total 4
drwxr-xr-x. 2 virftp virftp 4096 Dec 25 16:16 txt01
[root@zabbix-server ~]# ll /home/virftp/test1/

total 24

按照上面的配置添加一個虛擬用戶test2來訪問指定的目錄/home/virftp/test2

mkdir /home/virftp/test2 授權給系統用戶virftp
[root@zabbix-server virftp]# cd /home/virftp/
You have new mail in /var/spool/mail/root
[root@zabbix-server virftp]# chown -R virftp.virftp test2
cp /etc/vsftpd/extra/test1 /etc/vsftpd/extra/test2
修改配置文件:
[root@zabbix-server virftp]# vim /etc/vsftpd/extra/test2

local_root=/home/virftp/test2
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=600
data_connection_timeout=120
max_clients=1
max_per_ip=1
local_max_rate=50000
~
[root@zabbix-server extra]# /etc/init.d/vsftpd restart
測試:
[root@zabbix-server virftp]# lftp [email protected]
Password:
lftp [email protected]:~> ls
lftp [email protected]:/> mkdir wujianwei01
mkdir ok, `wujianwei01' created
lftp [email protected]:/> put /root/install.log
22179 bytes transferred
lftp [email protected]:/> ls
-rw-r--r-- 1 893 893 22179 Dec 25 08:40 install.log
drwxr-xr-x 2 893 893 4096 Dec 25 08:40 wujianwei01
lftp [email protected]:/>
[root@zabbix-server extra]# cd /home/virftp/test2/
You have new mail in /var/spool/mail/root
[root@zabbix-server test2]# ll
total 28
-rw-r--r--. 1 virftp virftp 22179 Dec 25 16:40 install.log
drwxr-xr-x. 2 virftp virftp 4096 Dec 25 16:40 wujianwei01
[root@zabbix-server test2]#
4.1.3接着4.1.2的配置測試
接着4.1.2的配置測試:如果想新添加lftp的遠程登陸虛擬用戶以及重新設置用戶使用ftp上傳的指定目錄:

[root@zabbix-server extra]# cat /etc/vsftpd/extra/test3
local_root=/opt/test3
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=600
data_connection_timeout=120
max_clients=10
max_per_ip=5
local_max_rate=5000
[root@zabbix-server extra]# mkdir /opt/test3/ -p
[root@zabbix-server extra]chown -R virftp.virftp /opt/test3/

在配置文件中添加第三個虛擬用戶:test3密碼:jian
[root@zabbix-server extra]# vim /etc/vsftpd/vsftpd_login
test1
wujianwei
test2
jianweiwu
test3
jian
[root@zabbix-server vsftpd]# db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db
測試:
lftp [email protected]:/> put /tmp/test0001
4 bytes transferred
lftp [email protected]:/> ls
drwxr-xr-x 2 2017 2017 4096 Feb 16 11:30 333
drwxr-xr-x 2 2017 2017 4096 Feb 16 11:31 3344
drwxr-xr-x 2 2017 2017 4096 Feb 16 12:50 4444
-rw-r--r-- 1 2017 2017 4 Feb 16 12:50 test0001
lftp [email protected]:/> put /data/soft/
lepus_data.sql lepus_table.sql percona-toolkit-2.2.11-1.noarch.rpm rep_2017-02-12.sql
lftp [email protected]:/> put /data/soft/lepus_table.sql
`/data/soft/lepus_table.sql' at 74677 (100%) [Waiting for transfer to complete]

t@client01 extra]# lftp [email protected]
Password:
lftp [email protected]:~> ls
drwxr-xr-x 2 2017 2017 4096 Feb 16 11:30 333
drwxr-xr-x 2 2017 2017 4096 Feb 16 11:31 3344

4.1.4測試
[root@zabbix-server extra]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
chroot_local_user=YES
guest_enable=YES
guest_username=virftp
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/extra

[root@client01 extra]# cat /etc/vsftpd/vsftpd_login
test1
wujianwei
test2
jianweiwu
test3
jian
test4
wei
test5
lixu
×××字體爲新添加的用戶和密碼
[root@zabbix-server extra]# db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db

測試:登陸lftp
[root@client01 extra]# lftp [email protected]
Password:
lftp [email protected]:~> ls
drwxr-xr-x 2 2017 2017 4096 Feb 16 15:18 test00001
drwxr-xr-x 3 2017 2017 4096 Feb 16 11:39 test1
-rw-r--r-- 1 2017 2017 118252 Feb 16 15:22 thold-v0.5.0.tgz
lftp [email protected]:/> mkdir txt00000000
mkdir ok, `txt00000000' created
lftp [email protected]:/> ls
drwxr-xr-x 2 2017 2017 4096 Feb 16 15:18 test00001
drwxr-xr-x 3 2017 2017 4096 Feb 16 11:39 test1
-rw-r--r-- 1 2017 2017 118252 Feb 16 15:22 thold-v0.5.0.tgz
drwxr-xr-x 2 2017 2017 4096 Feb 16 15:30 txt00000000
lftp [email protected]:/> quit
[root@client01 extra]# ll /home/virftp/
total 128
drwxr-xr-x 2 virftp virftp 4096 Feb 16 23:18 test00001
drwxr-xr-x 3 virftp virftp 4096 Feb 16 19:39 test1
-rw-r--r-- 1 virftp virftp 118252 Feb 16 23:22 thold-v0.5.0.tgz
drwxr-xr-x 2 virftp virftp 4096 Feb 16 23:30 txt00000000
此時生產的文件默認是在虛擬用戶virftp的家目錄下
參考文檔:
屬性參數介紹參考文檔:
http://moerjinrong.blog.51cto.com/11124564/1881357
虛擬用戶登陸配置參考文檔:
http://7179431.blog.51cto.com/7169431/1877508
ftp參數以及實踐參考文檔:http://123.57.218.140/15668

4.2vsftpd基於mysql實現虛擬用戶

  1. pam_mysql-0.7RC1編譯安裝
    yum install vsftpd –y
    vim /etc/vsftpd/vsftpd.conf 在此配置文件的最下面添加一下參數:
    pam_service_name=vsftp.mysql
    userlist_enable=YES
    tcp_wrappers=YES
    guest_enable=yes
    guest_username=virtual
    chroot_local_user=YES
    virtual_use_local_privs=YES
    user_config_dir=/etc/vsftpd/extra

上傳文件:pam_mysql-0.7RC1.tar.gz
cd /data/soft/

tar xf pam_mysql-0.7RC1.tar.gz -C /usr/local/
cd /usr/local/pam_mysql-0.7RC1/
./configure --with-openssl
編譯安裝報錯:
configure: error: Cannot find pam headers. Please check if your system is ready for pam module development.
解決辦法:
yum install pam-devel

重新編譯:
./configure --with-openssl
make &&make install
make[1]: Entering directory `/usr/local/pam_mysql-0.7RC1'
/bin/sh ./mkinstalldirs /lib/security
/bin/sh ./libtool --mode=install /usr/bin/install -c pam_mysql.la /lib/security/pam_mysql.la
/usr/bin/install -c .libs/pam_mysql.so /lib/security/pam_mysql.so
/usr/bin/install -c .libs/pam_mysql.lai /lib/security/pam_mysql.la
PATH="$PATH:/sbin" ldconfig -n /lib/security

Libraries have been installed in:
/lib/security
在/lib/security/ 下面生成兩個文件pam_mysql.so pam_mysql.la
[root@zabbix-server pam_mysql-0.7RC1]# ll /lib/security/*
-rwxr-xr-x. 1 root root 871 Feb 25 14:20 /lib/security/pam_mysql.la
-rwxr-xr-x. 1 root root 135902 Feb 25 14:20 /lib/security/pam_mysql.so
[root@zabbix-server pam_mysql-0.7RC1]# cp /lib/security/pam_mysql.so /lib64/security/
之前安裝好,ftp登陸時一直顯示530錯誤的原因就是在這,沒有拷貝pam_mysql.so文件到/lib64/security/ 這個目錄下 導致的

2.編輯文件vim /etc/pam.d/vsftpd
全部註釋掉裏面的內容,否則在後面會報錯的
[root@zabbix-server pam_mysql-0.7RC1]# cat /etc/pam.d/vsftpd
#%PAM-1.0
#session optional pam_keyinit.so force revoke
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
#auth include password-auth
#account include password-auth
#session required pam_loginuid.so
#session include password-auth
編輯新的配置文件/etc/pam.d/vsftp.mysql 寫入下面兩行內容

[root@zabbix-server pam_mysql-0.7RC1]# cat /etc/pam.d/vsftp.mysql
auth required /lib64/security/pam_mysql.so user=xiao passwd=redhat host=10.0.0.10 db=vsftp table=user usercolumn=name passwdcolumn=password crypt=2

account required /lib64/security/pam_mysql.so user=xiao passwd=redhat host=10.0.0.10 db=vsftp table=user usercolumn=name passwdcolumn=password crypt=2

注意此處必須爲/lib64/security/pam_mysql.so ,因爲服務器的系統爲x86_64爲的系統,如果爲32爲的系統則採用/lib/security/pam_mysql.so
參數註釋:
設置類型爲認證,並如果不通過就整個認證都不通過,但是還是要檢查後續認證屬性,指定認證文件庫文件並賦予參數,DB賬號是xiao 密碼是redhat mysql服務器地址是192.168.1.2 數據庫是vsftp 表是table 賬號字段是name 密碼字段是password 加密類型爲mysql。
3.添加虛擬用戶virtual並創建
[root@host1 ~]# useradd -s /sbin/nologin virtual 創建虛擬映射的實體賬號,並不允許登陸。
[root@host1 ~]# mkdir /etc/vsftpd/extra 創建虛擬用戶存放目錄。
[root@host1 ~]# vim /etc/vsftpd/extra/xiao 設定虛擬用戶的文件指定ftp上傳的目錄。
local_root=/tmp/xiaowu xiao的目錄爲/tmp/xiaowu
write_enable=YES 允許寫入。

4.創建數據庫vsftp,以及存儲ftp的登陸賬戶的表user
mysql> create database vsftp;
mysql> use vsftp;
Database changed
mysql> show tables;
mysql> create table user(name char(20) not null primary key,password char(48) not null);
mysql> insert into user values('xiao',password('redhat'));
mysql> grant select on vsftp.* to xiao@'%' identified by 'redhat';
mysql> flush privileges

[root@zabbix-server vsftpd]# cat /etc/vsftpd/extra/xiao
local_root=/tmp/xiaowu
write_enable=YES
[root@zabbix-server vsftpd]# chown -R virtual.virtual /tmp/xiaowu
指定用戶上傳的目錄並且授權virtual.virtual 這樣ftp登陸後就可以在此目錄下讀寫內容
5.測試:
1.登陸ftp創建文件和目錄測試
[root@zabbix-server xiao]# lftp [email protected]
Password:
lftp [email protected]:/> mkdir 1
mkdir ok, 1' created<br/>lftp [email protected]:/&gt; mkdir 2<br/>mkdir ok,2' created
lftp [email protected]:/> ls
drwxr-xr-x 2 890 890 4096 Feb 25 08:13 1
drwxr-xr-x 2 890 890 4096 Feb 25 08:13 2
lftp [email protected]:/> put /tmp/vsftpd.conf ./
put: /tmp/xiao: Is a directory
362 bytes transferred
Transfer of 1 of 2 files failed
lftp [email protected]:/> ls
drwxr-xr-x 2 890 890 4096 Feb 25 08:13 1
drwxr-xr-x 2 890 890 4096 Feb 25 08:13 2
-rw-r--r-- 1 890 890 362 Feb 25 08:14 vsftpd.conf

2.在mysql的是數據庫增加新的用戶wujianwei
mysql> insert into user values('wujianwei',password('wujianwei'));
Query OK, 1 row affected (0.05 sec)

mysql> select from user;
+-----------+-------------------------------------------+
| name | password |
+-----------+-------------------------------------------+
| xiao |
84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
| wujianwei | *101A59321A57E815F59012E62A366E084B8934A3 |
+-----------+-------------------------------------------+
2 rows in set (0.00 sec)
登陸ftp
[root@zabbix-server vsftpd]# lftp [email protected]
Password:
lftp [email protected]:~> ls
drwxr-xr-x 2 890 890 4096 Feb 25 09:01 test
drwxr-xr-x 3 890 890 4096 Feb 25 07:46 test001

此時顯示的是系統創建的虛擬用戶virtual默認的目錄
lftp [email protected]:/> mkdir test1
mkdir ok, test1' created<br/>lftp [email protected]:/&gt; mkdir test2<br/>mkdir ok,test2' created
lftp [email protected]:/> ls
drwxr-xr-x 2 890 890 4096 Feb 25 09:01 test
drwxr-xr-x 3 890 890 4096 Feb 25 07:46 test001
drwxr-xr-x 2 890 890 4096 Feb 25 09:08 test1
drwxr-xr-x 2 890 890 4096 Feb 25 09:08 test2
[root@zabbix-server virtual]# ll /home/virtual
total 16
drwxr-xr-x. 2 virtual virtual 4096 Feb 25 17:01 test
drwxr-xr-x. 3 virtual virtual 4096 Feb 25 15:46 test001
drwxr-xr-x. 2 virtual virtual 4096 Feb 25 17:08 test1
drwxr-xr-x. 2 virtual virtual 4096 Feb 25 17:08 test2

實踐可行的配置文件
[root@zabbix-server extra]# cat /etc/vsftpd/vsftpd.conf |grep -v "^#" >/tmp/vsftpd.conf
[root@zabbix-server extra]# cat /tmp/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES

pam_service_name=vsftp.mysql
userlist_enable=YES
tcp_wrappers=YES
guest_enable=yes
guest_username=virtual
chroot_local_user=YES
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/extra
測試可行的配置文件
配置文件參數介紹參考文檔:
http://123.57.218.140/15668

五.vsftpd.conf常用配置詳解

vsftp.conf屬性詳解,作爲查詢使用。
[env]
local_root=/var/ftp 指定ftp目錄。
write_enable=YES|NO 是否允許使用者上傳,全局。
use_locatime=YES|NO 是否啓用本地時間。
listen_port=# 指定vsftp所使用的端口。
ftpd_banner=text 顯示的文字說明。
banner_file=/path/file 指定某個純文字檔案座位登陸時的vsftp歡迎字眼。

[env] [mode]
listen=YES|NO 是否以 standalone(主動) 方式啓動,預設爲NO。
connect_from_port=21 主動式連線使用的FTP端口。
ftp_data_port=20 主動式連線使用的FTP數據端口
connect_timeout=60 主動模式下,在#秒後得不到迴應就強制中斷。

pasv_enable=YES|NO 是否開啓被動(passive)連線模式。
accept_timeout=120 被動模式下,服務器等待客戶端超過#秒就強制斷線。
pasv_min_port=0,pasv_max_port=0 被動模式時,使用的port範圍,0表示1-65535隨機採用不限制。

data_connection_timeout=30 如果已經建立連接,但是因爲線路問題導致在#秒被沒有完成資料的傳輸,就強制踢除客戶端。
idle_session_timeout=60 如果使用者在#秒內都沒有命令動作就強制斷線。
max_clients=10 同一時間最大的連接數。
max_per_ip=5 同一IP同一時間可以允許多少連線。

[env] [message]
dirmessage_enable=YES|NO 當進入特定目錄時會顯示提示,顯示內容爲每一個目錄下面的隱藏文件.message。
message_file=.message 顯示的是.message就是這個選項來指定的。

[anonymous] [mod]
anonymous_enable=YES|NO 是否允許匿名用戶登錄,預設爲YES,如果關閉則所有的匿名設置屬性都將無效。
anon_root=/path/filename 指定匿名用戶ftp目錄
anon_world_readable_only=YES|NO 是否允許匿名用戶具有下載的權限,預設爲YES。

anon_other_write_enable=YES|NO 是否允許匿名用戶具有寫入(W)的權限,如刪除與更改伺服器上的檔案與檔名等權限,預設爲NO。
如果要設置爲YES,則需要調整開放給anonymous寫入目錄的權限,即開放對應PID(anonymous賬戶)的W權限。
anon_mkdir_write_enable=YES|NO 是否允許匿名用戶具有創建目錄的權限 預設爲NO。
如果anon_other_write_enable=NO 此屬性則不能生效,必須更改爲YES。
anon_upload_enable=YES|NO 是否允許匿名用戶上傳文件,預設爲NO
如果anon_other_write_enable=NO 此屬性不能生效。

[anonymous] [password check]
deny_email_enable=YES|NO 是否抵擋不允許的email登陸。
banned_email_file=/etc/vsftpd/banned_emails 拒絕登陸的email的list,需要deny_mail_enable設置爲YES。
no_anon_passwd=YES|NO 是否要略過密碼check環節。

[anonymous] [other]
anon_max_rate=# 限制anonymous的傳輸速度,單位爲Byte/s,如果爲0則表示不限制。
anon_umask=077 設置上傳文件的默認掩碼。

[real user]
local_enable=YES|NO 是否允許實體用戶登陸。
local_max_rate=# 限制real user的傳輸速度,單位爲Byte/s,如果爲0則表示不限制。
allow_writeable_chroot=YES|NO 是否限制ftp文件夾對實體用戶的W權限,如果爲NO,則設置W權限時,會報錯。

[real user] [change root]
chroot_local_enable=YES|NO 開啓目錄鎖定功能。
chroot_list_enable=YES|NO 開機目錄鎖定的list限制。

chroot_list_enable                 result
     YES             所有用戶都鎖定目錄,list中的用戶不鎖定。
      NO              所有用戶都不鎖定目錄,list中的用戶鎖定。

chroot_list_file=/etc/vsftpd/chroot_list : 指定chroot list。

[real user] [userlist_deny]
userlist_enable=YES|NO 是否開啓訪問限制功能。
userlist_deny=YES|NO 是否開啓list訪問限制。

 userlist_deny                     result
      YES             所有用戶都可以訪問,list中的用戶無法訪問。
      NO              所有用戶都無法訪問,list中的用戶可以訪問。

userlist_file=/etc/vsftpd/user_list : 指定userlist。

[safe]
acsii_download_enable=YES|NO 是否指定用戶使用acsii格式下載檔案。
acsii_upload_enable=YES|NO 是否指定用戶使用acsii格式上傳檔案。
one_process_model=YES|NO 設定爲YES時,每一個連線都會擁有一個單獨的precess負責,都夠提升vsftp的性能,但是會佔用系統資源,建議設置爲NO
tcp_wrappers=YES|NO 是否支援TCP Wrappers。
pam_service_name=vsftpd pam模組的名稱。

[safe] [log]
xferlog_enable=YES|NO 是否在上傳與下載檔案時將信息記錄在日誌文件中。
xferlog_file=/var/log/xferlog 生成的日誌文件存放的位置。
xferlog_std_format=YES|NO 日誌文件通過標準的xferlog格式書寫,難讀。
dual_log_enable=YES|NO 是否生成額外的一個log文檔。
vsftpd_log_file=/var/log/vsftpd.log 額外log文檔的存放位置。

[safe] [process user]
nopriv_user=username 以指定的user作爲process的user,防止被***時,僅僅只會獲得指定user的低權限,不會對系統造成太大的傷害。

[guest]
guest_enable=YES|NO 所有的實體賬號登陸都視爲以guest的身份登陸。
guest_username=username 指定訪客使用哪個用戶的身份。
virtual_use_local_privs=YES 爲YES時,虛擬用戶權限與實體用戶一樣。

六常見問題:
1.ftp無法登陸,請檢查你的文件夾權限並檢查主配置文件中的屬性是否打開了,如anonymous_enable,local_enable等。
2.無法切換目錄或者個別用戶無法登陸,請檢查chroot_list,ftpusers,user_list文件內容或者主配置文件中的配置是否正確。
3.mysql存儲無法登陸,請查看日誌文件/var/log/secure,/var/log/message,/var/log/xferlog,並確認認證文件沒有寫錯,仔細檢查配置文件與目錄和被映射的實體用戶的權限。
如果遇到密碼錯誤,檢查密碼文件,如mysql表中字段長度類型是否正確,數據庫用戶是否能遠程登陸訪問數據庫user表。
4.如果遇到在編譯安裝pam_mysql模塊中遇到configure: error: Your system doesn’t appear to be configured to use PAM. Perhaps you need to specify the correct location where the PAM modules reside. 情況,可以嘗試添加一個選項 –with-pam-mods-dir=/lib/security/ 自己手動指明pam庫的存放位置。
5.無法正常工作時,請檢查端口是否開啓,或檢查防火牆和selinux是否有配置正確。
6.防火牆影響:解決:modprobe ip_conntrack_ftp
參考文檔:http://www.myexception.cn/vsts/480445.html

操作實踐:
環境:mysql數據庫均爲yum安裝,系統爲centos6.7

[root@zabbix-server pam_mysql-0.7RC1]# rpm -qa mysql*
mysql-connector-odbc-5.1.5r1144-7.el6.x86_64
mysql-libs-5.1.73-7.el6.x86_64
mysql-5.1.73-7.el6.x86_64
mysql-devel-5.1.73-7.el6.x86_64
mysql-server-5.1.73-7.el6.x86_64

vsftpd介紹參考文檔:
https://blog.csdn.net/yskcg/article/details/5859919

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章