admin 发表于 2022-5-13 21:58:03

linux系统搭建ftp服务器

linux系统搭建tftp服务器
检查vsftpd是否安装了:
rpm -qa |grep vsftpd

安装vsftpd服务
yum install -y vsftpd ftp


ftp的配置文件主要有三个,位于/etc/vsftpd/目录下,分别是:
ftpusers 该文件用来指定哪些用户不能访问ftp服务器。user_list 该文件用来指示的默认账户在默认情况下也不能访问ftpvsftpd.conf vsftpd的主配置文件





以匿名用户登录
我们去掉配置文件vsftpd.conf 里面以下
anon_upload_enable=YES
anon_mkdir_write_enable=YES
两项前面的#号,就可以完成匿名用户的配置,此时匿名用户既可以登录上传、下载文件。记得修改配置文件后需要重启服务。

非匿名账户的创建与使用
vsftpd服务与系统用户是相互关联的,例如我们创建一个名为admin
useradd -d /home/admin/ -s /sbin/nologin admin   
chmod 755 /home/admin/
chown -R admin.admin /home/admin/



[*]注意:这个 ftpvuser 是 linux 系统用户,用于映射 ftp 虚拟用户,只需要创建一次

启动vsftpd服务:
# systemctl startvsftpd.service
查看状态:
# systemctl statusvsftpd.service
● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2022-04-13 05:48:41 CST; 22s ago
Process: 1994 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 1995 (vsftpd)
   CGroup: /system.slice/vsftpd.service
         └─1995 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
Apr 13 05:48:41 controller systemd: Starting Vsftpd ftp daemon...
Apr 13 05:48:41 controller systemd: Started Vsftpd ftp daemon.


开始连接




admin 发表于 2022-5-13 22:22:10

配置 vsftpd 的操作日志
从xferlog可以查看到用户上传下载等的操作记录,删除不会显示
vim /etc/logrotate.d/vsftpd
--------------------------------
/var/log/vsftpd.log {
    # ftpd doesn't handle SIGHUP properly
    nocompress
    missingok
}
/var/log/xferlog {
    # ftpd doesn't handle SIGHUP properly
    nocompress
    missingok
}
--------------------------------
tail -f /var/log/xferlog

admin 发表于 2022-5-13 22:25:37

添加文件:
vim /etc/vsftpd/chroot_list
admin

admin 发表于 2022-5-14 09:05:45

3.使用系统用户访问 FTP 服务器
3.1.修改配置文件并重启服务
vim /etc/vsftpd/vsftpd.conf
-------------------------------
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
chroot_local_user=YES
userlist_enable=YES
userlist_deny=NO                     
userlist_file=/etc/vsftpd/user_list
pam_service_name=vsftpd
tcp_wrappers= YES
-------------------------------
systemctl restart vsftpd
systemctl status vsftpd
配置注解:
anonymous_enable=NO                         # 修改,禁止匿名用户登录
local_enable=YES                      # 默认启用,允许本地用户登录,虚拟用户需要映射到本地用户才可以使用
write_enable=YES                      # 默认启用,本地用户开放写权限
#local_umask=022                      # 注释掉,本地用户创建的文件的权限反码022,创建的文件为644
chroot_local_user=YES                     # 默认启用,将本地用户锁定在自己的家目录中
userlist_enable=YES                      # 是否启用用户控制列表,默认启用
userlist_deny=NO                      # 指定用户控制列表的作用,默认为 YES,表示该文件内的用户列表禁止登录FTP服务器,这里修改为 NO,作为授权访问的用户列表使用
userlist_file=/etc/vsftpd/user_list         # 指定用户控制列表的文件名
anon_umask=022                     # 增加,匿名用户新增文件的umask数值。默认值为077,需要修改为022,否则上传后的文件为600
dirmessage_enable=YES                     # 设置切换到目录时显 示message 隐含文件的内容
xferlog_enable= YES                      # 激活上传和下载日志
connect_from_port_20= YES               # 启用FTP数据端口连接
pam_service_name=vsftpd                     # 设置PAM认证服务的配置文件名称,该文件存放在/etc/pam.d目录下
listen= YES                           # 是否使用独占启动方式
tcp_wrappers= YES                      # 使用防火墙
#file_open_mode=0755
pasv_min_port=50000                         # 被动模式下的最小端口
pasv_max_port=60000                         # 被动模式下的最大端口
# 设置连接服务器后的欢迎信息
ftpd_banner=welcome to ftp service.
banner_file=/etc/vsftpd/vsftpd_banner_file
配置建议:
userlist_deny=NO ,这里设置为NO,做为允许登陆的用户列表,可以手动指定允许登录 ftp 的用户,比较实用,如果设置为YES,作为禁止登录 ftp 的用户列表,与 ftpusers 功能重复,没有必要
vsftpd 的配置文件列表
/etc/vsftpd/vsftpd.conf   # 主配置文件
/etc/vsftpd/ftpusers# FTP限制访问的用户,里面是一些系统用户,默认不允许访问,防止被入侵,一般不需要修改
/etc/vsftpd/user_list      # 授权用户列表,可以控制哪些用户可以访问或者禁止访问,我一般配置为允许访问 ftp 的用户列表
特别注意:
1)vsftpd.conf 文件中每个选项设置为一行,格式为“option=value”,“=”号两边不能留空白符
3.2.创建测试用的本地用户
useradd zhaoshuai
passwd zhaoshuai
创建测试用的文件和目录
# touch /home/zhaoshuai/aaa.txt
# mkdir -p /home/zhaoshuai/bbb
# ll /home/zhaoshuai/         
total 4
-rw-r--r-- 1 root root    0 Jun 19 02:18 aaa.txt
drwxr-xr-x 2 root root 4096 Jun 19 02:18 bbb
3.3.修改授权的本地用户列表
ftpusers 禁止登录 ftp 服务器的用户列表,一般是系统用户不需要修改,可以增加
vim /etc/vsftpd/ftpusers
-------------------------------
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
-------------------------------
user_list 允许登陆 ftp 服务器的用户列表
vim /etc/vsftpd/user_list
-------------------------------
zhaoshuai
-------------------------------
备注:以上两个文件修改完不需要重启 vsftpd 服务
3.4.使用本地用户登陆测试
ftp 127.0.0.1
实例演示:
# ftp 127.0.0.1            
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 3.0.2)
Name (127.0.0.1:root): zhaoshuai
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp>
ftp> ls
227 Entering Passive Mode (127,0,0,1,94,91).
150 Here comes the directory listing.
-rw-r--r--    1 0      0               0 Jun 18 18:18 aaa.txt
drwxr-xr-x    2 0      0            4096 Jun 18 18:18 bbb
226 Directory send OK.
ftp> exit
221 Goodbye.
如果要使用 xftp 等图形工具,需要选择主动模式
对于阿里云,青云等云平台的虚拟机,需要考虑安全组:允许20,21端口的接入请求
阿里云配置nat网关的端口转发可以通过公网连接,或者直接绑定EIP,青云需要直接绑定EIP进行公网连接
阿里云和青云都无法通过负载均衡的端口转发提供ftp服务的访问,因为经过了他们内部的路由转发,无法直接找到对应的主机,总之ftp需要直连服务器才行
回到顶部
4.使用虚拟用户访问 FTP 服务器
ftp配置为匿名访问显然是不安全也不便于管理的,另外,单纯使用系统用户的 ftp 也较难管理,通常情况下是使用一个系统用户作为ftp用户登陆ftp服务器的代理用户进行管理
4.1.修改vsftpd.conf 文件,重启服务
cd /etc/vsftpd/
vim vsftpd.conf
----------------------------------------
anonymous_enable=NO
local_enable=YES
write_enable=YES
#local_umask=022
chroot_local_user=YES
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
chroot_local_user=YES
# made for virtual user
guest_enable=YES
guest_username=ftpvuser
pam_service_name=/etc/pam.d/ftpvuser.pam
user_config_dir=/etc/vsftpd/vuser.d
anon_umask=022
-------------------------------------
systemctl restart vsftpd
systemctl status vsftpd
配置注解:
guest_enable=YES                   # 增加,启用虚拟用户模式
guest_username=ftpvuser                  # 增加,配置虚拟用户映射到的本地用户名
pam_service_name=/etc/pam.d/ftpvuser.pam # 修改,配置虚拟用户的认证方式
user_config_dir=/etc/vsftpd/vuser.d         # 增加,虚拟用户的配置文件目录
注意:
1)除了主配置文件外,还可以给特定用户设定个人配置文件
2)虚拟用户默认可以读写,访问时映射为本地用户,所以需要启用对本地用户的控制
3)实际的访问权限可由用户独立的配置文件进行单独控制
4.2.设置 ftp 虚拟用户的验证授权方式
1)创建虚拟用户的秘钥文件
mkdir -p /etc/vsftpd/vuser.d
cd /etc/vsftpd/vuser.d
touch vuser.list
2)加密虚拟用户的秘钥文件
# 使用 db_load 工具生成加密文件
yum install db4-utils -y
db_load -T -t hash -f vuser.list vuser.db
file vuser.list
file vuser.db
# 为了安全,修改虚拟用户文件的访问权限
chmod 600 /etc/vsftpd/vuser.*
ll /etc/vsftpd/vuser.*
3)创建虚拟用户的授权认证文件
cd /etc/pam.d/
mv vsftpd vsftpd.ori# 备份原有的ftp的pam认证文件
vim ftpvuser.pam      # 创建新的ftp虚拟用户认证文件
-----------------------------------
#%PAM-1.0
auth       required   pam_userdb.so db=/etc/vsftpd/vuser.d/vuser
account    required   pam_userdb.so db=/etc/vsftpd/vuser.d/vuser
-----------------------------------
注意:db=/etc/vsftpd/vuser.d/vuser 不可以加.db的扩展名,否则认证不成功
4.3.实例演示:配置一个虚拟用户
1)创建 ftp 虚拟用户 test1 的数据目录和秘钥文件
mkdir -p /data/ftpdata/zhaoshuai
touch /data/ftpdata/zhaoshuai/ccc.txt               # 创建测试文件
mkdir -p /data/ftpdata/zhaoshuai/ddd
chown -R ftpvuser.ftpvuser /data/ftpdata
chmod 755 /data/ftpdata/
ls -lhd /data/ftpdata/
ls -lh /data/ftpdata/
2)把该虚拟用户 test1 添加到 user_list 文件中
vim /etc/vsftpd/user_list
---------------------
zhaoshuai
----------------------
备注:
1)注释掉其他本地用户认证的内容,因为启用了 guest_enable 后,本地用户将失效,所有非匿名用户变成虚拟用户
2)因为需要授权访问的用户比较少,所以user_list设置为可以访问ftp服务的用户
3)创建或修改虚拟用户秘钥信息
cd /etc/vsftpd/vuser.d
vimvuser.list
--------------------
zhaoshuai
zhaoshuai               # 这里的密码和系统用户 zhaoshuai 的密码不同用以区分
--------------------
db_load -T -t hash -f vuser.list vuser.db
该文件的格式为:一行用户名一行密码
4)为用户创建授权配置文件(文件名必须为虚拟用户名)
cd /etc/vsftpd/vuser.d
vim zhaoshuai
---------------------------
# 指定宿主目录,配置访问权限
local_root=/data/ftpdata/zhaoshuai# 虚拟用户的宿主目录
write_enable=YES
anon_upload_enable=YES       # 上传
anon_mkdir_write_enable=YES      # 创建目录写权限
anon_other_write_enable=YES      # 其他写入权限
---------------------------
5)配置完成刷新配置信息
systemctl restart vsftpd
systemctl status vsftpd
6)登陆测试
# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 3.0.2)
Name (127.0.0.1:root): zhaoshuai
331 Please specify the password.
Password:                                       # 在这里使用系统用户zhaoshuai的密码无法登陆
530 Login incorrect.
Login failed.
ftp> exit
221 Goodbye.
# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 3.0.2)
Name (127.0.0.1:root): zhaoshuai
331 Please specify the password.
Password:                                       # 使用虚拟用户zhaoshuai的密码可以正常登录
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp> ls                                       # 可以查看到上面创建的测试文件
227 Entering Passive Mode (127,0,0,1,226,175).
150 Here comes the directory listing.
drwxr-xr-x    3 1000   1000         4096 Jun 12 07:59 ccc.txt
drwxr-xr-x    6 1000   1000         4096 Jun 12 07:45 ddd
226 Directory send OK.
ftp> exit
221 Goodbye.
回到顶部
拓展1:ftp 的防火墙配置
iptables -I INPUT -p tcp --dport 21 -j ACCEPT        # FTP连接端口
iptables -I INPUT -p tcp --dport 33000:34000 -j ACCEPT   # pasv模式下的随机端口
iptables-save >/etc/sysconfig/iptables           # 保存防火墙配置
systemctl restart iptables.service
systemctl restart vsftpd.service
回到顶部
拓展2:CentOS6安装vsftpd
方法相同,区别在于服务的启动命令是
service vsftpd restart
service vsftpd status
页: [1]
查看完整版本: linux系统搭建ftp服务器