在Linux服务器上创建FTP文件夹,正确的姿势是先通过SSH登录服务器用mkdir命令建目录,再配合FTP客户端上传文件,因为绝大多数FTP服务默认关闭了远程建目录权限。
为什么你在FTP客户端里找不到新建文件夹按钮
很多人在Windows上习惯了右键新建文件夹,切换到Linux后就懵了,严格来说这不是Linux的问题,而是FTP协议和权限机制的限制,FTP协议本身是支持MKD(创建目录)指令的,但你是不是能建文件夹,取决于服务器上的vsftpd或ProFTPD配置,以及目录的所有者和权限位。
举一个最常见的场景:你用root装好了vsftpd,直接用root账号登录FTP,结果打开FileZilla想新建文件夹,发现按钮是灰色的,原因很简单vsftpd配置里默认禁止root这类超级用户登录,甚至很多发行版把root写进了userlist拒绝名单,这种情况做再多客户端操作都是白费力气。
在动手之前建议你先做一件事:确认你用的是什么FTP账号,它属于系统用户还是vsftpd虚拟用户,这决定了后面的操作路径完全不同。
Linux FTP服务器怎么创建文件夹:最稳妥的三种方式
SSH命令行创建目录后同步给FTP
这种方式最适合刚搭建好FTP服务器、目录结构还没固定的阶段,你通过SSH连接服务器,在FTP根目录下直接创建文件夹。
一般流程是这样:
- SSH登录Linux服务器,找到FTP根目录(常见路径如
/var/ftp、/srv/ftp或你自己设定的目录) - 用
mkdir命令创建文件夹,一条命令建多级目录用-p参数 - 为文件夹设置仓库所有者权限,让FTP账号有写入权限
- 回到本地FTP客户端刷新,文件夹即刻可见
命令参照:
su - root cd /var/ftp/pub mkdir -p 2026/订单文件 chown ftpuser:ftpgroup 2026/订单文件 chmod 755 2026/订单文件
这个例子展示了关键点:mkdir -p能一次性创建多级目录,chown解决FTP账号是否有权限读写的问题,chmod 755控制其他人只能看不能改,行业共识认为,目录权限设置比创建动作本身更容易出错,后面专门讲。
通过FTP命令的MKD指令远程建目录
如果不方便SSH操作,或者你需要定期远程建目录,可以用FTP命令,在Windows命令行或者Linux终端里输入:
ftp 服务器IP lftp 服务器IP
连接成功后:
mkdir /upload/客户资料
如果你用的是lftp,还支持mkdir -p递归创建多级目录,和Linux原生命令完全一致,对于已经开放了写入权限的FTP账号,这招很管用。
判断你的FTP账号能不能用MKD指令远程建目录,不妨做个本地测试:连接FTP后输入quote mkd /testdir,如果返回路径信息说明服务端允许,如果返回550错误说明权限不放开。
FileZilla等图形客户端专用操作
FileZilla连接上之后,在远程站点区域右键空白处,选择“创建目录”,输入名称回车即可,如果右键没有这个选项,先检查你的登录账号是否具备写入权限。
这类图形客户端还有一个用途:可以直接拖拽本地文件夹到远程目录,客户端会自动帮你递归创建,效率比命令行高,适合批量建目录的场景。
vsftpd环境下无法创建文件夹的几个核心原因
如果你碰到的状况是“目录建不起来”半途而废,多半不是操作问题而是环境问题。
write_enable未开启
vsftpd配置文件中有一个核心参数叫write_enable=YES,没开这个参数,所有写操作全部失效,不管你是上传文件还是建目录,服务器统一返回550错误。
查看和修改方式:
vim /etc/vsftpd/vsftpd.conf # 确保存在 write_enable=YES systemctl restart vsftpd
FTP根目录权限限制
如果你的FTP账号被限定在家目录或者某个chroot目录里,而这个目录属于root所有,并且没有给属组或其他用户写权限,那你在FTP客户端里看到的根目录就是“只读”状态。
解决办法是修改目录属主:
chown -R ftpuser /home/ftpuser
这样FTP账号才拥有创建文件夹的权限。
SELinux拦截导致的静默失败
CentOS、RHEL等系统开启了SELinux时,即使配置看着全对,FTP创建目录也可能会失败,这类错误最讨厌,因为它日志里往往不显示明确原因。
排查命令:
getsebool -a | grep ftp setsebool -P ftpd_full_access on
重启vsftpd后再试,多数情况下,SELinux是Linux的FTP服务器无法创建目录的“隐形杀手”。
FTP创建文件夹命令大全与工具对比
以下列举常用操作和对应工具,方便你根据FTP服务器怎么创建文件夹的实际需求直接选用:
| 操作目标 | 推荐工具 | 核心命令/操作 |
|---|---|---|
| 创建单个目录 | SSH命令行 | mkdir /路径/目录名 |
| 递归创建多级目录 | lftp | mkdir -p -f a/b/c |
| 同时建多个互不嵌套的目录 | FileZilla | 开启多个标签,依次在远程区域右键建目录 |
| 创建后立即调整权限 | SSH命令行 | mkdir dir && chmod 750 dir |
| 上传时自动创建目录 | lftp | mirror -R 本地目录 远程目录 |
| 批量以日期命名的目录 | 脚本 | for i in {1..12}; do mkdir $(date +%Y)-$i; done |
FTP服务器创建文件夹后必须做的权限配置
目录建好了,上传文件时提示553,这就是纯权限问题的典型症状,我们建议按以下顺序排查检查:
- 查看当前目录权限
ls -ld /srv/ftp/目标目录 - 确认属主是FTP账号本身或者属组包含FTP账号
- 确保目录有写入与执行权限,例如
drwxr-xr-x中属主可写,如果你希望FTP用户能自由建子目录,这里就得是drwxr-xr-x的属主写权限到位 - 检查上级目录的可穿越权限,父目录没有执行权限,子目录权限再正确也进不去
实际运维中,很多朋友处理“CentOS vsftpd配置完成后上传失败”的排查过程,基本就是在这几步里来回打转,检查时建议按从上到下的优先级顺序处理。
虚拟用户的FTP目录创建策略
如果你用了虚拟用户方式,目录管理逻辑稍有不同,虚拟用户映射到同一个系统用户,但各自主目录独立,此时创建文件夹有两种做法:
- 在系统用户的FTP根目录下为每个虚拟用户建立同名文件夹
- 在vsftpd配置里指定
local_root=/路径/${USER}动态映射用户主目录
第二种方式特别适合用户数量大、目录自动生成的场景,配合PAM认证,虚拟用户只要一登录,就会被自动引导到自己的目录里,不用单独建文件夹。
云服务器上的FTP目录创建注意事项
近年来国内云服务器用户量增长很快,很多人在简米云、酷番云上搭建FTP,同样的Linux命令在云服务器上操作没什么区别,但有一个容易踩坑的地方:安全组规则,云服务器控制台的安全组如果没放行FTP端口(协议端口21,以及数据端口或被动端口范围),你在客户端里输账号密码能连上,但一创建目录就卡住不动,然后超时。
所以云服务器上创建FTP文件夹,更有效率的顺序是:
- 先SSH登录服务器,放开安全组端口
- 再执行mkdir命令建目录
- 修改属主属组
- 本地客户端查看结果
这样可以减少因为安全组拦截导致的FTP客户端假死问题。
Q&A:为什么我在Linux FTP服务器里创建了文件夹,但客户端看不到
这通常是因为客户端没有刷新目录缓存,多数FTP客户端有缓存机制,你通过SSH建目录后,客户端还显示旧列表,按F5或右键刷新即可,另外一个可能原因是你创建目录的路径和FTP根目录没有对应关系,比如SSH建在了/home/xxx下,但FTP根目录指向了/srv/ftp。
Q&A:FTP用户可以在线创建文件夹吗
取决于两个条件:vsftpd配置里是否启用了write_enable=YES,以及FTP账号对目标目录是否有写权限,两个条件都成立,就可以通过客户端或FTP命令在线创建文件夹,反之,任何一项不满足,服务器都会返回550错误拒绝创建。
Q&A:怎么批量给多个FTP账号创建各自所属的文件夹
用脚本最省事,在SSH命令行下,遍历你的用户列表,逐个调用mkdir -p和chown,命令可以写成一行for循环:for u in zhangsan lisi wangwu; do mkdir /home/$u; chown $u:$u /home/$u; done,执行前建议先用echo打印检查一遍路径和用户名,避免权限设错。
回到开头那句话:在Linux上创建FTP文件夹,核心不在于敲哪条命令,而在于理清目录权限和服务配置之间的关系,掌握SSH命令搭配客户端验证,排查SELinux与安全组等因素,这个操作就再也不会成为卡点。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/715281.html





