Arch Linux 下FTP服务器的搭建

为了方便BBS测试的文件上传, 就此搭建FTP服务器

Install

安装 vsftpd

1
>> sudo pacman -S vsftpd

启动 vsftpd 和 设置开机自启

1
2
>> sudo systemctl enable vsftpd
>> sudo systemctl start vsftpd

Configuration

大多数的设置在 /etc/vsftpd.conf, 打开配置文件

1
>> sudo vim /etc/vsftpd.conf

启用上传功能, write_enable=YES

开启本地用户登录功能, local_enable=YES

开启IPV6支持

1
2
listen=NO
listen_ipv6=YES

自定义端口, 增加配置 listen_port=2211, 打开防火墙

1
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 2211 -j ACCEPT

增加用户设置

1
2
3
>> sudo htpasswd -c /etc/vsftpd/.passwd Username
New password:
Re-type new password:

若以后想增加用户, 可以使用 sudo htpasswd /etc/vsftpd/.passwd Username

这种方式增加的用户应该是不能被认证的, 用如下命令生成的密码替换

1
>> openssl passwd -1

向PAM service注册认证数据库, sudo vim /etc/pam.d/vsftpd, 并增加如下内容

1
2
auth required pam_pwdfile.so pwdfile /etc/vsftpd/.passwd
account required pam_permit.so

同时需要安装PAM对pwdfile的认证支持库, sudo yaout pam_pwdfile, Yaourt的安装见Arch Linux 安装Aur包管理器Yaourt

在系统中增加ftp虚拟用户

1
>> sudo useradd -d /srv/ftp -s/usr/bin/nologin -G ftp -M ftp

更改文件夹的所有人, sudo chown -R ftp:ftp /srv/ftp

配置文件里增加如下信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# pointing to the correct PAM service file
pam_service_name=vsftpd
write_enable=YES
hide_ids=YES
listen=YES
connect_from_port_20=YES
anonymous_enable=NO
local_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
chroot_local_user=YES
guest_enable=YES
guest_username=virtual
virtual_use_local_privs=YES

在用的过程中发现 FTP 不支持软链接的方式, 因此换成mount的方式来实现

1
>> sudo mount --bind /path/to/source /srv/ftp/

======================Add @2014/11/15 ===============================

在使用中发现, 只有命令和FTP工具(xftp)可以连接, Windows资源管理器、浏览器都不能访问, 查阅资料后发现是由于FTP的数据传输方式导致的, FTP的被动模式要求服务器能放过高端口的数据传输的包, 在测试中本机无法搞定ip_conntrack模式的配置, 只能限制FTP数据传输的端口, 并在防火墙上开放对应端口

在Vsftp上限制端口, sudo vim /etc/vsftp.conf, 在文件尾部增加如下部分

1
2
pasv_min_port=2222
pasv_max_port=2225

并开放这些端口

1
>> sudo iptables -A INPUT -p tcp --dport 2222:2225 -j ACCEPT

接着重启vsftpd服务器就行了

=======================Add @2014/11/16 ==============================

同时发现PSAV模式上传的时候, 发现无法上传和修改文件, 只能下载, 因此做如下修改

打开配置文件, sudo vim /etc/vsftp.conf

1
pasv_enable=YES

参考

(1) https://wiki.archlinux.org/index.php/Very_Secure_FTP_Daemon

(2) http://www.cnblogs.com/acpp/archive/2010/02/08/1665876.html

(3) http://blog.chinaunix.net/uid-26263042-id-3230479.html

(4) http://blog.csdn.net/moreorless/article/details/5289147

(5) http://www.2cto.com/os/201307/227994.html

(6) http://blog.csdn.net/highball/article/details/8521954

Comments