笔者报考了腾讯高级云架构工程师认证,最近一段时间就是死磕云计算的知识,在腾讯实验室以及购买的LAMP云服务器上测试学习。今天就来搭建 FTP 文件服务,平时使用ftp服务基本在内部局域网中,腾讯云搭建 FTP可直接在公网上使用。
FTP 是一个很实用的文件传输协议,方便在客户端和服务器之间进行文件的传输,vsftpd 是在 Linux 上被广泛使用的 FTP 服务器。本文在腾讯云Ubuntu 16以及CentOS 7两个平台下来测试, 利用vsftpd 来搭建一个 FTP 服务。
安装vsftpd并开启服务后是可以直接使用的,但是是匿名登陆,也无法区分用户访问,为了保障服务器安全需要限制权限,创建专有的 FTP 登录账户。
Ubuntu 16
1、安装 VSFTPD
sudo apt-get install vsftpd -y
2、启动 VSFTPD
sudo netstat -nltp | grep 21,通过 netstat 命令可以看到系统已经监听了21端口。
安装完成后 VSFTPD 会自动启动,如果没有启动,可以手动开启 VSFTPD 服务:sudo systemctl start vsftpd.service。
3、配置用户访问目录
新建用户主目录:sudo mkdir /home/uftp
创建一个用户 uftp:sudo useradd -d /home/uftp -s /bin/bash uftp
uftp 用户设置密码:sudo passwd uftp
删除掉 pam.d 中 vsftpd,因为该配置文件会导致使用用户名登录 ftp 失败:sudo rm /etc/pam.d/vsftpd
4、限制该用户仅能通过 FTP 访问
为了保障服务器安全,用户 uftp 只能通过 FTP 访问服务器,而不能直接登录服务器:sudo usermod -s /sbin/nologin uftp
5、修改 vsftpd 配置文件
修改 /etc/vsftpd.conf 文件中的配置,直接将如下配置添加到配置文件最下方:
# 限制用户对主目录以外目录访问
chroot_local_user=YES
# 指定一个 userlist 存放允许访问 ftp 的用户列表
userlist_deny=NO
userlist_enable=YES
# 记录允许访问 ftp 用户列表
userlist_file=/etc/vsftpd.user_list
# 不配置可能导致莫名的530问题
seccomp_sandbox=NO
# 允许文件上传
write_enable=YES
# 使用utf8编码
utf8_filesystem=YES
6、新建文件 /etc/vsftpd.user_list,用于存放允许访问 ftp 的用户
sudo touch /etc/vsftpd.user_list
sudo chmod a+w /etc/vsftpd.user_list
修改 /etc/vsftpd.user_list ,加入刚刚创建的用户:uftp
7、设置访问权限
设置主目录访问权限,只读:sudo chmod a-w /home/uftp
新建公共目录,并设置权限(读写):sudo mkdir /home/uftp/public && sudo chmod 777 -R /home/uftp/public
重启vsftpd 服务:sudo systemctl restart vsftpd.service
8、用户主目录/home/uftp/只读,新建一个文件测试。
sudo touch /home/uftp/welcome.txt
9、通过 Windows 资源管理器访问
ftp://uftp:你的密码@<您的 CVM IP 地址>。
public目录下可以读写,上传和下载,而主目录只能读取。
CentOS 7
1、使用yum安装vsftpd
yum install vsftpd -y
2、启动vsftpd
systemctl start vsftpd.service
netstat 命令可以看到系统已经监听了21端口: netstat -nltp | grep 21
3、访问 ftp://<您的 CVM IP 地址> 可浏览机器上的 /var/ftp 目录了,此时FTP 服务登陆允许匿名登陆,也无法区分用户访问,需要配置 FTP 访问权限。
vsftpd 的配置目录为 /etc/vsftpd,包含下列的配置文件:
vsftpd.conf 为主要配置文件
ftpusers 配置禁止访问 FTP 服务器的用户列表
user_list 配置用户访问控制
匿名访问让所有人都可以上传文件到服务器上而无需鉴权,而允许切换根目录则可能产生越权访问问题。阻止匿名访问和切换根目录,编辑 /etc/vsftpd/vsftpd.conf:
# 禁用匿名用户
anonymous_enable=NO
# 禁止切换根目录
chroot_local_user=YES
最后重启: systemctl restart vsftpd.service
4、创建 FTP 用户: useradd ftpuser
为用户 ftpuser 设置密码:echo "Password" | passwd ftpuser --stdin
5、限制该用户仅能通过 FTP 访问
限制用户 ftpuser 只能通过 FTP 访问服务器,而不能直接登录服务器:
usermod -s /sbin/nologin ftpuser
6、为用户 ftpuser 创建主目录并约定:
/data/ftp 为主目录, 该目录不可上传文件。
/data/ftp/pub 文件只能上传到该目录下。
创建目录:mkdir -p /data/ftp/pub
设置访问权限:chmod a-w /data/ftp && chmod 777 -R /data/ftp/pub
设置为用户的主目录:usermod -d /data/ftp ftpuser
7、通过 Windows 资源管理器访问
ftp://uftp:你的密码@<您的 CVM IP 地址>。
public目录下可以读写,上传和下载,而主目录只能读取。
网友评论