FTP介绍、使用vsftpd搭建ftp
作者:互联网
FTP介绍
- FTP多用于Windows传文件到linux
- rz sz在文件超过4G,就无法使用了——>安装包yum install -y install lrzsz
rz把 window 上的文件传输到 linux 上
sz 把 linux 上的文件传输到 window 上 - FTP是File Transfer Protocol(文件传输协议,简称文传协议)的英文简称,用于在Internet上控制文件的双向传输。
- FTP的主要作用就是让用户连接一个远程计算机(这些计算机上运行着FTP服务器程序),并查看远程计算机中的文件,然后把文件从远程计算机复制到本地计算机,或把本地计算机的文件传送到远程计算机。
- 对于FTP的安全性来讲,小公司用的多,大企业不用FTP,因为不安全。
使用vsftpd搭建ftp
-
在centos上默认自带的ftp服务软件包叫做vsftpd,vsftpd软件包是可以使用系统级别的用户,(也就是假设创建了一个普通用户user1,设置一个密码,这时候就可以用vsftpd启动这个服务,然后用user1这个用户去登陆,登录的形式为ftp,登录进去后会进入到user1这个用户的家目录下,但这样操作会存在安全隐患)
-
解决隐患的方法:给ftp设置一个虚拟用户,虚拟用户映射成系统中的一个普通用户(也可以映射多个虚拟用户),这个用户即使给了用户和密码你也是没有办法去通过ssh登录到服务器的机器,这样就相对安全了很多
-
安装vsftpd包——>yum install -y vsftpd
1.安装及建立账号
#安装
[root@gary-tao ~]# yum install -y vsftpd
#创建一个普通用户,目的是为了让虚拟用户做一个映射的,以这个用户的身份来传文件,-s是用来指定shell,/sbin/nologin是使这个用户不能登录,保证安全
[root@gary-tao ~]# useradd -s /sbin/nologin virftp
#虚拟用户的密码文件,在密码文件中定义用户名和密码
[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
#vsfpd使用的密码文件不是明文的,需要生成对应的库文件
[root@gary-tao ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db
[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
在/etc/vsftpd/目录下,会看到生成了一个vsftpd_login.db文件,这个vsftpd_login.db密码是不能世界 cat命令 查看的,在上面的密码文件是可以自定义的。
#建立虚拟账号相关的目录以及配置文件
[root@gary-tao ~]# mkdir /etc/vsftpd/vsftpd_user_conf
[root@gary-tao ~]# cd /etc/vsftpd/vsftpd_user_conf/
2.创建和用户对应的配置文件
创建第一个用户的配置文件,用户的配置文件名字有一点特殊性,需要和用户的名字保持一致,比如在密码配置文件中的用户为testuser1,那么定义的配置文件用户名称就为testuser1
#定义虚拟用户的配置文件
[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
#将权限做一个修改,因为最后映射成virftp 这个用户,若virftp这个用户没有读的权利那就是错误的,无法正常的去上传和下载
[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
#/etc/pam.d/vsftpd,它是一个用来认证的文件,在登录FTP需要有一个认证的过程,认证的过程需要告诉它,通过什么样的形式去认证,认证的时候去哪里找这个密码库
#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
#启动vsftpd服务
[root@gary-tao vsftpd_user_conf]# systemctl start 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
#FTP监听的端口为21端口,22端口是sshd,23端口是telnet(现在telnet几乎没人使用了)
[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
这里为了方便测试,直接在linux上的安装FTP客户端lftp——>安装包yum install -y lftp
#安装lftp客户端软件
[root@gary-tao vsftpd_user_conf]# yum install -y lftp
#装完成之后,按如下输入方式,然后回车输入密码口令,用ls命令就可以查看到刚刚之前创建的文件,可见,已经连接成功
[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
#在当前目录直接ls命令查看,会看到aming.txt文件就是刚刚下载下来的
[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
#查询在lftp中可执行的命令,常用命令:put、get
windows下安装一个FTP软件,filezilla client软件是FTP开源的、免费的可以搭建服务,同时还有一个客户端软件,测试结果如下图:
使用pure-ftpd搭建ftp服务
pure-ftpd 比vftpd更加的轻量,更加简单
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,因为因为pure-ftpd也属于ftp软件,也会监听21端口,所以需要先关闭之前vsftpd监听打开的21端口,否则就会报错。
[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
#查看21端口,查看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的系统账号,而是虚拟账号。
#创建测试目录,为了给pure-ftpd用户使用,再创建用户 把/data/ftp的属主和属组改成pure-ftp
[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
#用pure-pw useradd 命令创建一个用户
[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/。
1.可以使用pure-pw --help查看该命令支持那些用法
2.命令pure-pw mkdb,是用来把密码生成系统,也就是pure-ftpd服务所识别的一种文件
#创建用户信息数据库文件,这一步很关键,不执行这一步是无法登录的
[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
#退出pure-ftpd,只需要输入 quit命令 即可
#这时我们改变123.txt文件的属主和属组
[root@ataolinux-01 ~]# chown pure-ftp:pure-ftp /data/ftp/123.txt
#在登录pure-ftpd中去查看123.txt文件的属主和属组,会看到属主为uid,属组映射为系统中组的名字pure-ftpd
[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 1010 pure-ftp 0 Jan 17 11:40 123.txt
标签:FTP,ftp,0.0,vsftpd,pure,tao,root 来源: https://blog.csdn.net/qq_33247800/article/details/91954588