ubuntu14.04 server ftp 服务安装配置详解

cheungmine

2016-01-27

2018-05-03 支持 ubuntu18.04 LTS

​http://wiki.ubuntu.com.cn/Vsftpd​


0 安装好vsftpd服务

vsftpd - Very Secure FTP Daemon


安装

$ sudo apt-get install vsftpd

关闭,

启动


$ sudo service vsftpd stop|start|restart

实际目录在: /srv/ftp/



访问URL: ftp://yourhost



1 下载需要的软件包

$ wget http://ftp.us.debian.org/debian/pool/main/d/db4.8/libdb4.8_4.8.30-2_amd64.deb
$ wget http://cz.archive.ubuntu.com/ubuntu/pool/universe/d/db4.8/db4.8-util_4.8.30-11ubuntu1_amd64.deb

上面的1连接失效,可以从下面的连接下载:

​http://archive.ubuntu.com/ubuntu/pool/main/d/db4.8/libdb4.8_4.8.30-11ubuntu1_amd64.deb​

相应的改为:

libdb4.8_4.8.30-2_amd64.deb => libdb4.8_4.8.30-11ubuntu1_amd64.deb

2 安装软件包

$ sudo dpkg -i libdb4.8_4.8.30-2_amd64.deb
$ sudo dpkg -i db4.8-util_4.8.30-11ubuntu1_amd64.deb


3 创建虚拟用户文件

$ vi ~/ftpvusers.txt


cab
123456
sedan
234567
limo
345678


4 数据库文件导入db

$ sudo mkdir /etc/vsftpd.d
$ sudo rm -f /etc/vsftpd.d/vsftpd_login.db
$ sudo db4.8_load -T -t hash -f ~/ftpvusers.txt /etc/vsftpd.d/vsftpd_login.db


将数据库文件设置权限为600,并不需要被其他用户读,修改:


$ sudo chmod 600 /etc/vsftpd.d/vsftpd_login.db


5 创建链接

$ sudo ln -s /lib/x86_64-linux-gnu/security/pam_userdb.so /lib/security/pam_userdb.so


6 编辑PAM配置文件

$ sudo vi /etc/pam.d/vsftpd_login
auth required /lib/security/pam_userdb.so db=/etc/vsftpd.d/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd.d/vsftpd_login

可见,/etc/vsftpd.d/vsftpd_login 指向了 /etc/vsftpd.d/vsftpd_login.db



ftp的虚拟用户将采用PAM进行验证,这是通过: /etc/vsftpd.conf 文件中的语句


pam_service_name=vsftpd


来启用的,稍后我们要配置: /etc/vsftpd.conf,使其指向


pam_service_name=vsftpd_login



7 为虚拟用户创建本地系统用户

相当于就是虚拟用户借用本地用户的名去访问ftp服务器. 就是把一个本地用户和


一个目录进行绑定,也就是说这个用户默认访问的地方就是这个绑定的目录.



新建一个系统用户vsftpd,用户主目录为/home/vsftpd, 用户登录终端


设为/bin/false(即使之不能登录系统)


#### 创建ftp读写访问用户目录(vsftpd访问权限)
$ sudo mkdir -p /home/vsftpd/limo

$ sudo useradd vsftpd -d /home/vsftpd -s /bin/false
$ sudo chown -R vsftpd:vsftpd /home/vsftpd
$ sudo chgrp -R vsftpd /home/vsftpd
$ sudo chmod -R 700 /home/vsftpd

#### 创建ftp只读访问用户目录(root访问权限)
$ sudo mkdir /home/vsftpd/sedan

$ sudo mkdir /srv/ftp/cab
$ sudo chown root:ftp /srv/ftp/cab


8 修改vsftpd配置文件

/etc/vsftpd.conf

先备份


# cp /etc/vsftpd.conf /etc/vsftpd.conf.old


# vi /etc/vsftpd.conf


确保以下配置:


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


listen=YES                        #以standalone模式运行vsftpd
#listen_ipv6=YES #注释掉这个!! 解决错误: 500 OOPS: run two copies of vsftpd for IPv4 and IPv6

anonymous_enable=NO #禁止匿名访问
dirmessage_enable=YES #显示目录下的message消息

xferlog_enable=YES #启用日志
xferlog_file=/var/log/vsftpd.log #设定日志路径
xferlog_std_format=YES #使用标准日志格式

chroot_local_user=YES #限定用户在家目录
guest_enable=YES #启用虚拟用户
guest_username=vsftpd #将虚拟用户转换成本地用户vsftpd

user_config_dir=/etc/vsftpd.d #虚拟用户的配置文件存放目录
pam_service_name=vsftpd_login #指定认定文件=> /etc/pam.d/vsftpd_login

local_enable=YES
secure_chroot_dir=/var/run/vsftpd/empty #此句必要!!
allow_writeable_chroot=YES # 解决错误: 500 OOPS: vsftpd: refusing to run with writable root inside chroot

# 解决端口问题
connect_from_port_20=YES
pasv_min_port=31888 # 设置高位端口
pasv_max_port=31999

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


9 配置虚拟用户配置文件

虚拟用户的配置文件存放目录在/etc/vsftpd.conf的user_config_dir指定,因此要在


/etc/vsftpd.d目录下创建用户配置文件:cab, sedan, limo



# vi /etc/vsftpd.d/cab

local_root=/srv/ftp/cab



# vi /etc/vsftpd.d/sedan

local_root=/home/vsftpd/sedan



最后一个是特殊,可以上传文件的用户:


# vi /etc/vsftpd.d/limo
local_root=/home/vsftpd/limo     # 指定家目录
write_enable=YES # 开启全局上传(写)权限
anon_world_readable_only=NO # 关闭匿名用户只读(下载)权限
anon_upload_enable=YES # 开启匿名用户上传权限
anon_mkdir_write_enable=YES # 开启匿名用户建目录权限
anon_other_write_enable=YES # 开启匿名用户除上传和建目录之外的写权限(如重命名,删除等)

10 Ubuntu 防火墙设置

需要打开端口:20,21,31888:31999

$ sudo ufw allow 20/tcp
$ sudo ufw allow 21/tcp
$ sudo ufw allow 31888:31999/tcp


11 服务启用与停止

$ sudo killall vsftpd
$ sudo /usr/sbin/vsftpd /etc/vsftpd.conf &
或者
$ sudo service vsftpd stop
$ sudo service vsftpd start|restart


浏览器访问:

ftp://cab:123456@yourhost


ftp://sedan:234567@yourhost


ftp://limo:345678@yourhost



FTP命令行:


$ ftp cab:123456@yourhost


$ ftp sedan:234567@yourhost


$ ftp limo:345678@yourhost



wget 访问

1) wget ftp://cab@yourhost --ftp-password=123456

2) wget ftp://cab:123456@yourhost

3) wget ftp://yourhost --ftp-user=cab --ftp-password=123456