1、FTP服务
1)FTP连接
控制连接(21):建立控制连接并传输控制命令
数据连接(20):建立数据连接并传输数据文件
2)传输模式
主动:服务器主动向客户端发起数据连接,客户机以PORT命令告知服务器......
被动:服务器被动等待客户端发送数据连接,服务器以PASV命令告知客户机.....
注:①无论是主动还是被动模式,控制连接都是由客户端向服务器发起
②只有在服务器处于主动模式时才用20端口传送数据;数据传输模式取决于客户端
3)用户类型
匿名用户:anonymous或ftp,一般用于公共文件的下载
本地用户:本地系统用户,使用本机的系统用户进行验证
虚拟用户:保存于独立的用户数据库,更安全
2、vsftp(Very Secure FTP Daemon)
服务名:vsftpd
1)主配置文件/etc/vsftpd/vsftpd.conf
常用的匿名FTP配置项
anonymous_enable=YES:启用匿名访问
anon_root=/var/ftp:匿名用户的FTP根目录
anon_upload_enable=YES:允许上传文件
anon_mkdir_write_enable=YES:允许创建目录
anon_other_write_enable=YES:开放其他写入权限,如覆盖、删除等
anon_max_rate=0:限制最大传输速率(字节/秒)
anon_umask=022:匿名用户所上传文件的权限掩码
常用的本地用户FTP配置项
local_enable=YES:启用本地系统用户
local_root=/var/ftp:设置本地用户的FTP根目录
chroot_local_user=YES:是否将用户禁锢在主目录
local_max_rate=0:限制最大传输速率(字节/秒)
local_umask=022:本地用户所上传文件的权限掩码
常用的全局配置项
listen=YES:是否以独立运行的方式监听服务
listen_address=192.168.4.1:设置监听的IP地址
listen_port=21:设置监听FTP服务的端口号
write_enable=YES:是否启用写入权限
download_enable=YES:是否允许下载文件
userlist_enable=YES:是否启用user_list列表文件
userlist_deny=YES:是否禁用user_list中的用户
max_clients=0:限制并发客户端连接数
max_per_ip=0:限制同一IP地址的并发连接数
pasv_enabled=YES:允许被动模式连接
2)用户控制文件
ftpusers:禁止登陆vsftpd服务器的用户,默认已包含root、bin、daemon等
user_list:可能被禁止也可能被允许的用户,当userlist_enable=yes时,此文件才生效
如果配置userlist_deny=yes,则仅禁止列表中的用户登陆
如果配置userlist_deny=no,则仅允许列表中的用户登陆
3、匿名访问的vsftpd服务
1)设置FTP目录及权限
chown ftp /var/ftp/pub
2)修改配置文件,允许匿名访问及上传
anonymous_enable=YES
local_enable=NO
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
3)重启服务
service vsftpd restart 或 service vsftpd reload
chkconfig vsftpd on
4)客户端访问ftp 192.168.1.1,匿名用户:ftp、anonymous
windows中ftp://192.168.1.1
注:①匿名访问对应的账号为ftp,宿主目录为/var/ftp,即匿名用户访问时默认的根目录为/var/ftp
②基于安全性考虑,FTP根目录不允许用户有写入权限,所以不要更改/var/ftp根目录的权限
③如果知道下载链接,也可使用wget命令,如wget ftp://192.168.1.1/a.txt
4、基于本地用户的vsftpd服务
本地用户访问时默认的根目录为自己的宿主目录,且拥有读写权限,并允许切换到其他目录
1) 添加测试用户
useradd jack
passwd 123
2)修改配置文件,开放本地用户
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES //将用户禁锢在其宿主目录,提高安全性
local_root=/var/ftproot //将本地用户的FTP根目录设置为同一个文件夹
local_umask=022 //设置本地用户上传或建立文件时的权限掩码,用于去掉特定的权限
max_clients=20 //限制并发客户端连接数
max_per_ip=2 //限制来自同一IP的客户连接数
local_max_rate=102400 //本地用户下载、上传限速为100KB/s
3)只允许特定用户(jack)使用vsftpd服务
vi /etc/vsftpd/user_list,添加用户jack
vi /etc/vsftpd/vsftpd.conf
userlist_enable=YES
userlist_deny=NO
5、基于虚拟用户的vsftpd服务
1)安装db4-utils软件包
rpm -ivh /mnt/iso/Server/db4-utils-4.3.29-9.fc6.i386.rpm
注:vsftpd服务使用Berkeley DB格式的数据库文件存放虚拟账号,需要使用db_load工具
2)创建用户名和密码列表文件并转化为DB数据库文件
vi /etc/vsftpd/user.list
tom ----奇数行为用户名
123 ----偶数行为密码
db_load -T -t hash -f user.list user.db
注:-T表示允许其他应用程序使用转换来的db数据文件、-t指定算法、-f 指定源文件
3)创建虚拟用户所映射的系统账户
useradd -d /var/ftproot -s /sbin/nologin virtual
chmod 775 /var/ftproot
注:①vsftpd服务将所有虚拟用户都映射为一个系统用户
②系统账户的宿主目录将作为所有虚拟用户登陆后的FTP根目录
4)建立pam认证文件
vi /etc/pam.d/vsftpd.vu
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/user -----省略了.db扩展名
account required pam_userdb.so db=/etc/vsftpd/user
注:①PAM配置文件主要用于为程序提供用户认证控制,vsftpd服务使用PAM进行用户的认证
②/etc/pam.d/vsftpd文件用于为vsftpd系统用户账号进行认证,虚拟用户需要重新创建PAM文件
5)修改vsftpd.conf文件,添加虚拟用户支持
vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES //虚拟用户需要映射为本地系统用户
#anon_upload_enable=YES ------注释此配置项
#anon_mkdir_write_enable=YES ------注释此配置项
#local_root=/var/local ------注释此配置项
guest_enable=YES //启用用户映射功能
guest_username=virtual //将用户映射指定为virtual
pam_service_name=vsftpd.vu //修改使用的PAM文件位置,原来已存在此配置项,修改即可
注:①虚拟用户默认作为匿名用户来处理,因此其对应的权限通常以none_开头
②实验时需要注意前面实验的所添加的用户限制,将其删除,如userlist_enable=yes
6)为不同的用户建立独立的配置文件
vi /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_dir //指定用户配置目录位置
mkdir /etc/vsftpd/vusers_dir //创建用户配置目录
cd /etc/vsftpd/vusers_dir
vi tom //为tom用户建立独立的配置文件
anon_upload_enable=YES
anon_mkdir_write_enable=YES
touch jack //为其他用户创建空的配置文件
service vsftpd restart
注:①在vsftpd.conf中启用user_config_dir配置项后需要为每个虚拟用户建立一个单独的配置文件(可以是空文件),否则可能会无法登陆
②在验证虚拟用户不同权限时需要将vsftpd.conf文件中的anon_upload_enable和anon_mkdir_write_enable配置项删除
③默认情况下当启用虚拟用户后,本地系统用户将无法登陆,如果想同时启用,需要做特殊设置