虚拟用户FTP部署
Linux vsftp创建虚拟用户
FTP有三种登录方式:匿名登录、本地系统用户登录和虚拟用户登录。
虚拟用户是ftp服务器的专用用户,它的特点是只能访问服务器为其提供的FTP服务,而不能访问系统的其它资源。所以,如果想让用户对FTP服务器站内具有写权限,但又不允许访问系统其它资源,可以使用虚拟用户来提高系统的安全性。在VSFTP中,认证这些虚拟用户使用的是单独的口令库文件(pam_userdb),由可插入认证模块(PAM)认证。使用这种方式更加安全,并且配置更加灵活。
—、关闭防火墙
> systenmctl stop firewalld
> setenforce 0 #不关闭启动会报错
[root@client vsftpd]# systemctl restart vsftpd Job for vsftpd.service failed because the control process exited with error code. See "systemctl status vsftpd.service" and "journalctl -xe" for details.
或者永久性关闭防火墙
# vim /etc/selinux/config
SELINUX=disable
二、安装vsftpd服务
使用yum安装vsftpd # yum -y install vsftpd* 备份vstpd主配置文件 # cp /etc/vsftpd/vsftpd.conf{,.bak}
三、配置虚拟用户访问的vsftpd服务
1、创建虚拟用户密码文件,奇数行为用户名,偶数行为密码
# vim /etc/vsftpd/vir_user
user1
1234567a
user2
1234567b
2、生成虚拟用户数据库
# yum -y install libdb-utils # db_load -T -t hash -f /etc/vsftpd/vir_user /etc/vsftpd/vir_user.db # chmod 600 /etc/vsftpd/vir_user.db
3.配置vsftpd pam 验证文件 修改先前备份文件
# cp /etc/pam.d/vsftpd{,.bak}
将auth、account的所有配置行均注释掉,添加以下两行
# vim /etc/pam.d/vsftpd auth required pam_userdb.so db=/etc/vsftpd/vir_user account required pam_userdb.so db=/etc/vsftpd/vir_user
4.添加一个系统用户‘virftp’,所有虚拟用户都会映射到此用户后对文件系统进行读写操作
# mkdir /ftproot # useradd -d /ftproot -s /sbin/nologin virftp # chown -R virftp:virftp /ftproot
5.设置vsftpd主配置文件
### 注意配置文件中不能有空格 否则会导致启动失败
vim /etc/vsftpd/vsftpd.conf #禁止匿名用户登录 anonymous_enable=NO #允许本地用户登录 local_enable=YES #启用虚拟账户 guest_enable=YES #把虚拟账户映射到系统账户 guest_username=virftp #使用虚拟用户验证(PAM验证) pam_service_name=vsftpd #设置存放各虚拟用户配置文件的目录(此目录下与虚拟用户名相同的文件为他的配置文件) user_config_dir=/etc/vsftpd/vsftpd_viruser #启用chroot时,虚拟用户根目录允许写入 allow_writeable_chroot=YES
6.配置虚拟用户各自的配置文件,文件名称是‘虚拟用户名’ ### 注意配置文件中不能有空格 否则会导致登录失败
vim /etc/vsftpd/vsftpd_viruser/user1 #允许写入 write_enable=YES #允许浏览FTP目录和下载 anon_world_readable_only=NO #允许虚拟用户上传文件 anon_upload_enable=YES #允许虚拟用户创建目录 anon_mkdir_write_enable=YES #允许虚拟用户执行其他操作(如改名、删除)
anon_other_write_enable=YES #上传文件的掩码,如022时,上传目录权限为755,文件权限为644
anon_umask=022 #指定虚拟用户的虚拟目录(虚拟用户登录后的主目录)
local_root=/ftproot/admin/
7.创建虚拟用户的根目录,要保证虚拟用户映射的系统用户,对这个根目录有读写权限
# mkdir -p /ftproot/admin/ # chown -R virftp.virftp /ftproot/admin/
8.关闭可以访问的用户 #vim /etc/vsftpd/ftpusers
四、测试配置结果
1.重启vsftpd服务 # systemctl restart vsftpd # systemctl enable vsftpd 2.关闭防火墙 # systemctl stop firewalld
附:vsftp配置文件翻译
anonymous_enable=YES 是否允许匿名登陆 local_enable=YES 允许本地登陆 write_enable=YES 启用任何形式的ftp 写入命令 local_umask=022 FTP上本本地的文件权限,默认是077,不过vsftp安装后的配置文件里默认是022 anon_upload_enable=YES 允许匿名ftp 用户上传文件 anon_mkdir_write_enable=YES 允许匿名用户 创建新的目录 dirmessage_enable=YES 激活目录消息,向远程用户发送消息,进入某个目录 xferlog_enable=YES 激活上传/下载 日志记录 connect_from_port_20=YES 确保RORT传输连接来自端口 20 chown_uploads=YES
chown_username=whoever 设置 匿名用户上传文件的默认用户,不推荐使用root xferlog_file=/var/log/xferlog 日志文件路径 xferlog_std_format=YES 日志文件使用标准ftpd xferlog格式的日志文件 ,默认位置 /var/log/xferlog idle_session_timeout=600 更改超时空闲会话的默认值 data_connection_timeout=120 超时数据连接的默认值 nopriv_user=ftpsecure 创建ftp服务器 独立的用户 async_abor_enable=YES 启用 异步 ABOR 请求 ascii_upload_enable=YES 允许ASCII模式上传文件 ascii_download_enable=YES 允许ASCII模式下载文件 ftpd_banner=Welcome to blah FTP service. 自定义登陆标题字符串 deny_email_enable=YES 指定不允许匿名登陆电子邮件 banned_email_file=/etc/vsftpd/banned_emails 默认路径 chroot_local_user=YES
chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list 指定 chroot 参数 CHROOT就是Change Root,也就是改变程序执行时所参考的根目录位置。CHROOT可以增进系统的安全性,限制使用者能做的事 ls_recurse_enable=YES 启用 ls –R 选项 listen=NO 启用 listen 指令,vsftp 以独立模式运行侦听ipv4 套接字,该指令不能同时使用 with listen_inv6 指令 listen_ipv6=YES 监听ipv6 pam_service_name=vsftpd 虚拟用户使用PAM认证方式 userlist_enable=YES 只允许userlist 文件中的账户登陆 tcp_wrappers=YES 是否允许tcp_wrappers 管理 anon_other_write_enable=YES 允许匿名用户改名和删除文件 anon_world_readable_only=YES 匿名用户可以读文件 反之就是不能读 pasv_min_port=30000
pasv_max_port=35000 PASV模式下指定端口范围
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗