首先解壓縮:tar -zxfv vsftpd-2.0.5.tar.gz
編譯前請打開:builddefs.h
#ifndef VSF_BUILDDEFS_H
#define VSF_BUILDDEFS_H
#undef VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#undef VSF_BUILD_SSL
這裏#define VSF_BUILD_PAM指定了要vsftpd支持pam,所以不要改成#undef VSF_BUILD_PAM
並將所有undef 改爲define
檢查完builddefs.h後,make編譯,用ldd命令檢查生成的vsftpd文件有沒有加載/lib/libpam.so.0
# ldd vsftpd
引用:
libwrap.so.0 => /usr/lib/libwrap.so.0 (0x003f4000)
libnsl.so.1 => /lib/libnsl.so.1 (0x003a4000)
libpam.so.0 => /lib/libpam.so.0 (0x00c38000)
libdl.so.2 => /lib/libdl.so.2 (0x00ac6000)
libresolv.so.2 => /lib/libresolv.so.2 (0x00c14000)
libutil.so.1 => /lib/libutil.so.1 (0x00479000)
libcap.so.1 => /lib/libcap.so.1 (0x00af1000)
libssl.so.4 => /lib/libssl.so.4 (0x0036e000)
libcrypto.so.4 => /lib/libcrypto.so.4 (0x0022f000)
libc.so.6 => /lib/tls/libc.so.6 (0x0099a000)
libaudit.so.0 => /lib/libaudit.so.0 (0x00c29000)
/lib/ld-linux.so.2 (0x00981000)
libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x0031a000)
libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x00123000)
libcom_err.so.2 => /lib/libcom_err.so.2 (0x0011e000)
libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x00207000)
libz.so.1 => /usr/lib/libz.so.1 (0x00bce000)
如果沒有libpam.so.0 那麼需要安裝pam-devel包:
然後重新編譯vsftpd :
make clean
make
1. 編譯成功後將以下文件複製到指定位置:
cp vsftpd /usr/local/sbin/vsftpd #這個是vsftpd執行文件,放在哪裏無所謂,複製不復制都可以
cp vsftpd.conf.5 /usr/local/share/man/man5
cp vsftpd.8 /usr/local/share/man/man8
cp vsftpd.conf /etc/vsftpd/ #vsftpd主配置文件
cp RedHat/vsftpd.pam /etc/pam.d/ftp #PAM驗證文件,以允許本地用戶登錄VSFTPD
2. 添加一個系統用戶作爲FTP虛擬用戶,在MYSQL中設置虛擬用戶賬號和密碼
# useradd vsftpdguest
# chown /var/FTP vsftpdguest.vsftpdguest
# chmod 700 /var/FTP
爲確保安全 修改 /etc/passwd文件,將其中vsftpdguest對應的條目改爲:
vsftpdguest:x:511:511::/var/FTP:/sbin/nologin
使vsftpdguest賬號只能作爲FTP用戶,而不能作爲一個系統用戶登陸。
下面創建用於登陸驗證的mysql數據庫:
mysql>create database vsftpdvu;
mysql>use vsftpdvu;
mysql>create table users(name char(16) binary,passwd char(16) binary);
mysql>insert into users (name,passwd) values ('xiaotong',password('qqmywife'));
mysql>insert into users (name,passwd) values ('xiaowang',password('ttmywife'));
mysql>grant select on vsftpdvu.users to vsftpdguest@localhost
mysql>set password for sftpdguest@localhost =password('123456')
mysql>quit
3. 配置pam_mysql
編輯/etc/pam.d/ftp文件:
內容修改如下:
auth required /lib/security/pam_mysql.so user=vsftpdguest passwd=123456 host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2
account required /lib/security/pam_mysql.so user=vsftpdguest passwd=123456 host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2
以上粗體部分意義依次如下:pam_mysql安全嚴整模塊包的位置,mysql數據庫用戶名,密碼,數據庫服務器地址,數據庫名,虛擬用戶表,虛擬用戶名稱列,虛擬用戶密碼列,加密方式:0爲明碼,1爲操作系統RAS加密,2爲MYSQL password方法加密
4. 配置vsftpd.conf
anonymous_enable=NO #禁止匿名
local_enable=YES #允許本地登錄
write_enable=YES #允許寫,如需上傳,則必須
local_umask=027 #將上傳文件的權限設置爲:777-local_umask
anon_upload_enable=YES #允許虛擬用戶和匿名用戶上傳
anon_other_write_enable=YES #允許虛擬用戶和匿名用戶修改文件名和刪除文件
dirmessage_enable=YES
xferlog_enable=YES #打開日誌記錄
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log #日誌存放位置
xferlog_std_format=YES #標準日誌格式
idle_session_timeout=600 #空閒連接超時
data_connection_timeout=120
ftpd_banner=Welcome to ChinaRise FTP service #歡迎信息
guest_enable=yes #允許虛擬用戶
guest_username=vsftpdguest #虛擬用戶使用的系統賬號
virtual_use_local_privs=YES #虛擬用戶擁有本地系統權限
chroot_local_user=NO
chroot_list_enable=YES
#以下兩行將虛擬用戶限制在其目錄下,不能訪問其他目錄,或者直接用
chroot_local_user=YES
listen=yes #監聽/被動模式
listen_port=21 #監聽端口
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list #虛擬用戶名單保存在文件/etc/vsftpd/vsftpd.chroot_list 中
user_config_dir=/etc/vsftpd/vsftpd_user_conf #每個虛擬用戶名的更加詳細的培植保存在/etc/vsftpd/vsftpd_user_conf 中
5. 虛擬用戶其他設置
在/etc/vsftpd/vsftpd.chroot_list 文件中寫入允許登陸的虛擬用戶名稱,每行一個
在/etc/vsftpd/vsftpd_user_conf 文件夾中創建一個以虛擬用戶用戶名命名的文件,
寫入:local_root = /var/FTP/子目錄名
然後在/var/FTP下創建一個對應的目錄即可
6. 安裝完成後出現兩個問題:
1: 500 OOPS: vsftpd: both local and anonymous access disabled!
通過在vsftpd.conf中將local_enable=YES解決
2 : [右] 500 OOPS: cannot locate user entry:ftpsecure
[右] 500 OOPS: child died
3. 可以上傳空文件夾,可以下載,但是不能上傳文件
這是因爲公司硬件防火牆設置導致的,將ftp上傳的流攔截掉了,所以導致傳輸錯誤.