1. 程式人生 > >FTP介紹、使用vsftpd搭建ftp、使用pure-ftpd搭建ftp服務

FTP介紹、使用vsftpd搭建ftp、使用pure-ftpd搭建ftp服務

block cli pre .sh ast files migrate window bug

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

說明:

在啟動pure-ftpd之前,需要先修改配置文件/etc/pure-ftpd/pure-ftpd.conf。其中需要把PureDB /etc/pure-ftpd/pureftpd.pdb前面的#刪除,然後啟動pure-ftpd,啟動之前需要關閉vsftpd,因為有端口沖突。

[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.建立賬號

為了安全,pure-ftpd使用的賬號並非linux的系統賬號,而是虛擬賬號。

[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

FTP介紹、使用vsftpd搭建ftp、使用pure-ftpd搭建ftp服務