一、ftp服务搭建
(一)概述
1.ftp连接及传输模式
(1)控制连接
TCP21,用于发送FTP命令信息
(2)数据连接
TCP20,用于上传、下载数据
(3)数据连接的建立类型
主动模式:服务端从20端口主动向客户端发起连接
被动模式:服务端在指定范围内某个端口被动等待客户端连接
2.FTP传输模式
(1)文本模式
ASCII模式,以文本序列传输数据
(2)二进制模式
Binary模式,以二进制序列传输数据
3. FTP用户的类型
(1)匿名用户
anonymous或ftp
(2)本地用户
账号名称、密码等信息保存在passwd、shadow文件
(3)虚拟用户
使用独立的账号/密码数据文件
4.常见的FTP服务器程序
IIS、Serv-U
wu-ftpd、Proftpd
vsftpd(Very Secure FTP Daemon)
5.常见的FTP客户端程序
ftp命令
CuteFTP、FlashFXP、LeapFTP、Filezilla
gftp、kuftp
6.Vsftpd软件包
(1)官方站点
http://vsftpd.beasts.org/
(2)主程序
/usr/sbin/vsftpd
(3)服务名
vsftpd
(4)用户控制列表文件
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
(5)主配置文件
/etc/vsftpd/vsftpd.conf
7.安装后目录解读
解读生成的目录
没有截完!
(1)用户控制列表文件
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
(2)主配置文件
/etc/vsftpd/vsftpd.conf
(3)利用service启动的执行文件
/etc/rc.d/init.d/vsftpd
(4)ftp用户默认工作目录(宿主目录)
/var/ftp
(5)ftp用户默认登录的目录
/var/ftp/pub
(二)匿名用户访问ftp
1.安装vsftpd
2.修改配置文件
修改的项用红色标注出来了!
3.给相关的目录设置权限
给你想给匿名用户控制访问的目录设置权限!
比如给/var/ftp/pub目录设置777,这样匿名用户就可以在配置文件参数允许的情况下删除文件,创建文件了。
比如,配置文件中有这样一条参数:anon_other_write_enable=NO,那么就算是/var/ftp/pub目录的权限为777,那你也不可能删除其中的东西!
4.启动
service vsftpd start
5.测试
匿名用户登录后,会默认出现在/var/ftp目录,且只能在/var/ftp目录下活动,不能移动到服务器的根目录下!
(1)安装ftp客户端
安装6.5光盘自带的ftp包。
(2)关闭防火墙与selinux
service iptables stop
setenforce 0 (getenforce查看状态)
(3)登录测试
利用本机测试访问: ftp 192.168.8.116 (192.168.8.116为搭建vsftpd服务的主机IP)
二、本地用户登录
(一)本地用户可以移动到服务器的根目录
不推荐,因为不安全!
1.安装vsftpd
2.修改配置文件
不修改配置文件,直接用原来默认的!
默认起作用的关键是黄色框住的!
3.添加一个用于测试的本地用户(实体用户)并修改密码
4.测试
关闭防火墙与selinux后,安装ftp客户端后再测试!详情见本文匿名用户登录测试小点下!
(1)创建目录测试
其实现在用ftp登录是直接登录到该账户自己本身的默认工作目录的!如果该账户没有默认的工作目录,那么该账户是不能通过ftp登录的!
(2)回到根目录测试
(二)本地用户只能在不能移动到服务器的根目录
1.安装vsftpd
2.修改配置文件
红色框住的参数是控制本地用户是否被束缚在该用户的默认工作目录下的参数!
存在这句,ftp登录的实体用户就不到达根目录!
3.添加一个用于测试的本地用户(实体用户)并修改密码
4.测试
关闭防火墙与selinux后,安装ftp客户端后再测试!详情见本文匿名用户登录测试小点下!
(1)安装客户端软件
(2)创建目录测试
(3)移动到其他目录测试
不能移动到其他目录,只能在用户的默认工作目录活动!
(三)仅一部分本地用户可以移动到服务器的根目录
1.安装vsftpd
2.修改配置文件
红色框住的第一行为不允许ftp登录的用户跳转到根目录,
第二行为开启部分用户可以跳转到根目录的功能
第三行为用户列表文件
3.创建用户列表文件
文件内容只有可以跳转到根目录的用户!
比如:
4.添加用户并改密
5.启动
6.测试
(1)安装ftp客户端
(2)切换目录测试
用su登录(su在/etc/vsftpd/chroot_list文件中)
用tang登录
三、虚拟用户登录
(一)所有虚拟用户登录到同一个目录(不设权限)
注意:当允许虚拟用户登录时,就不能实现实体用户登录!!两者不共存!
1.安装vsftpd
2.修改配置文件
配置文件的要求:允许本地用户登录,因为虚拟用户最终是映射到本地用户来登录的。
还有根据情况添加匿名用户的权限!因为虚拟用户登录上去后,权限由匿名用户权限管理!比如:anon_mkdir_write_enable=YES等
添加这三项:
guest_enable=YES
guest_username=su(要映射到的用户)
pam_service_name=vsftpd.vu(vsftpd.vu为后面编写的pam模块的名字)
3.创建实体用户
useradd -s /sbin/nologin su
如果后面测试时,用虚拟用户登录后不能执行ls命令的话,就先将该实体用户的权限设置为757,等可以ls后再将该目录的权限改为755。
修改命令(chmod -R 757 /home/su)R选项为递归参数!
4.创建虚拟账户文件
用户 密码…的格式
5.将该文件生成数据库文件
[root@sutang vsftpd]# db_load -T -t hash -f vuser.list vusers.db
{---***选项-T允许应用程序能够将文本文件转译载入进数据库。
-t hash使用hash码加密
-f 指定包含用户名和密码文本文件。此文件格式要示:奇数行用户名、偶数行密码***---}
确认该文件类型:
[root@sutang vsftpd]# file vusers.db
vusers.db: Berkeley DB (Hash, version 9, native byte-order)
6.编写pam模块
一般在/etc/pam.d目录下编写!vim /etc/pam.d/vsftpd.vu
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
其中vusers是上一步生成的数据库文件的文件名,不要后缀名!!!
7.启动
service vsftpd start
8.测试
虚拟用户默认登录的位置为映射的实体用户的默认工作目录下,而且不能跳到其他位置!
关闭防火墙与selinux后,安装ftp客户端后再测试!详情见本文匿名用户登录测试小点下!
(二)设置各个虚拟用户的权限的ftp
1.修改配置文件
红色框中的内容是要修改的!剩下的保持默认就好!
第一个红框:实体用户的默认权限!(因为虚拟用户映射到实体用户,所以必须给实体用户相应的权限)
第二个红框:虚拟用户和匿名用户的权限设置,这里因为要实现各个虚拟用户的权限不同,就将此全部设置成NO!这里的权限设置相当于全局权限,对所有虚拟用户的权限都有效!
第三个红框:设置虚拟用户的开启、映射的实体用户、使用的pam模块
第四个红框:设置虚拟用户的指定权限文件的目录,在该目录下是一些和虚拟用户用户名同名的文件,这些文件中存放有每一虚拟用户的指定权限!
2.创建实体用户
useradd -s /sbin/nologin su
如果后面测试时,用虚拟用户登录后不能执行ls命令的话,就先将该实体用户的权限设置为757,等可以ls后再将该目录的权限改为755。
3.创建虚拟账户文件
用户 密码…的格式
4.将该文件生成数据库文件
[root@sutang vsftpd]# db_load -T -t hash -f vuser.list vusers.db
确认该文件类型:
[root@sutang vsftpd]# file vusers.db
vusers.db: Berkeley DB (Hash, version 9, native byte-order)
5.编写pam模块
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
其中vusers是上一步生成的数据库文件的文件名,不要后缀名!!!
6.创建虚拟用户的权限目录并创建权限设置文件
此处的目录的路径一定要和配置文件中的第四个红框内容相同!
mkdir /etc/vsftpd/vusers_config
进入该目录并创建指定的文件
我在这个目录中创建了aaa这个虚拟用户对应的配置文件,内容如上图!
7.启动
8.测试
aaa虚拟用户登录测试
bbb虚拟用户登录测试
bbb用户没写单独的配置文件,直接用的是主配置文件中的全局权限控制!(详情见配置文件第二个红框)