Linux如何创建FTP账户并设置密码?

在Linux系统中创建FTP账户并设置密码是常见的文件共享需求,通常使用vsftpd(Very Secure FTP Daemon)作为FTP服务器软件,它轻量、安全且配置灵活,以下将详细介绍在Linux环境下创建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:

linux如何创建ftp账户密码

# 编辑用户列表文件
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服务:

linux如何创建ftp账户密码

ftp localhost

输入用户名和密码,登录成功后可执行:

  • ls:列出文件
  • put test.txt:上传文件(需write_enable=YES)
  • get test.txt:下载文件
  • quit:退出

图形化工具测试

使用FileZilla等FTP客户端,输入服务器IP、用户名、密码,选择“FTP”协议(若被动模式未启用,可能需手动勾选“使用被动模式”)连接。

常见问题排查

若无法登录或功能异常,可通过以下方式排查:

  1. 查看日志:日志文件位于/var/log/vsftpd.log,可通过tail -f /var/log/vsftpd.log实时查看错误信息。
  2. 检查服务状态:sudo systemctl status vsftpd,确认服务是否正常运行。
  3. 验证用户列表:确认用户是否在/etc/vsftpd.user_list中,且无拼写错误。
  4. 检查权限:确认家目录属主和权限正确,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配置导致,可按以下步骤排查:

  1. 确认家目录权限为755,属主为用户本身(chown和chmod检查)。
  2. 若启用chroot_local_user=YES,确保家目录无不可写权限(如allow_writeable_chroot=YES)。
  3. 检查SELinux策略:执行sudo setsebool -P ftpd_full_access on或调整目录上下文。
  4. 确认write_enable=YES在配置文件中已启用。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/35947.html

赞 (0)
酷番叔酷番叔
上一篇 2025年10月4日 20:31
下一篇 2025年10月4日 20:44

相关推荐

  • 如何快速安装TigerVNC详细步骤

    在Linux服务器管理中,图形界面连接能显著提升操作效率,尤其适合桌面环境管理、可视化软件调试等场景,以下是三种主流图形连接方法的详细操作指南,所有步骤均基于Linux发行版(如Ubuntu/CentOS)验证,注重安全性与易用性,准备工作服务器端配置安装桌面环境(以GNOME为例): # Ubuntu/Deb……

    2025年7月17日
    23500
  • Windows如何使用Linux命令?实用操作方法有哪些?

    在Windows操作系统下使用Linux命令,已成为许多开发者和运维人员的日常需求,尤其是在跨平台开发、服务器管理或脚本编写场景中,Windows本身对Linux命令的支持逐步增强,用户可通过多种方式实现这一目标,以下是几种主流方法的详细介绍,Windows Subsystem for Linux(WSL)WS……

    2025年9月25日
    27500
  • NAT切换如何避免业务中断?

    在Linux系统中直接修改iptables/nftables规则(尤其是NAT表)会导致:现有连接中断:已建立的TCP连接和UDP会话因规则刷新而丢失,业务抖动:在线用户感知到网络闪断,影响实时应用(如视频会议、金融交易),状态不一致:conntrack表记录与NAT规则不匹配,引发数据包丢弃,平滑生效的核心原……

    2025年7月24日
    27500
  • linux dump如何关闭

    Linux 中,关闭 dump 可通过修改 /etc/sysctl.conf 文件,将 `kernel.

    2025年8月18日
    28300
  • Linux如何查询MAC地址?

    在Linux系统中,MAC地址(Media Access Control Address)是网卡的物理地址,用于在网络中唯一标识网络接口设备,查询MAC地址是网络配置、故障排查、安全审计等场景中的常见操作,Linux提供了多种命令和工具来查询MAC地址,本文将详细介绍这些方法,包括它们的适用场景、具体用法及示例……

    2025年9月16日
    46800

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信