公司刚买了台FTP服务器,小王把账号密码发到群里:‘大家用ftp://192.168.1.100,用户名admin,密码123456’。结果第二天,市场部删了技术部的测试包,运维又覆盖了设计稿——不是故意的,是都用同一个账号,谁干的压根查不出来。
FTP本身不带多用户隔离,得靠配置
FTP协议(RFC 959)只定义了登录、上传、下载这些基本动作,并没规定‘张三只能进/public/zhangsan’。也就是说,原生FTP服务像一扇没锁的仓库大门,你给钥匙,就等于把整座仓库交出去。
真正实现多用户管理的,是FTP服务器软件(比如vsftpd、ProFTPD、Pure-FTPd)在协议之上加的权限层。关键不在‘传文件’,而在‘谁传、传哪儿、能不能删’。
以vsftpd为例,三步划清边界
假设你用的是Linux + vsftpd(最常见),想让销售、设计、开发各用各的目录,互不可见:
第一步,建系统用户(不给shell权限更安全):
sudo adduser -s /bin/false -d /var/ftp/sales sales
sudo adduser -s /bin/false -d /var/ftp/design design
sudo adduser -s /bin/false -d /var/ftp/dev dev第二步,在/etc/vsftpd.conf里打开本地用户支持和根目录限制:
local_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES第三步,确保每个用户的家目录权限正确(vsftpd要求chroot目录不能有写权限,所以实际上传目录要设在子目录里):
sudo mkdir /var/ftp/sales/upload
sudo chown sales:sales /var/ftp/sales/upload
sudo chmod 755 /var/ftp/sales重启服务后,sales用户登录,看到的就是/var/ftp/sales为根,只能进upload目录传文件,看不到design或dev的任何东西。
匿名用户和真实用户别混着用
有些老教程教‘开匿名FTP,再建几个本地用户’,这容易出问题。vsftpd默认把匿名用户映射到ftp系统账户,而本地用户走另一套认证逻辑。一旦配置错,比如anonymous_enable=YES又没关local_enable,可能造成权限穿透——本该只读的匿名区,被本地用户绕过限制写入。
建议:对外公开资料用独立的匿名FTP(如/var/ftp/pub),内部协作全走本地用户,账号密码由IT统一管理,定期轮换。
密码管理别图省事
用明文密码文件(比如vsftpd的/etc/vsftpd_login.db)比系统用户弱一点,但胜在可批量管理;直接绑系统用户则方便集成LDAP或AD。小团队用前者够用,百人以上公司建议对接域控——总不能每次新员工入职,运维都手动敲一遍adduser吧?
最后提醒一句:FTP本身不加密,用户名、密码、文件内容全在裸奔。如果传的是合同、源码这类敏感内容,要么上FTPS(FTP over SSL),要么直接切SFTP(基于SSH,更稳)。多用户管得再细,架不住数据被截包啊。