文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议。它属于网络传输协议的应用层。本文介绍了如何在亚马逊AWS Ubuntu14.04上安装ftp服务器。
有三个著名的ftp服务器软件包可以使用,分别是PureFTPD, vsftpd和 ProFTPD。这里我用了VsFTPD,因为它更轻量,并且不易遭受攻击。
在Ubuntu14.04上安装ftp服务器
1.更新软件包仓库
sudo apt-get update
1
2.安装VsFTPD软件包
sudo apt-get install vsftpd
1
3.安装完成后打开/etc/vsftpd.conf文件,根据下面的指示修改配置
取消下面两行的注释(行号:29和33)
write_enable=YES
local_umask=022
1
2
取消下面这行的注释(行号:120),可以阻止访问home目录之外的其它目录
chroot_local_user=YES
1
添加下面一行到文件末尾
allow_writeable_chroot=YES
1
添加下面三行开启被动模式
pasv_enable=Yes
pasv_min_port=40000
pasv_max_port=40100
1
2
3
4.重启vstpd服务
sudo service vsftpd restart
1
5.现在ftp服务器会监听21端口。用下面的命令创建用户。这里使用/usr/sbin/nologin shell阻止ftp用户访问bash shell。
sudo useradd -m steve -s /usr/sbin/nologin
sudo passed steve
1
2
6.允许登录访问nologin shell。打开/etc/shells并将下面一行添加到末尾
/usr/sbin/nologin
1
7.设置服务器实例的安全组规则
添加自定义TCP规则的20-21,40000-40100端口。
现在可以试着访问这个ftp服务器了,可以使用winscp或filezilla等ftp客户端,确认用户不能访问home目录外的其它目录。
安全的ftp (sftp)
sftp成为安全的ftp,即使用了ssh的ftp。所以我们需要安装openssh-server软件包。
sudo apt-get install openssh-server
1
8.给ftp用户创建一个新的组
sudo groupadd ftpaccess
1
9.现在配置/etc/ssh/sshd_config文件
找到并注释掉下面这行
Subsystem sftp /usr/lib/openssh/sftp-server
1
在文件末尾添加
Subsystem sftp internal-sftp
Match group ftpaccess
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
1
2
3
4
5
6
10.重启sshd服务
sudo service ssh restart
1
11.按照下面的步骤创建sftp访问的用户
sudo useradd -m steve -g ftpaccess -s /usr/sbin/nologin
sudo passed steve
1
2
改变home目录的所有权
sudo chown root /home/steve
1
在home目录内创建一个文件夹用于写入,并改变该文件夹的所有权
sudo mkdir /home/steve/www
sudo chown steve:ftpaccess /home/steve/www
1
2
现在可以试着用sftp(端口:22)来访问服务器了,确认下用户可以上传文件至www目录但是不能访问home目录以外的文件夹。
如果我们想同时使用ftp和sftp,在创建用户的时候执行上述步骤(步骤11)。对于已经存在的用户,把他们移动到ftpaccess组并如下创建文件夹和改变所有权
sudo usermod steve -g ftpaccess -s /usr/sbin/nologin
sudo chown root /home/steve
sudo mkdir /home/steve/www
sudo chown steve:ftpaccess /home/steve/www
1
2
3
4
现在steve可以同时使用ftp和sftp向www上传文件了