FTP是File Transfer Protocol(文件傳輸協議,簡稱文傳協議)的英文簡稱,用於在Internet上控制文件的雙向傳輸。FTP的主要做用就是讓用戶鏈接一個遠程計算機(這些計算機上運行着FTP服務器程序),並查看遠程計算機中的文件,而後把文件從遠程計算機複製到本地計算機,或把本地計算機的文件傳送到遠程計算機。小公司用的多,大企業不用FTP,由於不安全。mysql
[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/
[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)
配置以下圖:linux
[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 -
配置以下圖:sql
[root@gary-tao vsftpd_user_conf]# yum install -y lftp //安裝lftp客戶端軟件 [root@gary-tao vsftpd_user_conf]# lftp testuser1@127.0.0.1 口令: lftp testuser1@127.0.0.1:~> ls ls: 登陸失敗: 530 Login incorrect. lftp testuser1@127.0.0.1:~> exit [root@gary-tao vsftpd_user_conf]# lftp testuser1@127.0.0.1 口令: lftp testuser1@127.0.0.1:~> ls -rw-r--r-- 1 1004 1004 0 Jan 16 11:03 aming.txt lftp testuser1@127.0.0.1:/> ? !<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 testuser1@127.0.0.1:/> get aming.txt lftp testuser1@127.0.0.1:/> 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
//默認的Centos yum源並不包含pure-ftpd,須要安裝epel擴展源 [root@gary-tao ~]# yum install -y epel-release [root@gary-tao ~]# yum install -y pure-ftpd
說明:shell
在啓動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 -
爲了安全,pure-ftpd使用的帳號並不是linux的系統帳號,而是虛擬帳號。vim
[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 ftp_usera@127.0.0.1 //測試鏈接 口令: lftp ftp_usera@127.0.0.1:~> 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