Linux系统如何添加FTP用户并配置其访问权限与登录目录?

在Linux系统中添加FTP用户通常涉及安装FTP服务、创建用户、配置权限及优化安全设置等步骤,以下以常用的vsftpd(Very Secure FTP Daemon)为例,详细讲解完整流程。

linux如何添加ftp用户

安装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用户需对家目录有读写权限,但需限制系统级访问。

linux如何添加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命令连接本地服务器:

linux如何添加ftp用户

ftp localhost

输入用户名ftpuser和密码,成功后执行ls查看文件,put test.txt测试上传,get test.txt测试下载,最后bye退出。

客户端工具测试

使用FileZilla等FTP客户端,输入服务器IP、用户名、密码、端口(默认21),选择“FTP-文件传输模式”(若需加密可选“FTPES”),连接后测试文件传输功能。

安全优化建议

  1. 禁用root登录:确保vsftpd.conf中userlist_enable=YES、userlist_file=/etc/vsftpd/user_list、userlist_deny=YES,并将root加入/etc/vsftpd/user_list,禁止root通过FTP登录。
  2. 限制用户访问:通过/etc/vsftpd/chroot_list文件(需配置chroot_list_enable=YES)指定允许/禁止chroot的用户。
  3. 定期更新:使用sudo apt upgrade或sudo yum update保持vsftpd版本最新,修复安全漏洞。

相关问答FAQs

问题1:FTP用户登录时提示“530 Login incorrect”,如何排查?
解答:

  1. 检查用户名密码是否正确(sudo passwd ftpuser重置密码);
  2. 确认用户是否创建成功(cat /etc/passwd | grep ftpuser);
  3. 检查vsftpd服务状态(sudo systemctl status vsftpd);
  4. 查看日志文件(/var/log/vsftpd.log),定位错误信息(如权限不足、防火墙拦截);
  5. 若使用SELinux,执行setenforce 0临时关闭,若问题解决则需配置SELinux策略(sudo setsebool -P ftpd_full_access on)。

问题2:如何限制FTP用户只能访问指定的子目录(如/home/ftpuser/web),不能跳出该目录?
解答:

  1. 确保vsftpd.conf中chroot_local_user=YES和allow_writeable_chroot=YES已配置;
  2. 方法一(推荐):在用户家目录下创建子目录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。

  3. 创建用户配置文件/etc/vsftpd/user_conf/ftpuser为:local_root=/home/ftpuser/web,重启vsftpd服务即可生效。

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

赞 (0)
酷番叔酷番叔
上一篇 2025年9月30日 11:15
下一篇 2025年9月30日 11:31

相关推荐

  • Linux中如何彻底卸载nginx并清理所有残留配置与文件?

    在Linux系统中卸载Nginx需要根据其安装方式(如包管理器安装或源码编译安装)选择不同的方法,同时需注意备份配置文件和数据文件,避免误操作导致服务中断或数据丢失,以下是详细的卸载步骤及注意事项,卸载前的准备工作在开始卸载Nginx前,建议完成以下准备工作,确保卸载过程顺利且不影响重要数据:备份配置文件:Ng……

    2025年9月25日
    28200
  • 硬盘分区到底是什么?

    分区是将物理硬盘划分为多个独立逻辑区域的操作,每个分区可安装不同操作系统或存储不同数据,便于系统管理、数据隔离和性能优化。

    2025年7月17日
    33600
  • Linux如何查看用户UID?命令方法与操作步骤详解?

    在Linux系统中,用户UID(User Identifier)是用于唯一标识用户的数字标识符,系统通过UID来区分不同用户,并控制其文件访问权限和系统资源使用权限,查看用户UID是Linux日常管理和故障排查中的常见操作,本文将详细介绍多种查看UID的方法,包括原理、命令示例及注意事项,通过 /etc/pas……

    2025年10月7日
    29700
  • Linux如何运行exe文件?两种方法揭秘

    在Linux系统中运行Windows的.exe文件主要有两种方法:使用Wine兼容层(轻量级,直接运行但兼容性有限)或通过虚拟机(如VirtualBox/VMware,完整Windows环境运行,资源消耗大但兼容性好)。

    2025年6月18日
    41500
  • Linux下fopen能打开文件夹吗?正确操作方式是什么?

    在Linux系统中,fopen是C标准库中用于打开文件的函数,其核心功能是操作普通文件(如文本文件、二进制文件等),而无法直接用于打开文件夹(目录),这一限制源于Linux/Unix系统的文件设计理念:文件和目录是两种不同的文件系统对象,文件用于存储数据,目录用于管理文件和其他目录的索引结构,要操作目录,需要使……

    2025年8月25日
    23100

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信