ftp
FTP:file transfer protocol,监听于tcp21号端口;工作与应用层
ftp拥有两个tcp连接
命令连接:一直打开,监听tcp21号端口
数据连接:按需打开,主动模式监听于tcp20号端口,被动模式端口随机
数据传输模式:基于源文件的格式传输
vsftpd
配置文件目录:/etc/vsftpd
服务脚本:/etc/init.d/vsftpd
主程序:/usr/sbin/vsftpd
文件目录:/var/ftp
ftp用户:
匿名用户
系统用户
虚拟用户
/etc/pam.d/vsftpd:通过PAM模块实现的身份认证
1 2 3 4 5 6 7 8 9 | [root@localhost ~] # cat /etc/pam.d/vsftpd #%PAM-1.0 session optional pam_keyinit.so force revoke auth required pam_listfile.so item=user sense=deny file = /etc/vsftpd/ftpusers onerr=succeed auth required pam_shells.so auth include password-auth account include password-auth session required pam_loginuid.so session include password-auth<br> #deny file=/etc/vsftpd/ftpusers 就是限制哪些用户不允许使用vsftpd,都在这个文件里 |
/etc/vsftpd/ftpusers:如上,这些用户不允许用ftp,默认为系统用户
1 2 3 4 5 6 | [root@localhost ~] # cat /etc/vsftpd/ftpusers # Users that are not allowed to login via ftp root bin .... nobody |
/etc/vsftpd/user_list:同样是限制哪些用户可以使用ftp,需要配置主文件中的userlist_deny=[yes|no]
1 2 3 4 5 | [root@localhost ~] # cat /etc/vsftpd/user_list root bin .... nobody |
/etc/vsftpd/chroot_list:这个文件需要手动建立,意思是在这个文件内的用户可以浏览其他用户家目录下的内容
1 2 3 | [root@localhost ~] # cat /etc/vsftpd/chroot_list root<br>.... admin |
/etc/vsftpd/vsftpd.conf:主配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | [root@localhost pub] # cat /etc/vsftpd/vsftpd.conf #与服务器环境相关的设置 connect_from_port_20=YES #数据连接的端口号 listen_port=21 #命令连接的端口号 dirmessage_enable=YES #进入某个目录时是否显示欢迎消息,消息文件为每个目录下.message的文件 message_file=.message #上面一个YES才设置 listen=YES #可以用自带的脚本启动 pasv_enable=YES #支持数据连接的被动连接模式,一定要YES use_localtime=YES #使用本地时间 write_enable=YES #开启上传权限 connect_timeout=60 #数据连接的主动模式下,发出消息60秒后无答复,主动断开 accept_timeout=60 #数据连接的被动模式下,发出消息60秒后无答复,主动断开 data_connection_timeout=300 #连接建立完成后,由于线路问题,300秒内数据无法完成传输,断开 idle_session_timeout=600 #用户无操作超时时间 max_clients=0 #客户端最大的连接数,0不限制 max_per_ip=0 #单个ip的最大连接数 pasv_min_port=0 #被动模式的端口,可以有个区间,主要是为了防火墙放行 pasv_max_port=0 #0代表不限制 ftpd_banner=Welcome to blah FTP service. #欢迎信息 banner_file=文件路径 #欢迎信息为文件中的内容 #与本地用户相关的设置,就是/etc/passwd里的用户 guest_enable=YES #开放这个选项,任何本地账号都会被假设称guest guest_username= ftp #指定访客的身份 local_enable=YES #启用本地用户 local_max_rate=0 #本地用户限速byte/second,0不限速 *chroot_local_user=YES #是否限制本地用户在自己家目录下 *chroot_list_enable=YES #是否将列表内用户限制在家目录,例外用户 *chroot_list_file= /etc/vsftpd/chroot_list #列表位置 #这两个选项是互补的,list_enable的值代表是否对local_user的范围取反。 #local_user=YES list=YES代表限制本地,不限制列表 #local_user=NO list-YES代表不限制本地,限制列表 #local=YES list=NO代表都限制 #lical=NO list=NO代表都不限制 userlist_enable=YES #是否限制列表内用户登陆 userlist_deny=YES #对此列表是拒绝还是允许 #这个deny,假如为YES代表这个文件内的用户都被限制,假如为NO代表只有这个文件内的用户不被限制 userlist_file= /etc/vsftpd/user_list #列表位置 local_umask=022 #本地用户创建完文件的umask #匿名用户相关设置 anonymous_enable=YES #启用匿名用户 anon_world_readable_only=YES #仅语序匿名用户具有下载可读文件的权限,默认YES anon_other_write_enable=NO #是否允许匿名用户删除文件 anon_mkdir_write_enable=YES 是否允许匿名用户创建目录 anon_upload_enable=NO #是否允许匿名用户上传文件,允许的话上面是YES deny_email_enable=YES #阻挡特殊的邮件地址 banned_email_file= /etc/vsftpd/banned_emails #拒绝邮件地址文件,一行一个邮件地址 no_anon_password=NO #是否不检查匿名用户密码,不检查的话上面过滤邮件就没用了 anon_max_rate=0 #匿名用户限速,bytes/秒 anon_umask=077 #匿名用户的umask #系统安全设置 ascii_upload_enable=YES #使用ASCII格式上传文件 ascii_download_enable=YES #使用ASCII格式下载文件 one_process_model=NO #每建立一个连接都使用一个进程,耗资源 tcp_wrappers=YES #支持tcp_wrappers xferlog_enable=YES #记录用户的操作记录,记录到下面的文件 xferlog_file= /var/log/vsftpd .log #日志文件记录于哪里 xferlog_std_format=YES #日志文件的格式 chown_uploads=YES #用户上传完文件,所有者更改 chown_username=用户名 #更改为谁 |
/etc/vsftpd/user_list和/etc/vsftpd/ftpusers并不冲突,ftpusers是pam模块决定的不能登录的用户,user_list可以决定哪些用户可以登录,靠的就是主配置文件中的userlist_deny这个选项,如果是YES就是拒绝表里的用户NO就是允许表里的用户
新建个ftp服务器,可以使用匿名用户登录,但是只能下载文件,一个本地管理员登录时不被限制,其他本地账号被限制在自己家目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | [root@localhost vsftpd] # vim vsftpd.conf #启用匿名 anonymous_enable=YES #匿名只能下载可读的文件 anon_world_readable_only=YES #启用本地 local_enable=YES #本地用户可以上传 write_enable=YES #可以用软件分析的log xferlog_enable=YES #存放路径 xferlog_file= /var/log/vsftpd .log #同时生成ftp自己的log dual_log_enable=YES #存放路径 vsftpd_log_file= /var/log/vsftpd .log #端口 connect_from_port_20=YES #xferlog格式 xferlog_std_format=YES #pam pam_service_name=vsftpd #tcpwapper tcp_wrappers=YES #锁定家目录之后在登录总是出错,加上这个 allow_writeable_chroot=YES #锁定家目录 chroot_local_user=YES #不锁定家目录的名单 chroot_list_enable=YES #名单位置 chroot_list_file= /etc/vsftpd/chroot_list #用户列表 userlist_enable=YES #只有这个列表的用户才可以登录 userlist_deny=NO #列表位置 userlist_file= /etc/vsftpd/user_list |
user_list列表
1 2 3 4 5 | [root@localhost vsftpd] # cat user_list anonymous #假如这个列表对应的选项是NO,匿名用户就无法登录了,所以把匿名用户加在这里面 admin #下面这两个用户都可以登录 aaa |
chroot_list列表
1 2 | [root@localhost vsftpd] # cat chroot_list aaa #根据上面的选项,这个文件代表哪个用户不限制在家目录 |
经测试,其他人都不可以登录,匿名用户和admin用户都在限制在家目录,匿名用户无法上传文件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能