相關環境:
redhat AS4.6 vsftpd-1.2.0.tar.gzshell
1、以系統用戶訪問ftp服務器數據庫
一、卸載系統自帶的ftp軟件(若是有)
[root@test root]# rpm -qa | grep ftp
[root@test root]# rpm -e ftp lftp
[root@test root]# cd /usr/local/src 瀏覽器
2. 開始編譯與安裝 固然也能夠yum方式安裝
# vsftpd 預設安裝的路徑爲:
# 全部可執行檔放置在 /usr/local/sbin 裏面;
# man page 放置在 /usr/local/man/man5 與 /usr/local/man/man8
# 若 super daemon 爲 xinetd 時,會複製一份啓動檔案到 /etc/xinetd.d 去! 服務器
[root@test src]# tar -zxvf /root/vsftpd-1.2.0.tar.gz
[root@test src]# cd vsftpd-1.2.0/ # 在這個目錄下有個 INSTALL 與 README 請務必察看喔!
[root@test vsftpd-1.2.0]# make # 編譯的過程可能有 warning 的訊息,只要不是 Error 就能夠不理他!
[root@test vsftpd-1.2.0]# make install
[root@test vsftpd-1.2.0]# mkdir /etc/ftp
[root@test vsftpd-1.2.0]# cp vsftpd.conf /etc # 創建主配置文件
[root@test vsftpd-1.2.0]# cp RedHat/vsftpd.pam /etc/pam.d/vsftpd # 將 PAM 身份認證模塊給他放進去系統裏面!
[root@test vsftpd-1.2.0]# useradd -M ftp -d /var/ftp # 創建 ftp 這個使用者以及他的家目錄:# 若原本就存在 ftp 這個使用者,那就不須要進行新增!
[root@test vsftpd-1.2.0]# mkdir -p /var/ftp
[root@test vsftpd-1.2.0]# chown root:root /var/ftp # 更改目錄權限
[root@test vsftpd-1.2.0]# chmod 755 /var/ftp
[root@test vsftpd-1.2.0]# mkdir -p /usr/share/empty # 創建 vsftpd 須要的特殊目錄
3. 若是須要移除時:
# 若是想要移除 vsftp 時,能夠這樣作
[root@test vsftpd-1.2.0]# rm /usr/local/sbin/vsftpd
[root@test vsftpd-1.2.0]# rm /usr/local/man/man5/vsftpd.conf.5
[root@test vsftpd-1.2.0]# rm /usr/local/man/man8/vsftpd.8
[root@test vsftpd-1.2.0]# rm /etc/xinetd.d/vsftpd
[root@test vsftpd-1.2.0]# rm /etc/ftp/vsftpd.conf session
4. 創建上傳目錄:
[root@test vsftpd-1.2.0]# cd /root
[root@test ~]# mkdir -p /var/ftp/upload
[root@test ~]# chown ftp /var/ftp/upload app
5. 編輯配置文件
[root@test root]# more /etc/ftp/vsftpd.conf | grep -v "#" | moresocket
#####系統相關設置
dirmessage_enable=YES # 顯示目錄信息
xferlog_enable=YES # 記錄用戶的上傳下載行爲
connect_from_port_20=YES # 使用20端口傳輸數據
xferlog_file=/var/log/vsftpd.log # log文件
idle_session_timeout=600 # 鏈接超時600s
data_connection_timeout=120 # 數據傳輸超時120s
use_localtime=YES # 使用本地時間
xferlog_std_format=YES # 使用同wu ftp相同的文件格式
pam_service_name=vsftpd # pam 模塊名稱
tcp_wrappers=YES # tcp_wrappers支持
listen_port=21 # ftp 端口
listen=YES # 以獨立進程啓動
max_clients=50 # 最大客戶端
max_per_ip=5 # 同一IP最大鏈接數
ascii_upload_enable=NO # 不使用ascii格式上傳
ascii_download_enable=NO # 不使用ascii格式下載
nopriv_user=ftp # 服務運行者爲 ftp
write_enable=YES # 寫入權限
ls_recurse_enable=NO #禁止用戶登錄FTP後使用"ls -R"的命令。該命令會對服務器性能形成巨大開銷。若是該項被容許,那麼擋多用戶同時使用該命令時將會對該服務器形成威脅.tcp
####本地用戶訪問相關設置
local_enable=YES # 容許本地用戶訪問
local_umask=022 # 本地用戶上傳的文件權限
chroot_list_enable=YES # 將用戶限止在本身的主目錄內
chroot_list_file=/etc/ftp/vsftpd.chroot_list # 限定不能更改目錄的用戶
userlist_enable=YES # 指定能登陸的用戶
userlist_deny=NO # 指定不能登陸的用戶
userlist_file=/etc/ftp/vsftpd.user_list # 指定能登陸的用戶
local_max_rate=10000 # 本地用戶傳輸速度 10000 bytes/secondide
####匿名用戶訪問相關設置
anonymous_enable=NO # 匿名用戶登陸
anon_other_write_enable=NO # 匿名用戶寫入權限
anon_mkdir_write_enable=NO # 匿名用戶創建目錄權限
anon_upload_enable=NO # 匿名用戶上傳數據
deny_email_enable=YES # 限止某email address 用戶使用匿名訪問
banned_email_file=/etc/ftp/vsftpd.banned_emails # 禁止登陸的email address
anon_max_rate=3000 # 匿名用戶傳輸速度 3000 bytes/second工具
####虛擬用戶訪問相關設置
guest_enable=YES # 啓用虛擬用戶
guest_username=vsftp # 虛擬用戶對應的系統用戶名
user_config_dir=/etc/ftp/vsftpd_user_conf # 虛擬用戶的個性配置文件目錄
創建相關文件
[root@test root]# touch /etc/ftp/vsftpd.chroot_list # 此文件內的用戶不能更改目錄 每行一個用戶名
[root@test root]# touch /etc/ftp/vsftpd.user_list # 只容許此文件內的列出的用戶登陸
每行一個用戶名
[root@test root]# touch /etc/ftp/vsftpd.banned_emails # 此文件內的email 不能login
每行一個eamil地址
[root@test root]# vi /etc/pam.d/vsftpd 創建pam文件 注意:若是是64位系統,那麼下面的路徑就是/lib64/security/ ,固然也能夠不寫這個路徑
#%PAM-1.0
auth required /lib/security/pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
auth required /lib/security/pam_pwdb.so shadow nullok
auth required /lib/security/pam_shells.so
account required /lib/security/pam_pwdb.so
session required /lib/security/pam_pwdb.so
[root@test root]# vi /etc/xinetd.d/vsftpd
# default: on
# description:
# The vsftpd FTP server serves FTP connections. It uses
# normal, unencrypted usernames and passwords for authentication.
# vsftpd is designed to be secure.
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/vsftpd
# server_args =
# log_on_success += DURATION USERID
# log_on_failure += USERID
nice = 10
disable = yes # 關閉xinetd模式啓動vsftpd
}
[root@test root]# vsftpd & # 啓動ftp服務器
[root@test root]# echo "/usr/local/sbin/vsftpd &" >> /etc/rc.local # 開機自啓動
6. 測試
創建測試用戶
[root@test root]# useradd -p test1 test1
[root@test root]# useradd -p test2 test2
[root@test root]# useradd -p test3 test3
[root@test root]# more /etc/ftp/vsftpd.user_list # 更改/etc/ftp/vsftpd.user_list內容以下
test2 # 容許test2 、test3訪問ftp服務器
test3
[root@test root]# more /etc/ftp/vsftpd.chroot_list # 更改/etc/ftp/vsftpd.chroot_list內容以下
test2 # 禁止test1 更改主目錄
使用ftp工具或是瀏覽器時行訪問,得出的結果應該是:
匿名用戶不能訪問
test1 用戶不能訪問
test2 用戶能訪問 可是隻能在自的主目錄中 而且可讀寫
test3 用戶能訪問 也能夠自由切換工做目錄 而且可讀寫
用戶的讀寫權限 需系統文件權限的支持。
完成
2、以虛擬用戶訪問ftp服務器 (推薦方式)
1. 創建虛擬用戶的用戶名和密碼,
[root@test root]# vi /etc/ftp/logins.txt
t1
pass1
t2
pass2
t3
pass3
格式以下:
<用戶名>
<密 碼>
<用戶名>
<密 碼>
2.創建虛擬用戶數據庫
[root@test root]# db_load -T -t hash -f /etc/ftp/logins.txt /etc/ftp/vsftpd_login.db
[root@test root]# chmod 600 /etc/vsftpd_login.db # 創建虛擬用戶數據庫
3.創建pam認證文件,
[root@test root]# vi /etc/pam.d/vsftpd.vu 注意:若是是64位系統,那麼下面的路徑就是/lib64/security/ ,固然也能夠不寫這個路徑
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login
#/etc/vsftpd_login指的就是以前創建的虛擬用戶數據庫
4.編輯配置文件
[root@test root]# more /etc/ftp/vsftpd.conf | grep -v "#" | more
#####系統相關設置
dirmessage_enable=YES # 顯示目錄信息
xferlog_enable=YES # 記錄用戶的上傳下載行爲
connect_from_port_20=YES # 使用20端口傳輸數據
xferlog_file=/var/log/vsftpd.log # log文件
idle_session_timeout=600 # 鏈接超時600s
data_connection_timeout=120 # 數據傳輸超時120s
use_localtime=YES # 使用本地時間
xferlog_std_format=YES # 使用同wu ftp相同的文件格式
##############################更改此內容##############################################
pam_service_name=vsftpd.vu # pam 模塊名稱 這是咱們以前建的pam文件
######################################################################################
tcp_wrappers=YES # tcp_wrappers支持
listen_port=21 # ftp 端口
listen=YES # 以獨立進程啓動
max_clients=50 # 最大客戶端
max_per_ip=5 # 同一IP最大鏈接數
ascii_upload_enable=NO # 不使用ascii格式上傳
ascii_download_enable=NO # 不使用ascii格式下載
nopriv_user=ftp # 服務運行者爲 ftp
write_enable=YES # 寫入權限
ls_recurse_enable=NO #禁止用戶登錄FTP後使用"ls -R"的命令。該命令會對服務器性能形成巨大開銷。若是該項被容許,那麼擋多用戶同時使用該命令時將會對該服務器形成威脅.
####本地用戶訪問相關設置
local_enable=YES # 容許本地用戶訪問
local_umask=022 # 本地用戶上傳的文件權限
chroot_list_enable=YES # 將用戶限止在本身的主目錄內
chroot_list_file=/etc/ftp/vsftpd.chroot_list # 限定不能更改目錄的用戶
userlist_enable=YES # 指定能登陸的用戶
userlist_deny=NO # 指定不能登陸的用戶
userlist_file=/etc/ftp/vsftpd.user_list # 指定能登陸的用戶
local_max_rate=10000 # 本地用戶傳輸速度 10000 bytes/second
####匿名用戶訪問相關設置
anonymous_enable=NO # 匿名用戶登陸
anon_world_readable_only=NO # 匿名只讀
anon_other_write_enable=NO # 匿名用戶寫入權限
anon_mkdir_write_enable=NO # 匿名用戶創建目錄權限
anon_upload_enable=NO # 匿名用戶上傳數據
deny_email_enable=YES # 限止某email address 用戶使用匿名訪問
banned_email_file=/etc/ftp/vsftpd.banned_emails # 禁止登陸的email address
anon_max_rate=3000 # 匿名用戶傳輸速度 3000 bytes/second
####################添加如下內容###########################
####虛擬用戶訪問相關設置
guest_enable=YES # 啓用虛擬用戶
guest_username=ftpvu # 虛擬用戶對應的系統用戶名
user_config_dir=/etc/ftp/vsftpd_user_conf # 虛擬用戶的個性配置文件目錄
###########################################################
5.創建相關文件
[root@test root]# mkdir /etc/ftp/vsftpd_user_conf # 虛擬用戶的個性配置文件目錄
[root@test root]# useradd -d /var/ftp -s /sbin/nologin -g ftp ftpvu # 虛擬用戶對應的系統用戶名
[root@test root]# chown ftpvu.ftp /var/ftp
[root@test root]# mkdir -pv /var/ftp/t1 /var/ftp/t2 /var/ftp/t3 # 創建各虛擬用戶的主目錄
6.爲各用戶單獨設置訪問權限
[root@test root]# vi /etc/ftp/vsftpd_user_conf/t1
local_root=/var/ftp/t1 # 將用戶t1訪問限定在/var/ftp/t1中
[root@test root]# vi /etc/ftp/vsftpd_user_conf/t2
local_root=/var/ftp/t2 # 將用戶t2訪問限定在/var/ftp/t2中
anon_other_write_enable=YES # 寫入權限
anon_mkdir_write_enable=YES # 創建目錄權限
anon_upload_enable=YES # 用戶上傳數據
[root@test root]# vi /etc/ftp/vsftpd_user_conf/t3
anon_other_write_enable=YES # 寫入權限
anon_mkdir_write_enable=YES # 創建目錄權限
anon_upload_enable=YES # 用戶上傳數據
[root@test root]# more /etc/ftp/vsftpd.user_list # 更改/etc/ftp/vsftpd.user_list內容以下
t1 # 容許t一、t二、t3訪問ftp服務器
t2
t3
[root@test root]# more /etc/ftp/vsftpd.chroot_list # 更改/etc/ftp/vsftpd.chroot_list內容以下
t1 # 禁止t一、t2更改主目錄
t2
7.測試
使用ftp工具或是瀏覽器時行訪問,得出的結果應該是:
匿名用戶不能訪問
t1 用戶能訪問,只讀權限,只能在主目錄(/var/ftp/t1)裏活動
t2 用戶能訪問,讀寫權限,只能在主目錄(/var/ftp/t2)裏活動
t3 用戶能訪問,讀寫權限,能在/var/ftp裏活動,可切換目錄
完成
3、常見錯誤
1. ftp登錄時候,500 cannot locate user****
緣由:多是用戶名有問題
注意看 logins.txt文件和
vsftpd.conf裏guest_username有沒有錯,好比多個空格!
2. 530 login failed
pam驗證錯誤,檢查下/etc/pam.d/***配置文件,看看是否是指向正確的位置
3. 登錄後533 cannot create file
緣由,guest_username對目標文件夾沒有權限
4. 530 permission denied
緣由,看一下有沒有權限訪問目錄,還有用戶有沒有加到/etc/ftp/vsftpd.user_list文件中。
4、補充:
若是想更改用戶類型,好比原本是系統用戶訪問ftp,如今想要用虛擬用戶訪問ftp,更改vsftpd.conf中的pam_service_name=vsftpd 改成 pam_service_name=vsftpd.vu, 反之亦然。