15.1 FTP介绍
FTP是File Transfer Protocol(文件传输协议,简称文传协议)的英文简称,用于在Internet上控制文件的双向传输。
FTP的主要作用就是让用户连接一个远程计算机(这些计算机上运行着FTP服务器程序),并查看远程计算机中的文件,然后把文件从远程计算机复制到本地计算机,或把本地计算机的文件传送到远程计算机。
FTP小公司用的多,大企业不用FTP,因为不安全。
15.2-15-3 使用vsftpd搭建ftp服务
安装vsftpd。
yum install -y vsftpd
创建普通用户:virftp
useradd -s /sbin/nologin virftp
在 /etc/vsftpd/vsftpd_login 添加虚拟用户名、密码,用来映射普通用户。内容如下,奇数行为用户名,偶数行为密码,多个用户就写多行。
[root@liang-00 ~]# vim /etc/vsftpd/vsftpd_login [root@liang-00 ~]# cat !$ cat /etc/vsftpd/vsftpd_login testuser1 123456 [root@liang-00 ~]#
权限设置:
chmod 600 /etc/vsftpd/vsftpd_login
将创建的文本文件转换成二进制文件。
db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db
[root@liang-00 ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db [root@liang-00 ~]# ll /etc/vsftpd/ total 36 -rw------- 1 root root 125 Oct 31 03:45 ftpusers -rw------- 1 root root 361 Oct 31 03:45 user_list -rw------- 1 root root 5116 Oct 31 03:45 vsftpd.conf -rwxr--r-- 1 root root 338 Oct 31 03:45 vsftpd_conf_migrate.sh -rw------- 1 root root 17 Dec 22 13:39 vsftpd_login -rw-r--r-- 1 root root 12288 Dec 22 13:43 vsftpd_login.db [root@liang-00 ~]#
创建虚拟用户配置文件所在的目录。
mkdir /etc/vsftpd/vsftpd_user_conf
进入/etc/vsftpd/vsftpd_user_conf目录,创建虚拟用户配置文件(文件名字要和用户名字保持一致)。
[root@liang-00 ~]# mkdir /etc/vsftpd/vsftpd_user_conf [root@liang-00 ~]# cd /etc/vsftpd/vsftpd_user_conf [root@liang-00 vsftpd_user_conf]# vim testuser1 [root@liang-00 vsftpd_user_conf]#
添加内容在虚拟用户配置文件中:
local_root=/home/virftp/testuser1 定义虚拟用户的家目录
anonymous_enable=NO 是否有效匿名用户
write_enable=YES 是否允许写
local_umask=022
anon_upload_enable=NO 是否允许匿名用户上传
anon_mkdir_write_enable=NO 是否允许匿名创建、写
idle_session_timeout=600 连接超时时间
data_connection_timeout=120 数据传输超时时间
max_clients=10 最大客户端
创建虚拟用户家目录:
mkdir /home/virftp/testuser1
更改家目录属主属组:
chown -R virftp:virftp /home/virftp
添加密码文件(非常重要)用于登录时比对用户名、密码:
vim /etc/pam.d/vsftpd
设置vsftpd配置文件:
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
启动vsftpd服务(端口为21):
[root@liang-00 vsftpd_user_conf]# systemctl start vsftpd
[root@liang-00 vsftpd_user_conf]# ps aux|grep vsftp
root 4761 0.0 0.0 53260 572 ? Ss 14:03 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 4770 0.0 0.0 112704 972 pts/0 S+ 14:03 0:00 grep --color=auto vsftp
[root@liang-00 vsftpd_user_conf]# netstat -nltp
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:2049 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:37064 0.0.0.0:* LISTEN -
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 3966/rpc.mountd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 967/sshd
tcp 0 0 0.0.0.0:38649 0.0.0.0:* LISTEN 1955/rpc.statd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1229/master
tcp6 0 0 :::2049 :::* LISTEN -
tcp6 0 0 :::36201 :::* LISTEN -
tcp6 0 0 :::42378 :::* LISTEN 1955/rpc.statd
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::20048 :::* LISTEN 3966/rpc.mountd
tcp6 0 0 :::21 :::* LISTEN 4761/vsftpd
tcp6 0 0 :::22 :::* LISTEN 967/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1229/master
[root@liang-00 vsftpd_user_conf]#
测试:
可以在Windows中安装filezilla client 来测试。
在Linux中安装lftp来测试:
yum install -y lftp
登录ftp服务器:
[root@liang-00 vsftpd_user_conf]# lftp testuser1@127.0.0.1 Password: lftp testuser1@127.0.0.1:~> ls -rw-r--r-- 1 1003 1003 0 Dec 22 05:52 liang.txt lftp testuser1@127.0.0.1:/>
查看可以使用的命令:
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:/>
常用的命令有:put get。
从ftp服务器中下载liang.txt(文件在服务器中的位置为 /home/virftp/testuser1/liang.txt)文件(下载到当前目录):
lftp testuser1@127.0.0.1:~> get liang.txt lftp testuser1@127.0.0.1:/> quit [root@liang-00 ~]# ls anaconda-ks.cfg grep liang.txt sed [root@liang-00 ~]#
使用sftp下载ftp服务器文件。
在xshell中新建会话sftp:
连接后就可以在ftp服务器中下载、上传文件了。
15.4 xshell使用xftp传输文件
在服务器会话中用 ctrl+alt+f 打开xftp。
可以直接拖动文件到windows中。
15.5 使用pure-ftpd搭建ftp服务
pure-ftpd比vsftp更加简单。
安装 pure-ftpd:
yum install -y pure-ftpd
更改配置文件:
vim /etc/pure-ftpd/pure-ftpd.conf //找到pureftpd.pdb这行,把行首的#删除
启动pure-ftpd
[root@liang-00 ~]# systemctl stop vsftpd.service [root@liang-00 ~]# systemctl start pure-ftpd.service [root@liang-00 ~]#
创建ftp用户目录,创建用户,更改属主属组:
[root@liang-00 ~]# mkdir /data/ftp [root@liang-00 ~]# useradd -u 1010 pure-ftp [root@liang-00 ~]# chown -R pure-ftp:pure-ftp /data/ftp [root@liang-00 ~]#
创建虚拟用户(ftp_usera)映射系统普通用户(pure-ftp),-d 指定家目录:
[root@liang-00 ~]# pure-pw useradd ftp_usera -u pure-ftp -d /data/ftp Password: Enter it again: [root@liang-00 ~]#
生成系统可识别的密码:
[root@liang-00 ~]# pure-pw mkdb [root@liang-00 ~]#
测试:
[root@liang-00 ~]# touch /data/ftp/111.txt [root@liang-00 ~]# lftp ftp_usera@127.0.0.1 Password: lftp ftp_usera@127.0.0.1:~> ls drwxr-xr-x 2 1010 pure-ftp 21 Dec 22 14:49 . drwxr-xr-x 2 1010 pure-ftp 21 Dec 22 14:49 .. -rw-r--r-- 1 0 0 0 Dec 22 14:49 111.txt lftp ftp_usera@127.0.0.1:/>
其中111.txt的属主属组为root用户,可以修改。
扩展:
vsftp使用mysql存放虚拟用户并验证 http://www.aminglinux.com/bbs/thread-342-1-1.html
ftp的主动和被动模式 http://www.aminglinux.com/bbs/thread-961-1-1.html