Linux下ftp服务搭建

FTP是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20、21号端口,其中端口20用于进行数据传输,端口21用于接受客户端发出的相关FTP命令与参数。FTP服务器普遍部署于内网中,具有容易搭建、方便管理的特点。而且有些FTP客户端工具还可以支持文件的多点下载以及断点续传技术。

软件包安装


服务端

在服务器上安装ftp服务程序

# 安装
yum install vsftpd

# 配置防火墙
firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload

# 备份旧配置文件,输出新配置文件
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf

客户端

在客户端上安装ftp客户端

yum install ftp

完成软件的安装及防火墙配置后,接下来开始配置服务。有3种模式可供选择。

  • 匿名访问模式(无需用户名密码认证,安全性最差)
  • 本地用户模式(使用操作系统本地用户认证,安全性一般,配置简单)
  • 虚拟用户模式(使用独立的用户名密码认认证,安全性高,配置较复杂)

根据业务需求任意选择一种模式即可,直接跳转到对应小节进行配置

服务端配置


匿名访问模式配置

按照如下内容配置文件vi /etc/vsftpd/vsftpd.conf

anonymous_enable=YES
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_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

加入开机自启,重启服务

systemctl enable vsftpd
systemctl restart vsftpd

给目录配置权限

chown ftp:ftp /var/ftp/pub

在客户端测试,使用账户anonymous,密码为空,默认访问的是/var/ftp目录

ftp 10.0.0.112

返回“230 Login successful.”说明登陆成功


本地用户模式配置

按照如下内容配置文件vi /etc/vsftpd/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=YES

加入开机自启,重启服务

systemctl enable vsftpd
systemctl restart vsftpd

使用ftp客户端即可连接,用户名为系统中实际存在的用户,默认进入用户的家目录,从安全角度考虑,root用户默认不能登陆ftp。

如果使用该方法,不希望让ftp的用户ssh连接服务器,可以打开ssh的配置文件/etc/ssh/sshd_config,在末尾加入:DenyUsers username来禁止该用户用过ssh登陆,添加完之后重启sshd服务


虚拟用户模式配置

虚拟用户模式是这3种模式中最安全的一种认证模式,是专门创建出一个账号来登录FTP传输服务的,而且这个账号不能用于以SSH方式登录服务器。当然,因为它的安全性较之于前面两种模式有了提升,所以配置流程也会稍微复杂一些。

创建用于进行FTP认证的用户数据库文件,奇数行为账户名,偶数行为密码。例如创建两个用户:ftpuser、zhangsan。注意不要有空格或者空行。

vi /etc/vsftpd/vuser.list

vuser.list

ftpuser
qwer1234
zhangsan
1234qwer

由于明文信息既不安全,也不符合让vsftpd服务程序直接加载的格式,因此需要使用db_load命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件,并且降低数据库文件的权限(避免其他人看到数据库文件的内容),然后再把原始的明文信息文件删除。

db_load -T -t hash -f /etc/vsftpd/vuser.list /etc/vsftpd/vuser.db
chmod 600 /etc/vsftpd/vuser.db
rm -f /etc/vsftpd/vuser.list

创建vsftpd服务程序用于存储文件的根目录(本示例使用的是该目录:“/data/ftproot”)以及用于虚拟用户映射的系统本地用户。vsftpd服务用于存储文件的根目录指的是,当虚拟用户登录后所访问的默认位置。

为了方便管理FTP服务器上的数据,可以把这个系统本地用户的家目录设置为/data目录。并且为了安全起见,将这个系统本地用户设置为不允许登录FTP服务器,这不会影响虚拟用户登录,而且还能够避免黑客通过这个系统本地用户进行登录。

useradd -d /data/ftproot -s /sbin/nologin virtual
chmod -Rf 755 /data/ftproot/

新建一个用于虚拟用户认证的PAM文件vsftpd.vu,其中PAM文件内的“db=”参数为使用db_load命令生成的账户密码数据库文件的路径,但不用写数据库文件的后缀:

# vi /etc/pam.d/vsftpd.vu
auth       required     pam_userdb.so db=/etc/vsftpd/vuser
account    required     pam_userdb.so db=/etc/vsftpd/vuser

在vsftpd服务程序的主配置文件中通过pam_service_name参数将PAM认证文件的名称修改为vsftpd.vu。PAM作为应用程序层与鉴别模块层的连接纽带,可以让应用程序根据需求灵活地在自身插入所需的鉴别功能模块。当应用程序需要PAM认证时,则需要在应用程序中定义负责认证的PAM配置文件,实现所需的认证功能。

例如,在vsftpd服务程序的主配置文件中默认就带有参数pam_service_name=vsftpd,表示登录FTP服务器时是根据/etc/pam.d/vsftpd文件进行安全认证的。现在我们要做的就是把vsftpd主配置文件中原有的PAM认证文件vsftpd修改为新建的vsftpd.vu文件即可。

按照如下示例编辑文件:vi /etc/vsftpd/vsftpd.conf

anonymous_enable=NO
local_enable=YES
write_enable=YES
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=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.vu
userlist_enable=YES

为虚拟用户设置不同的权限。虽然账户ftpuser和zhangsan都是用于vsftpd服务程序认证的虚拟账户,但是我们依然想对这两人进行区别对待。比如,允许张三上传、创建、修改、查看、删除文件,只允许李四查看文件。这可以通过vsftpd服务程序来实现。只需新建一个目录,在里面分别创建两个以ftpuser和zhangsan命名的文件,其中在名为ftpuser的文件中写入允许的相关权限(使用匿名用户的参数):

mkdir /etc/vsftpd/vusers_dir
cd /etc/vsftpd/vusers_dir/
touch zhangsan

配置ftpuser用户读写权限vi /etc/vsftpd/vusers_dir/ftpuser

anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

然后再次修改vsftpd主配置文件,通过添加user_config_dir参数来定义这两个虚拟用户不同权限的配置文件所存放的路径。为了让修改后的参数立即生效,需要重启vsftpd服务程序并将该服务添加到开机启动项中:

echo "user_config_dir=/etc/vsftpd/vusers_dir" >>  /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
systemctl enable vsftpd

故障排除

1、550 Create directory operation failed.

  1. 可能是权限问题,查看ftp是否有权限写入目录,一般不要修改/var/ftp的权限及属组,可以修改/var/ftp/pub的。

  2. 553、550都可能是SELinux引起的,现象为能登陆成功但不能列出目录内容、不能上传文件。解决方法任选其一:
    方法一: 直接关闭SELinux

setenforce 0
vi /etc/selinux/config

把SELINUX=enforcing更改为SELINUX=disabled

方法二:执行以下命令配置SELinux策略:

setsebool -P ftpd_full_access=on
  1. 如果在虚拟用户下报550可能是错误,可能是“/etc/vsftpd/vusers_dir/”这个路径下的用户权限配置又问题,检查对应用户是否分配了读写权限。

2、331 Please specify the password、530 Login incorrect

  1. 检查用户名密码是否输入正确。

  2. 如果是使用的是虚拟用户模式,请按照下方步骤检查pam配置:

    • 检查是否正常生成了该文件“/etc/vsftpd/vuser.db”,并且核对文件的权限为600
    • 检查配置文件“/etc/vsftpd/vsftpd.conf”是否正确的设置了指向:“pam_service_name=vsftpd.vu”
      修改完成后,重启服务再次尝试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会飞的果粒橙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值