在Linux系统中添加FTP用户通常涉及安装FTP服务、创建用户、配置权限及优化安全设置等步骤,以下以常用的vsftpd(Very Secure FTP Daemon)为例,详细讲解完整流程。
安装FTP服务(vsftpd)
vsftpd是Linux下安全性较高的FTP服务器软件,首先需根据系统发行版选择安装命令。
- Ubuntu/Debian系统:
更新软件列表后安装:sudo apt update && sudo apt install vsftpd -y
- CentOS/RHEL系统:
使用yum或dnf安装:sudo yum install vsftpd -y # CentOS 7及以下 # 或 sudo dnf install vsftpd -y # CentOS 8/RHEL 8+
安装完成后,检查服务状态:
sudo systemctl status vsftpd # 应显示“active (running)”
创建FTP专用用户
为避免FTP用户直接登录系统,需创建独立的系统用户,并限制其shell权限。
创建用户并设置家目录
假设添加FTP用户名为ftpuser
,家目录为/home/ftpuser
,禁止其登录系统shell:
sudo useradd -m -d /home/ftpuser -s /sbin/nologin ftpuser
参数说明:
-m
:自动创建家目录(若不存在);-d /home/ftpuser
:指定用户家目录(FTP默认访问路径);-s /sbin/nologin
:禁止用户通过SSH等方式登录系统,提升安全性。
设置用户密码
为ftpuser
设置登录密码:
sudo passwd ftpuser
根据提示输入两次密码,确保密码复杂度(包含大小写、数字、特殊字符)。
配置用户目录权限
FTP用户需对家目录有读写权限,但需限制系统级访问。
设置目录所有者
确保家目录所有者为ftpuser
:
sudo chown -R ftpuser:ftpuser /home/ftpuser
设置目录权限
sudo chmod -R 755 /home/ftpuser # 所有者可读写执行,其他用户可读执行
若需允许用户上传文件,可单独创建上传目录并设置权限:
sudo mkdir /home/ftpuser/upload sudo chown -R ftpuser:ftpuser /home/ftpuser/upload sudo chmod -R 777 /home/ftpuser/upload # 上传目录需开放写权限(生产环境建议755+所有者权限)
配置vsftpd服务
核心配置文件为/etc/vsftpd/vsftpd.conf
,需根据需求修改关键参数。
备份原配置文件
sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
编辑配置文件
使用vim
或nano
打开配置文件:
sudo vim /etc/vsftpd/vsftpd.conf
取消注释或修改以下参数:
参数 | 值 | 说明 |
---|---|---|
anonymous_enable |
NO |
禁止匿名登录(默认开启,需手动关闭) |
local_enable |
YES |
允许本地用户登录 |
write_enable |
YES |
允许用户上传、修改文件 |
chroot_local_user |
YES |
限制用户仅能访问家目录(防止越权) |
allow_writeable_chroot |
YES |
允许被限制在家目录的用户写文件(需配合chroot_local_user ) |
user_sub_token |
$USER |
动态匹配用户名 |
local_root |
/home/$USER |
设置用户家目录为FTP根目录 |
pasv_min_port |
10000 |
被动模式最小端口(避免端口冲突) |
pasv_max_port |
10100 |
被动模式最大端口 |
listen |
YES |
监听IPv4地址 |
listen_ipv6 |
NO |
禁用IPv6监听(若无需IPv6支持) |
创建用户配置目录(可选)
若需为不同用户设置独立权限(如限制访问目录),可创建用户配置文件目录:
sudo mkdir /etc/vsftpd/user_conf
为ftpuser
创建单独配置文件/etc/vsftpd/user_conf/ftpuser
如下:
local_root=/home/ftpuser/web # 指定FTP根目录为子目录 write_enable=YES
启动服务并配置防火墙
启动vsftpd并设置开机自启
sudo systemctl restart vsftpd sudo systemctl enable vsftpd
开放防火墙端口
- Ubuntu/Debian(ufw):
sudo ufw allow 21/tcp # FTP控制端口 sudo ufw allow 10000:10100/tcp # 被动模式数据端口 sudo ufw reload
- CentOS/RHEL(firewalld):
sudo firewall-cmd --permanent --add-service=ftp # 添加FTP服务 sudo firewall-cmd --permanent --add-port=10000-10100/tcp # 被动模式端口 sudo firewall-cmd --reload
测试FTP连接
命令行测试
使用ftp
命令连接本地服务器:
ftp localhost
输入用户名ftpuser
和密码,成功后执行ls
查看文件,put test.txt
测试上传,get test.txt
测试下载,最后bye
退出。
客户端工具测试
使用FileZilla等FTP客户端,输入服务器IP、用户名、密码、端口(默认21),选择“FTP-文件传输模式”(若需加密可选“FTPES”),连接后测试文件传输功能。
安全优化建议
- 禁用root登录:确保
vsftpd.conf
中userlist_enable=YES
、userlist_file=/etc/vsftpd/user_list
、userlist_deny=YES
,并将root
加入/etc/vsftpd/user_list
,禁止root通过FTP登录。 - 限制用户访问:通过
/etc/vsftpd/chroot_list
文件(需配置chroot_list_enable=YES
)指定允许/禁止chroot的用户。 - 定期更新:使用
sudo apt upgrade
或sudo yum update
保持vsftpd版本最新,修复安全漏洞。
相关问答FAQs
问题1:FTP用户登录时提示“530 Login incorrect”,如何排查?
解答:
- 检查用户名密码是否正确(
sudo passwd ftpuser
重置密码); - 确认用户是否创建成功(
cat /etc/passwd | grep ftpuser
); - 检查vsftpd服务状态(
sudo systemctl status vsftpd
); - 查看日志文件(
/var/log/vsftpd.log
),定位错误信息(如权限不足、防火墙拦截); - 若使用SELinux,执行
setenforce 0
临时关闭,若问题解决则需配置SELinux策略(sudo setsebool -P ftpd_full_access on
)。
问题2:如何限制FTP用户只能访问指定的子目录(如/home/ftpuser/web
),不能跳出该目录?
解答:
- 确保vsftpd.conf中
chroot_local_user=YES
和allow_writeable_chroot=YES
已配置; - 方法一(推荐):在用户家目录下创建子目录
web
,设置权限后通过local_root
参数指定:sudo mkdir /home/ftpuser/web sudo chown -R ftpuser:ftpuser /home/ftpuser/web sudo chmod -R 755 /home/ftpuser/web
在
vsftpd.conf
中添加:local_root=/home/ftpuser/web
。 - 创建用户配置文件
/etc/vsftpd/user_conf/ftpuser
为:local_root=/home/ftpuser/web
,重启vsftpd服务即可生效。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/33078.html