要在VPS上开通子FTP账号,首先需要明确当前VPS使用的FTP服务类型,常见的有vsftpd、proftpd等,不同服务的配置方法略有差异,以下以广泛使用的vsftpd为例,详细说明开通子FTP账号的步骤,整个过程主要涉及创建系统用户、配置vsftpd权限以及设置FTP目录隔离,确保子账号只能访问指定目录,保障服务器安全。

第一步:安装vsftpd服务
若VPS未安装vsftpd,需通过SSH登录服务器,执行以下命令安装(以CentOS为例):
yum install vsftpd -y # CentOS/RHEL系统 apt install vsftpd -y # Ubuntu/Debian系统
安装完成后启动服务并设置开机自启:
systemctl start vsftpd systemctl enable vsftpd
第二步:创建系统用户并设置密码
子FTP账号本质上是系统用户,需通过useradd命令创建,创建用户ftpuser1,并设置其家目录为/home/ftpuser1(此目录将作为FTP根目录):
useradd -m -d /home/ftpuser1 -s /sbin/nologin ftpuser1 passwd ftpuser1 # 设置用户密码
参数说明:-m自动创建家目录,-d指定家目录,-s /sbin/nologin禁止该用户通过SSH登录,仅允许FTP访问。

第三步:配置vsftpd实现目录隔离
为防止子账号访问系统其他目录,需修改/etc/vsftpd/vsftpd.conf配置文件,启用以下关键设置:
anonymous_enable=NO # 禁止匿名访问 local_enable=YES # 允许本地用户登录 chroot_local_user=YES # 将用户限制在家目录 allow_writeable_chroot=YES # 允许被限制在家的用户写权限(需配合以下配置)
为确保安全,建议在配置文件末尾添加:
user_sub_token=$USER # 定义用户变量 local_root=/home/$USER # 动态设置用户家目录
保存后重启vsftpd服务:systemctl restart vsftpd。
第四步:设置目录权限
确保用户家目录权限正确,避免因权限问题导致无法访问:

chown -R ftpuser1:ftpuser1 /home/ftpuser1 # 设置目录所有者 chmod 755 /home/ftpuser1 # 设置目录权限
若需上传文件,还需确保目录具有写权限:chmod 755 /home/ftpuser1/upload(假设上传目录为upload)。
第五步:防火墙与SELinux配置
若防火墙启用,需开放FTP端口(默认21)和数据端口(被动模式范围,如30000-31000):
firewall-cmd --permanent --add-service=ftp firewall-cmd --permanent --add-port=30000-31000/tcp firewall-cmd --reload
若开启SELinux,需安装setsebool并设置允许FTP家目录访问:
setsebool -P ftpd_full_access on
第六步:测试子FTP账号
使用FTP客户端(如FileZilla)输入VPS IP、用户名ftpuser1及密码,登录后应只能看到/home/ftpuser1目录下的文件,无法访问上级目录,验证配置成功。
相关FAQs
Q1:如何限制子FTP账号仅能上传文件,不能删除或修改?
A:可通过设置目录权限实现,在用户家目录下创建upload目录,仅赋予写权限,而其他目录只读:
mkdir /home/ftpuser1/upload chown -R ftpuser1:ftpuser1 /home/ftpuser1/upload chmod 511 /home/ftpuser1/upload # 仅可上传(执行+写) chmod 555 /home/ftpuser1 # 其他目录只读(读+执行)
在vsftpd配置文件中添加write_enable=YES以启用写入功能,但通过目录权限控制具体操作。
Q2:子FTP账号登录失败,提示“530 Login incorrect”怎么办?
A:可能原因及解决方案如下:
- 密码错误:确认输入的密码正确,可通过
passwd ftpuser1重置密码。 - 用户被禁止登录:检查
/etc/vsftpd/ftpusers文件(列出禁止登录的用户),确保用户名不在其中;或检查/etc/vsftpd/user_list文件(默认情况下,若userlist_enable=YES且userlist_deny=YES,则文件中用户禁止登录)。 - SELinux或防火墙拦截:临时关闭SELinux(
setenforce 0)测试,或检查防火墙日志确认是否拦截FTP端口。 - 家目录权限错误:确保家目录权限为755,用户对目录具有执行权限(
x),否则无法访问。
