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模块实现的身份认证
[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
#deny file=/etc/vsftpd/ftpusers 就是限制哪些用户不允许使用vsftpd,都在这个文件里
/etc/vsftpd/ftpusers:如上,这些用户不允许用ftp,默认为系统用户
[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]
[root@localhost ~]# cat /etc/vsftpd/user_list root bin .... nobody
/etc/vsftpd/chroot_list:这个文件需要手动建立,意思是将这文件内的用户固定在他的家目录下
[root@localhost ~]# cat /etc/vsftpd/chroot_list root
.... admin
/etc/vsftpd/vsftpd.conf:主配置文件
[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服务器,可以使用匿名用户登录,但是只能下载文件,一个本地管理员登录时不被限制,其他本地账号被限制在自己家目录
[root@localhost vsftpd]# vim vsftpd.conf anonymous_enable=YES #启用匿名 anon_world_readable_only=YES #匿名只能下载可读的文件 local_enable=YES #启用本地 write_enable=YES #本地用户可以上传 xferlog_enable=YES #可以用软件分析的log xferlog_file=/var/log/vsftpd.log #存放路径 dual_log_enable=YES #同时生成ftp自己的log vsftpd_log_file=/var/log/vsftpd.log #存放路径 connect_from_port_20=YES #端口 xferlog_std_format=YES #xferlog格式 pam_service_name=vsftpd #pam tcp_wrappers=YES #tcpwapper 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列表
[root@localhost vsftpd]# cat user_list anonymous #假如这个列表对应的选项是NO,匿名用户就无法登录了,所以把匿名用户加在这里面 admin #下面这两个用户都可以登录 aaa
chroot_list列表
[root@localhost vsftpd]# cat chroot_list aaa #根据上面的选项,这个文件代表哪个用户不限制在家目录
经测试,其他人都不可以登录,匿名用户和admin用户都在限制在家目录,匿名用户无法上传文件。