CentOS系统中VSFTP权限控制策略
首先通过sudo yum install vsftpd安装VSFTP服务,安装完成后启动服务并设置开机自启:sudo systemctl start vsftpd、sudo systemctl enable vsftpd。
/etc/vsftpd/vsftpd.conf)anonymous_enable=NO,杜绝未授权用户登录。local_enable=YES,仅允许系统本地用户访问FTP。write_enable=YES,允许用户上传、删除文件(若需限制,可后续调整delete_enable等参数)。chroot_local_user=YES,将用户限制在自己的主目录(如/home/ftpuser),防止访问系统其他目录;若需允许部分用户突破chroot,可启用chroot_list_enable=YES并指定chroot_list_file(包含允许不受限的用户列表)。allow_writeable_chroot=YES,解决chroot环境下用户主目录可写问题(若未开启,用户无法向主目录上传文件)。local_umask=022控制新文件的默认权限(如用户创建的文件权限为644,目录为755)。通过userlist_enable=YES启用用户列表功能,指定userlist_file=/etc/vsftpd/user_list(包含允许访问的用户名,每行一个),并通过userlist_deny=NO设置仅允许列表中的用户登录(若设为YES则禁止列表中的用户登录)。此方法可实现“白名单”式的用户访问控制。
对于需要更严格隔离的场景(如不同用户对应不同目录、权限),可使用虚拟用户:
/etc/vsftpd/virtual_users.txt中添加用户名和密码(每行一个用户,格式为username password),使用db_load工具生成数据库文件:sudo db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db,并设置权限为600。/etc/pam.d/vsftpd,添加auth required pam_userdb.so db=/etc/vsftpd/virtual_users和account required pam_userdb.so db=/etc/vsftpd/virtual_users,启用虚拟用户认证。vsftpd.conf中配置guest_enable=YES(启用虚拟用户)、guest_username=ftpuser(虚拟用户映射的系统用户)、virtual_use_local_privs=YES(虚拟用户继承本地用户权限)、user_sub_token=$USER(动态生成用户子目录)、local_root=/home/$USER(用户根目录为用户对应的子目录),并确保chroot_local_user=YES和allow_writeable_chroot=YES。通过write_enable=YES开启写入权限(允许上传),若需限制下载,可设置read_enable=NO(禁止读取文件);若需限制用户删除文件,设置delete_enable=NO;若需限制用户更改文件权限,设置chmod_enable=NO。
开启被动模式以支持防火墙环境:设置pasv_enable=YES,并指定被动模式端口范围(如pasv_min_port=1024、pasv_max_port=1048),同时在防火墙中开放该端口范围。
若系统启用SELinux(getenforce显示Enforcing),需调整FTP目录的SELinux上下文:使用chcon -Rv --reference=/var/www/html /home/ftpuser将用户主目录上下文设置为与/var/www/html一致(允许FTP访问),或通过setsebool -P ftp_home_dir on开启FTP访问用户家目录的权限。
允许FTP服务端口(21/tcp)和被动模式端口范围(如1024-1048/tcp)通过防火墙:sudo firewall-cmd --permanent --add-service=ftp、sudo firewall-cmd --permanent --add-port=1024-1048/tcp、sudo firewall-cmd --reload。