FTP介紹
FTP是File Transfer Protocol(檔案傳輸協定,簡稱文傳協定)的英文簡稱,用于在Internet上控制檔案的雙向傳輸。FTP的主要作用就是讓使用者連接配接一個遠端計算機(這些計算機上運作着FTP伺服器程式),并檢視遠端計算機中的檔案,然後把檔案從遠端計算機複制到本地計算機,或把本地計算機的檔案傳送到遠端計算機。小公司用的多,大企業不用FTP,因為不安全。
使用vsftpd搭建ftp服務
1.安裝及建立賬号
[root@gary-tao ~]# yum install -y vsftpd
[root@gary-tao ~]# useradd -s /sbin/nologin virftp
//建立一個普通使用者,為了以這個使用者的身份來傳檔案,-s是用來指定shell,/sbin/nologin是使這個使用者不能登入,保證安全
[root@gary-tao ~]# vim /etc/vsftpd/vsftpd_login
//内容如下,奇數行為使用者名,偶數行為密碼,多個使用者就寫多行
testuser1
aminglinux
[root@gary-tao ~]# chmod 600 /etc/vsftpd/vsftpd_login
//更改檔案權限,提升安全級别
[root@gary-tao ~]# cat /etc/vsftpd/vsftpd_login
testuser1
aminglinux
[root@gary-tao ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db
//vsfpd使用的密碼檔案不是明文的,需要生成對應的庫檔案
[root@gary-tao ~]# ls -l /etc/vsftpd/
總用量 36
-rw------- 1 root root 125 8月 3 14:10 ftpusers
-rw------- 1 root root 361 8月 3 14:10 user_list
-rw------- 1 root root 5030 8月 3 14:10 vsftpd.conf
-rwxr--r-- 1 root root 338 8月 3 14:10 vsftpd_conf_migrate.sh
-rw------- 1 root root 21 1月 16 17:12 vsftpd_login
-rw-r--r-- 1 root root 12288 1月 16 17:16 vsftpd_login.db
[root@gary-tao ~]# mkdir /etc/vsftpd/vsftpd_user_conf
//建立虛拟賬号相關的目錄以及配置檔案
[root@gary-tao ~]# cd /etc/vsftpd/vsftpd_user_conf/
2.建立和使用者對應的配置檔案
[root@gary-tao vsftpd_user_conf]# vim testuser1
//定義虛拟使用者的配置檔案
增加如下配置内容:
local_root=/home/virftp/testuser1 //定義test1的家目錄
anonymous_enable=NO //用來限制是否允許匿名賬号登入(no表示不允許)
write_enable=YES //表示可寫
local_umask=022 //umask值
anon_upload_enable=NO //表示是否允許匿名賬号上傳檔案
anon_mkdir_write_enable=NO //表示是否允許匿名賬号可寫
idle_session_timeout=600 //上傳完檔案後逾時多久斷開連接配接
data_connection_timeout=120 //資料傳輸逾時時間
max_clients=10
[root@gary-tao vsftpd_user_conf]# mkdir /home/virftp/testuser1
[root@gary-tao vsftpd_user_conf]# touch /home/virftp/testuser1/aming.txt
[root@gary-tao vsftpd_user_conf]# chown -R virftp:virftp /home/virftp
[root@gary-tao vsftpd_user_conf]# 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
//Centos7為64系統,所有庫檔案路徑為/lib64/security/pam_userdb.so(32位系統的庫檔案路徑為/lib/security/pam_userdb.so)
配置如下圖:

3.修改全局配置檔案/etc/vsftpd/vsftpd.conf
[root@gary-tao vsftpd_user_conf]# vim /etc/vsftpd/vsftpd.conf
修改如下内容:
将anonymous_enable=YES 改為 anonymous_enable=NO
将#anon_upload_enable=YES 改為 anon_upload_enable=NO
将#anon_mkdir_write_enable=YES 改為 anon_mkdir_write_enable=NO
增加如下内容:
chroot_local_user=YES
guest_enable=YES
guest_username=virftp
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vsftpd_user_conf
allow_writeable_chroot=YES
[root@gary-tao vsftpd_user_conf]# systemctl start vsftpd
//啟動vsftpd服務
[root@gary-tao vsftpd_user_conf]# ps aux |grep vsftpd
root 18027 0.0 0.0 53216 576 ? Ss 19:20 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 18029 0.0 0.0 112680 976 pts/1 R+ 19:21 0:00 grep --color=auto vsftpd
[root@gary-tao vsftpd_user_conf]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 13969/rpc.mountd
tcp 0 0 0.0.0.0:33684 0.0.0.0:* LISTEN 13963/rpc.statd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 852/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1505/master
tcp 0 0 0.0.0.0:34238 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp6 0 0 :::3306 :::* LISTEN 3373/mysqld
tcp6 0 0 :::43663 :::* LISTEN -
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::20048 :::* LISTEN 13969/rpc.mountd
tcp6 0 0 :::21 :::* LISTEN 18027/vsftpd
tcp6 0 0 :::22 :::* LISTEN 852/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1505/master
tcp6 0 0 :::44448 :::* LISTEN 13963/rpc.statd
tcp6 0 0 :::2049 :::* LISTEN -
4.測試ftp
[root@gary-tao vsftpd_user_conf]# yum install -y lftp
//安裝lftp用戶端軟體
[root@gary-tao vsftpd_user_conf]# lftp [email protected]
密碼:
lftp [email protected]:~> ls
ls: 登入失敗: 530 Login incorrect.
lftp [email protected]:~> exit
[root@gary-tao vsftpd_user_conf]# lftp [email protected]
密碼:
lftp [email protected]:~> ls
-rw-r--r-- 1 1004 1004 0 Jan 16 11:03 aming.txt
lftp [email protected]:/> ?
!<shell-command> (commands) alias [<name> [<value>]] attach [PID]
bookmark [SUBCMD] cache [SUBCMD] cat [-b] <files> cd <rdir>
chmod [OPTS] mode file... close [-a] [re]cls [opts] [path/][pattern]
debug [<level>|off] [-o <file>] du [options] <dirs> exit [<code>|bg]
get [OPTS] <rfile> [-o <lfile>] glob [OPTS] <cmd> <args> help [<cmd>]
history -w file|-r file|-c|-l [cnt] jobs [-v] [<job_no...>] kill all|<job_no> lcd <ldir>
lftp [OPTS] <site> ln [-s] <file1> <file2> ls [<args>]
mget [OPTS] <files> mirror [OPTS] [remote [local]] mkdir [-p] <dirs>
module name [args] more <files> mput [OPTS] <files> mrm <files>
mv <file1> <file2> [re]nlist [<args>] open [OPTS] <site>
pget [OPTS] <rfile> [-o <lfile>] put [OPTS] <lfile> [-o <rfile>] pwd [-p]
queue [OPTS] [<cmd>] quote <cmd> repeat [OPTS] [delay] [command]
rm [-r] [-f] <files> rmdir [-f] <dirs> scache [<session_no>]
set [OPT] [<var> [<val>]] site <site-cmd> source <file>
torrent [-O <dir>] <file|URL>... user <user|URL> [<pass>] wait [<jobno>] zcat <files>
zmore <files>
lftp [email protected]:/> get aming.txt
lftp [email protected]:/> quit
[root@gary-tao vsftpd_user_conf]# ls
aming.txt testuser1
[root@gary-tao vsftpd_user_conf]# ls -lt |head
總用量 4
-rw-r--r-- 1 root root 0 1月 16 19:03 aming.txt
-rw-r--r-- 1 root root 204 1月 16 18:57 testuser1
windows下安裝filezilla用戶端軟體,測試結果如下圖:
使用pure-ftpd搭建ftp服務
1.安裝pure-ftpd
//預設的Centos yum源并不包含pure-ftpd,需要安裝epel擴充源
[root@gary-tao ~]# yum install -y epel-release
[root@gary-tao ~]# yum install -y pure-ftpd
2.配置pure-ftpd
[root@gary-tao ~]# vim /etc/pure-ftpd/pure-ftpd.conf
//找到pureftpd.pdb這行,把行首的#删除
[root@gary-tao ~]# systemctl stop vsftpd
[root@gary-tao ~]# systemctl start pure-ftpd
[root@gary-tao ~]# ps aux |grep pure-ftpd
root 20478 0.0 0.1 202424 1204 ? Ss 11:31 0:00 pure-ftpd (SERVER)
root 20480 0.0 0.0 112680 972 pts/1 R+ 11:31 0:00 grep --color=auto pure-ftpd
[root@gary-tao ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 13969/rpc.mountd
tcp 0 0 0.0.0.0:33684 0.0.0.0:* LISTEN 13963/rpc.statd
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 20478/pure-ftpd (SE
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 852/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1505/master
tcp 0 0 0.0.0.0:34238 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp6 0 0 :::3306 :::* LISTEN 3373/mysqld
tcp6 0 0 :::43663 :::* LISTEN -
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::20048 :::* LISTEN 13969/rpc.mountd
tcp6 0 0 :::21 :::* LISTEN 20478/pure-ftpd (SE
tcp6 0 0 :::22 :::* LISTEN 852/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1505/master
tcp6 0 0 :::44448 :::* LISTEN 13963/rpc.statd
tcp6 0 0 :::2049 :::* LISTEN -
3.建立賬号
[root@gary-tao ~]# mkdir /data/ftp
[root@gary-tao ~]# useradd -u 1010 pure-ftp
[root@gary-tao ~]# chown -R pure-ftp:pure-ftp /data/ftp
[root@gary-tao ~]# pure-pw useradd ftp_usera -u pure-ftp -d /data/ftp
Password:
Enter it again:
//建立虛拟賬戶,-u是将虛拟使用者ftp_usera與系統使用者pure-ftp關聯在一起,也就是說,使用ftp_usera賬号登入ftp後,會以pure-ftp的身份來讀取和下載下傳檔案,-d是指定ftp_usera賬戶的家目錄,這樣可以使使用者ftp_usera隻能通路其家目錄/data/ftp/。
[root@gary-tao ~]# pure-pw mkdb
//建立使用者資訊資料庫檔案,這一步很關鍵。
[root@gary-tao ~]# pure-pw list //列出目前賬号
ftp_usera /data/ftp/./
[root@gary-tao ~]# pure-pw userdel ftp_usera //删除賬号
[root@gary-tao ~]# touch /data/ftp/123.txt
[root@gary-tao ~]# lftp [email protected] //測試連接配接
密碼:
lftp [email protected]:~> ls
drwxr-xr-x 2 1010 pure-ftp 21 Jan 17 11:40 .
drwxr-xr-x 2 1010 pure-ftp 21 Jan 17 11:40 ..
-rw-r--r-- 1 0 0 0 Jan 17 11:40 123.txt