在Linux系统中创建FTP账户并设置密码是常见的文件共享需求,通常使用vsftpd(Very Secure FTP Daemon)作为FTP服务器软件,它轻量、安全且配置灵活,以下将详细介绍在Linux环境下创建FTP账户及密码的完整步骤,包括环境准备、安装配置、用户管理、权限控制及测试验证等内容,确保不同层次的用户都能顺利操作。
环境准备与安装vsftpd
在开始之前,需确保系统已联网,并根据发行版选择合适的安装方式,以Ubuntu/Debian和CentOS/RHEL为例:
Ubuntu/Debian系统
# 更新软件包列表 sudo apt update # 安装vsftpd sudo apt install vsftpd -y
CentOS/RHEL系统
# 安装EPEL源(若未安装) sudo yum install epel-release -y # 安装vsftpd sudo yum install vsftpd -y
安装完成后,启动vsftpd服务并设置开机自启:
# 启动服务 sudo systemctl start vsftpd # 开机自启 sudo systemctl enable vsftpd
配置vsftpd核心参数
vsftpd的配置文件位于/etc/vsftpd.conf
,需根据需求修改关键参数,确保安全性和功能性,以下是核心参数说明及配置建议:
参数名 | 默认值 | 作用说明 | 推荐值 |
---|---|---|---|
anonymous_enable | YES | 是否允许匿名用户登录 | NO(禁止匿名) |
local_enable | YES | 是否允许本地用户登录 | YES |
write_enable | YES | 是否允许本地用户上传文件 | YES |
chroot_local_user | NO | 是否将用户限制在自家目录(防止越权访问) | YES(安全) |
allow_writeable_chroot | NO | 是否允许chroot目录可写(需配合chroot_local_user=YES) | YES(需上传功能) |
pasv_enable | YES | 是否启用被动模式(推荐,避免防火墙问题) | YES |
pasv_min_port | 0 | 被动模式最小端口 | 10000 |
pasv_max_port | 0 | 被动模式最大端口 | 10100 |
userlist_enable | YES | 是否启用用户列表(控制允许登录的用户) | YES |
userlist_file | /etc/vsftpd.user_list | 用户列表文件路径 | /etc/vsftpd.user_list |
tcp_wrappers | YES | 是否使用TCP Wrappers访问控制 | YES |
编辑配置文件:
sudo nano /etc/vsftpd.conf
根据上述表格修改参数,确保以下关键配置正确:
anonymous_enable=NO local_enable=YES write_enable=YES chroot_local_user=YES allow_writeable_chroot=YES pasv_enable=YES pasv_min_port=10000 pasv_max_port=10100 userlist_enable=YES userlist_file=/etc/vsftpd.user_list tcp_wrappers=YES
保存后重启vsftpd服务:
sudo systemctl restart vsftpd
创建FTP用户并设置密码
创建系统用户(可选)
若需为FTP服务创建专用用户(而非系统已有用户),可使用useradd
命令,例如创建用户ftpuser
,家目录为/home/ftpuser
,并设置禁止SSH登录(可选):
# 创建用户,家目录为/home/ftpuser,不创建家目录(可选) sudo useradd -m -d /home/ftpuser -s /sbin/nologin ftpuser # 设置密码(交互式) sudo passwd ftpuser # 或非交互式(需谨慎,避免密码泄露) echo "your_password" | sudo passwd --stdin ftpuser
参数说明:
-m
:自动创建家目录-d
:指定家目录(建议单独设置,便于权限控制)-s
:指定登录shell(/sbin/nologin
禁止SSH登录,提升安全性)
将用户加入允许列表
vsftpd通过userlist_file
控制登录用户,需将用户加入/etc/vsftpd.user_list
:
# 编辑用户列表文件 sudo nano /etc/vsftpd.user_list
在文件中添加用户名(每行一个),
ftpuser
若需禁止某些用户登录,可单独创建/etc/vsftpd.user_deny
文件(需配置userlist_deny=YES
),但通常直接在user_list
中管理即可。
配置用户目录权限
为防止用户越权访问,需确保FTP用户的家目录权限正确,并启用chroot限制。
设置家目录权限
用户家目录的属主必须为用户本身,权限通常为755
(用户可读写执行,组和其他用户可读执行):
# 修改家目录属主 sudo chown ftpuser:ftpuser /home/ftpuser # 设置权限 sudo chmod 755 /home/ftpuser
配置chroot限制
若chroot_local_user=YES
,用户将被限制在自家目录及子目录中,无法访问上级目录,但需注意:若家目录存在writeable_chroot
问题(如用户无目录写入权限),可能导致无法登录,此时需确保:
- 家目录及其上级目录权限正确(如
/home
权限为755
,/home/ftpuser
为755
)。 - 若需允许用户上传,确保家目录内有可写子目录(如
mkdir /home/ftpuser/upload && chmod 755 /home/ftpuser/upload
)。
防火墙与SELinux配置
防火墙开放端口
vsftpd默认使用21端口(控制连接)和被动模式端口(10000-10100),需在防火墙中开放:
- Ubuntu/Debian(ufw):
sudo ufw allow 21/tcp sudo ufw allow 10000:10100/tcp sudo ufw reload
- CentOS/RHEL(firewalld):
sudo firewall-cmd --permanent --add-service=ftp sudo firewall-cmd --permanent --add-port=10000-10100/tcp sudo firewall-cmd --reload
SELinux配置(若启用)
CentOS/RHEL默认启用SELinux,可能阻止FTP访问,需执行:
# 设置SELinux允许FTP用户家目录写入 sudo setsebool -P ftpd_full_access on # 或为特定目录设置上下文(如/home/ftpuser) sudo semanage fcontext -a -t public_content_rw_t "/home/ftpuser(/.*)?" sudo restorecon -Rv /home/ftpuser
测试FTP账户
命令行测试
使用ftp
命令连接本地FTP服务:
ftp localhost
输入用户名和密码,登录成功后可执行:
ls
:列出文件put test.txt
:上传文件(需write_enable=YES
)get test.txt
:下载文件quit
:退出
图形化工具测试
使用FileZilla等FTP客户端,输入服务器IP、用户名、密码,选择“FTP”协议(若被动模式未启用,可能需手动勾选“使用被动模式”)连接。
常见问题排查
若无法登录或功能异常,可通过以下方式排查:
- 查看日志:日志文件位于
/var/log/vsftpd.log
,可通过tail -f /var/log/vsftpd.log
实时查看错误信息。 - 检查服务状态:
sudo systemctl status vsftpd
,确认服务是否正常运行。 - 验证用户列表:确认用户是否在
/etc/vsftpd.user_list
中,且无拼写错误。 - 检查权限:确认家目录属主和权限正确,SELinux策略未拦截。
相关问答FAQs
Q1:如何限制FTP用户只能访问指定目录(非家目录)?
A:可通过自定义家目录实现,创建用户ftpuser
并指定家目录为/var/ftp/files
:
sudo useradd -m -d /var/ftp/files -s /sbin/nologin ftpuser sudo chown ftpuser:ftpuser /var/ftp/files sudo chmod 755 /var/ftp/files
后续操作与常规用户一致,用户将被限制在/var/ftp/files
目录中。
Q2:创建FTP账户后无法上传文件,提示“553 Could not create file”,如何解决?
A:通常由权限或chroot配置导致,可按以下步骤排查:
- 确认家目录权限为
755
,属主为用户本身(chown
和chmod
检查)。 - 若启用
chroot_local_user=YES
,确保家目录无不可写权限(如allow_writeable_chroot=YES
)。 - 检查SELinux策略:执行
sudo setsebool -P ftpd_full_access on
或调整目录上下文。 - 确认
write_enable=YES
在配置文件中已启用。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/35947.html