安裝vsftpd服務:
使用本地使用者登陸:
可以隨意切換到任意目錄
[root@wadeson vsftpd]# service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
[root@wadeson vsftpd]# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (127.0.0.1:root): ftp 匿名使用者使用ftp就可以,密碼為空
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,70,12).
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 4096 Jul 11 14:11 pub
drwxr-xr-x 4 14 50 4096 Jul 12 01:01 test
226 Directory send OK.
ftp> cd test
250 Directory successfully changed.
ftp> put /etc/inittab
local: /etc/inittab remote: /etc/inittab
227 Entering Passive Mode (127,0,0,1,103,252).
553 Could not create file.
ftp>
可以看出還是不能上傳,但是可以建立檔案
ftp> mkdir test02
257 "/test/test02" created
為啥可以建立檔案,是因為在test目錄下面的許可權為:
[root@wadeson ftp]# ll test/
total 528
-rw-------. 1 ftp ftp 521169 Jul 12 09:00 2016-5.7z
drwx------. 2 ftp ftp 4096 Jul 12 09:00 test
drwx------. 2 ftp ftp 4096 Jul 12 09:01 test01
drwx------. 2 ftp ftp 4096 Jul 12 10:37 test02
-rw-------. 1 ftp ftp 1806 Jul 11 23:02 Tsgateway.RDP
現在使用ftp客戶端工具匿名使用者登陸:
可以看出這種情況下可以傳輸成功,但是ftp命令列下面一直卻失敗
現在將匿名的設定全部關閉掉,使用本地作限制:
[root@wadeson vsftpd]# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (127.0.0.1:root): wadeson
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,244,146).
150 Here comes the directory listing.
226 Directory send OK.
ftp> pwd
257 "/home/wadeson"
ftp> put /etc/inittab
local: /etc/inittab remote: /etc/inittab
227 Entering Passive Mode (127,0,0,1,125,218).
553 Could not create file. 這種方式傳輸檔案還是不行
ftp> mkdir test
257 "/home/wadeson/test" created
ftp> ls
227 Entering Passive Mode (127,0,0,1,141,36).
150 Here comes the directory listing.
drwxr-xr-x 2 500 500 4096 Jul 12 02:44 test
226 Directory send OK.
但是這種方式傳輸又可以:
本地使用者登陸可以隨意切換目錄,現在將它限制一下,只能在自己家目錄訪問:
只需要將chroot_local_user=YES這一行啟用:
[root@wadeson vsftpd]# service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
[root@wadeson vsftpd]# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (127.0.0.1:root): wadeson
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,71,18).
150 Here comes the directory listing.
-rw-r--r-- 1 500 500 521169 Jul 07 04:21 2016-5.7z
drwxr-xr-x 2 500 500 4096 Jul 12 02:44 test
226 Directory send OK.
ftp> cd /var
550 Failed to change directory.
現在將本地的使用者切換目錄做限制,哪些可以切換哪些不能切換:
將配置檔案做如下修改:
#chroot_local_user=YES
chroot_list_enable=YES 啟用列表檔案中的本地使用者不能切換目錄
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list 將本地使用者存在這個檔案列表中,這個檔案中儲存了wadeson這個使用者
現在進行測試:
root@wadeson vsftpd]# chmod 600 chroot_list
[root@wadeson vsftpd]# service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
[root@wadeson vsftpd]# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (127.0.0.1:root): wadeson
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,223,113).
150 Here comes the directory listing.
-rw-r--r-- 1 500 500 521169 Jul 07 04:21 2016-5.7z
drwxr-xr-x 2 500 500 4096 Jul 12 02:44 test
226 Directory send OK.
ftp> pwd
257 "/"
ftp> cd /var
550 Failed to change directory.
然後更換一個本地使用者:
[root@wadeson vsftpd]# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (127.0.0.1:root): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,186,236).
150 Here comes the directory listing.
226 Directory send OK.
ftp> pwd
257 "/home/test"
ftp> cd /var/
250 Directory successfully changed.
ftp> pwd
257 "/var"
發現可以隨意切換目錄,現在目的已經成功了
現在將本地使用者做限制,一部分可以登陸ftp,一部分不能登陸:
配置如下:
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list 在該檔案中的本地使用者都不能登陸ftp
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
向裡面新增使用者wadeson
然後測試:
[root@wadeson vsftpd]# service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
[root@wadeson vsftpd]# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (127.0.0.1:root): wadeson
530 Permission denied.
Login failed.
而另外一個剛剛建立的test使用者依然可以登陸:
[root@wadeson vsftpd]# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (127.0.0.1:root): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/home/test"
如果將userlist_deny=YES改為NO那麼該/etc/vsftpd/user_list 中的本地使用者可以登陸,沒有存進去的使用者則不能登陸
現在開始配置基於虛擬使用者登陸的機制:
總共有七個步驟:
1、建立虛擬ftp使用者的賬號資料庫檔案
2、建立ftp根目錄及虛擬使用者對映的系統使用者
3、建立支援虛擬使用者的PAM認證檔案
4、在vsftpd.conf檔案中新增支援配置
5、為個別虛擬使用者建立獨立的配置檔案
6、重新載入vsftpd配置
7、使用虛擬ftp賬戶訪問測試
開始操作第一步:
1、建立虛擬ftp使用者的賬號資料庫檔案
建立虛擬賬戶的賬戶名和密碼列表
[root@wadeson vsftpd]# vim vuser.txt
admin 賬號
12345 密碼
test 賬號
12345 密碼
將賬號密碼列表檔案轉化為db:
[root@wadeson vsftpd]# db_load -T -t hash -f vuser.list vuser.db
修改兩個檔案的許可權:
[root@wadeson vsftpd]# chmod 600 vuser.*
-rw-------. 1 root root 12288 Jul 12 11:19 vuser.db
-rw-------. 1 root root 40 Jul 12 11:14 vuser.txt
2、建立ftp根目錄及虛擬使用者對映的系統使用者
[root@wadeson ~]# mkdir /var/ftproot
drwxr-xr-x. 2 root root 4096 Jul 12 11:21 ftproot
建立一個系統使用者用來被虛擬使用者對映使用:
[root@wadeson var]# useradd -d /var/ftproot/ -s /sbin/nologin ftpuser 系統使用者ftpuser
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
[root@wadeson var]# cat /etc/passwd
ftpuser:x:502:502::/var/ftproot/:/sbin/nologin
[root@wadeson var]# chown ftpuser:ftpuser /var/ftproot/
drwxr-xr-x. 2 ftpuser ftpuser 4096 Jul 12 11:21 ftproot
3、建立支援虛擬使用者的PAM認證檔案
[root@wadeson var]# cd /etc/pam.d/
[root@wadeson pam.d]# vim vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/ets/vsftpd/vuser
4、在vsftpd.conf檔案中新增支援配置
pam_service_name=vsftpd.vu
guest_enable=YES
guest_username=ftpuser
整個vsftpd.conf的配置內容:
anonymous_enable=NO
local_enable=YES
#write_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
listen_port=21
userlist_enable=YES
chroot_local_user=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=ftpuser (如果系統上沒有該使用者,需要建立)
pam_service_name=vsftpd.vu
user_config_dir=/etc/vsftpd/vsftpd_user_conf
virtual_use_local_privs=YES
pasv_min_port=50000
pasv_max_port=60000
pasv_enable=yes
max_clients=200
max_per_ip=4
idle_session_timeout=600
ftpd_banner=Welcome to opendoc FTP service.
write_enable=YES
anonymous_enable=NO
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_umask=022
download_enable=Yes
local_root=/var/ftproot 配置了chroot不能隨意切換目錄,整個admin虛擬使用者許可權為可建立可刪除,可上傳,可下載
配置另一個test使用者: 該使用者只能下載