CentOS7系统搭建FTP服务器

创建FTP服务器
1、安装FTP服务

yum install -y vsftpd

默认的FTP服务的配置文件路径为/etc/vsftpd

cd /etc/vsftpd
[root@test924 vsftpd]# ll
total 20
-rw------- 1 root root 125 Apr 1 12:55 ftpusers
-rw------- 1 root root 361 Apr 1 12:55 user_list
-rw------- 1 root root 5116 Apr 1 12:55 vsftpd.conf
-rwxr--r-- 1 root root 338 Apr 1 12:55 vsftpd_conf_migrate.sh
解析:
vsftpd.conf FTP核心配置文件
ftpusers 黑名单文件,此文件里的用户不允许访问 FTP 服务器。
user_list 白名单文件,是允许访问 FTP 服务器的用户列表。
vsftpd_conf_migrate.sh 是vsftpd操作的一些变量和设置
另:使用命令 rpm -ql vsftpd 可列出vsftpd中包含的文件

 

2、设置开机启动项
[root@test924 ~]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.

 

3、启动FTP服务
[root@test924 ~]# systemctl start vsftpd

查看FTP服务网络状态
[root@test924 ~]# netstat -antup | grep ftp
tcp6 0 0 :::21 :::* LISTEN 3907/vsftpd

 

4、设置FTP配置文件
先将配置文件备份,创建一个去掉注释和空行的核心配置文件
[root@test924 vsftpd]# mv vsftpd.conf vsftpd.conf_bak
[root@test924 vsftpd]# grep -v "#" vsftpd.conf_bak | grep -v "^$" > vsftpd.conf
[root@test924 vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd.conf_bak vsftpd_conf_migrate.sh
[root@test924 vsftpd]# cat vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

附配置文件部分参数解析:
anonymous_enable=NO    #允许匿名用户访问为了安全选择关闭
local_enable=YES       # 允许本地用户登录
write_enable=YES      # 是否允许写入
local_umask=022       # 本地用户上传文件的umask
dirmessage_enable=YES    #为YES则进入目录时显示此目录下由message_file选项指定的文本文件(,默认为.message)的内容
xferlog_enable=YES       #开启日志
xferlog_std_format=YES      #标准格式
connect_from_port_20=YES
xferlog_file=/var/log/xferlog          #ftp日志目录
idle_session_timeout=6000         #设置客户端连接时间
data_connection_timeout=1200       #设置数据连接时间 针对上传,下载
chroot_list_file=/etc/vsftpd/chroot_list     #设置为YES则下面的控制有效
chroot_list_enable=YES           #若为NO,则记录在chroot_list_file所指定的文件(默认是/etc/vsftpd.chroot_list)中的用户将被chroot在登录后所在目录中,无法离开.如果为YES,则所记录的用户将不被chroot.这里YES.
chroot_local_user=YES
userlist_deny=NO               #若设置为YES则记录在userlist_file选项指定文件(默认是/etc/vsftpd.user_list)中的用户将无法login,并且将检察下面的userlist_deny选项
userlist_enable=YES               #若为NO,则仅接受记录在userlist_file选项指定文件(默认是/etc/vsftpd.user_list)中的用户的login请求.若为YES则不接受这些用户的请求.
userlist_file=/etc/vsftpd/user_list         #白名单
chroot_list_enable=YES
local_root=/var/ftp/pub             #根目录
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

由于匿名用户和本地用户登陆或多或少存在安全隐患,所有最好采用虚拟用户登录方式,这里介绍虚拟用户登录

 

1、创建虚拟用户登录
创建用户文件:注意,单数行为用户名,偶数行为密码
[root@test924 vsftpd]# vim vuser.list
[root@test924 vsftpd]# ls
ftpusers vsftpd.conf vsftpd_conf_migrate.sh
user_list vsftpd.conf_bak vuser.list
[root@test924 vsftpd]# cat vuser.list
ftpuser01
123456
node1
123456
node2
123456
明文太不安全,转为hash加密的密码,并对权限进行设置
[root@test924 vsftpd]# db_load -T -t hash -f vuser.list vuser.db
[root@test924 vsftpd]# ll
total 40
-rw------- 1 root root 125 Apr 1 12:55 ftpusers
-rw------- 1 root root 361 Sep 25 16:59 user_list
-rw-r--r-- 1 root root 245 Sep 25 16:56 vsftpd.conf
-rw------- 1 root root 5116 Apr 1 12:55 vsftpd.conf_bak
-rwxr--r-- 1 root root 338 Apr 1 12:55 vsftpd_conf_migrate.sh
-rw-r--r-- 1 root root 12288 Sep 25 17:00 vuser.db
-rw-r--r-- 1 root root 43 Sep 25 16:59 vuser.list
[root@test924 vsftpd]# cat vuser.db
?123456node2123456ftpuser01 ?}u??h^123456node1[root@test924 vsftpd]#
[root@test924 vsftpd]# file vuser.db
vuser.db: Berkeley DB (Hash, version 9, native byte-order)
[root@test924 vsftpd]# ll vuser.list
-rw-r--r-- 1 root root 43 Sep 25 16:59 vuser.list
[root@test924 vsftpd]# chmod 600 vuser.db
-rw------- 1 root root 12288 Sep 25 17:00 vuser.db

 

2、创建一个虚拟用户virtual,仅用于起始文件/var/ftproot,但不登录。。。注意,这里的/var/ftproot就是ftp根目录路径,注意根目录下的权限设置,否则后期使用会报550
[root@test924 vsftpd]# useradd -d /var/ftproot -s /sbin/nologin virtual
[root@test924 vsftpd]# id virtual
uid=1001(virtual) gid=1001(virtual) groups=1001(virtual)
[root@test924 vsftpd]# ls -ld /var/ftproot/
drwx------ 3 virtual virtual 78 Sep 25 17:08 /var/ftproot/
[root@test924 vsftpd]# chmod -Rf 755 /var/ftproot/

 

3、创建用于支持虚拟用户的PAM文件

[root@test924 vsftpd]# vim /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser

 

4、修改ftp配置文件vsftpd.conf
[root@test924 vsftpd]# vim vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=NO
tcp_wrappers=YES
user_config_dir=/etc/vsftpd/vusers_dir
解析:
anonymous_enable=NO ###禁止匿名开放模式
local_enable=YES ###允许本地用户模式
guest_enable=YES ###开启虚拟用户模式
guest_username=virtual ###指定虚拟用户
pam_service_name=vsftpd.vu ###指定PAM文件
allow_writeable_chroot=YES ###允许对FTP根目录写入操作
user_config_dir=/etc/vsftpd/vusers_dir ###定义虚拟用户文件路径

 

5、设置虚拟用户在FTP服务器上的权限
[root@test924 vsftpd]# mkdir -p /etc/vsftpd/vuser_dir
[root@test924 vsftpd]# cd /etc/vsftpd/vuser_dir
[root@test924 vuser_dir]# vim node1
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
解析:
anon_upload_enable ###下载权限
anon_mkdir_write_enable ###创建写入权限
anon_other_write_enable ###其他写入权限

 

6、重启FTP服务
[root@test924 vsftpd]# systemctl restart vsftpd

服务器搭建完成。

 

在客户端下验证:
附客户端如果ftp命令报错。。请安装ftp服务。
[root@1node78 ~]# ftp 192.168.217.75
bash: ftp: command not found...
[root@1node78 ~]# yum install -y ftp
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
base | 3.6 kB 00:00
docker-ce-stable | 3.5 kB 00:00
epel | 4.7 kB 00:00
extras | 2.9 kB 00:00
k8s | 1.4 kB 00:00
updates | 2.9 kB 00:00
(1/2): epel/x86_64/updateinfo | 1.0 MB 00:01
(2/2): epel/x86_64/primary_db | 6.9 MB 00:03
Resolving Dependencies
--> Running transaction check
---> Package ftp.x86_64 0:0.17-67.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

===========================================================================
Package Arch Version Repository Size
===========================================================================
Installing:
ftp x86_64 0.17-67.el7 base 61 k

Transaction Summary
===========================================================================
Install 1 Package

Total download size: 61 k
Installed size: 96 k
Downloading packages:
ftp-0.17-67.el7.x86_64.rpm | 61 kB 00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : ftp-0.17-67.el7.x86_64 1/1
Verifying : ftp-0.17-67.el7.x86_64 1/1

Installed:
ftp.x86_64 0:0.17-67.el7

Complete!

 

登录,输入正确的用户名密码进入
[root@1node78 ~]# ftp 192.168.217.75
Connected to 192.168.217.75 (192.168.217.75).
220 (vsFTPd 3.0.2)
Name (192.168.217.75:root): node1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp>
ftp>
ftp> mkdir test_file1
257 "/test_file1" created
ftp>
ftp>
ftp> rm test_file1
250 Remove directory operation successful.

ftp> ls
227 Entering Passive Mode (192,168,217,75,229,5).
150 Here comes the directory listing.
drwx------ 2 1001 1001 6 Sep 27 07:46 111.txt
-rw------- 1 1001 1001 269115 Sep 27 07:28 apache.png
-rw------- 1 1001 1001 12872547 Sep 27 02:18 latest-zh_CN.tar.gz
-rw------- 1 1001 1001 1228 Sep 27 07:23 lnmp.tar.gz
226 Directory send OK.
ftp> get lnmp.tar.gz
local: lnmp.tar.gz remote: lnmp.tar.gz
227 Entering Passive Mode (192,168,217,75,44,184).
150 Opening BINARY mode data connection for lnmp.tar.gz (1228 bytes).
226 Transfer complete.
1228 bytes received in 0.00176 secs (698.12 Kbytes/sec)
ftp> bye
221 Goodbye.

[root@1node78 ~]# ll

-rw-r--r-- 1 root root 1228 Sep 27 15:49 lnmp.tar.gz

 

附:常用ftp使用命令
put 上传文件命令
格式:put local-file [remote-file]
mput 批量上传命令
格式:mput local-files

get 下载文件命令
格式:get [remote-file] [local-file]
mget 批量下载命令      
格式:mget [remote-files]

 

----------------------------------------------------------------------------------------------------------------------------------------------------------

创建本地用户登陆
创建用户:
useradd ftpuser01
passwd ftpuser01
密码123456

设置核心配置文件
vim vsftpd.conf
1 anonymous_enable=NO
2 local_enable=YES
3 write_enable=YES
4 local_umask=022
5 dirmessage_enable=YES
6 xferlog_enable=YES
7 connect_from_port_20=YES
8 xferlog_std_format=YES
9 listen=NO
10 listen_ipv6=YES
11 pam_service_name=vsftpd
12 userlist_enable=YES
13 tcp_wrappers=YES

关闭防火墙
[root@test924 vsftpd]# systemctl stop firewalld
[root@test924 vsftpd]# systemctl disable firewalld

重启FTP服务
[root@test924 vsftpd]# systemctl restart vsftpd

ftp根目录路径为
/var/ftp/pub
注意访问权限,本地可以设置为777权限
[root@test924 ftp]# ll 
total 0
drwxr-xr-x 2 root root 6 Apr 1 12:55 pub

----------------------------------------------------------------------------------------------------------------------------------------------------------

 

posted @ 2020-09-27 17:00  校铖先森  阅读(448)  评论(0编辑  收藏  举报