ftp
1、ftp简介与原理
ftp(file transfer protocol)中文称为“文件传输协议”用于internet上的控制文件的双向传输。
主动模式:服务端从20端口主动向客户端发起连接。
1、登录ftp服务器
2、登陆成功
3、客户端随机开放端口
4、客户端发送Port命令,读取数据,将开放的随机端口发送给服务器
5、服务器连接到客户端发送的随机端口,发送数据
6、服务器使用固定的20端口,向客户端的随机端口发送数据
被动端口:服务端在指定范围内内某个端口被动等待客户端连接。
1、登录ftp服务器
2、登陆成功
3、客户端发送pasv命令
4、服务器开放随机端口
5、服务器将开放的随机端口发送给客户端
6、客户端接收服务器开放的随机端口
7、客户端连接到服务器的随机端口获取数据。
一般使用被动模式,因为主动模式使用固定20端口访问客户端的随机端口传输数据时,客户端的随机端口可能会被防火墙拦截,服务器无能为力。
当使用被动模式时,客户端主动访问服务器的随机端口,当服务器的端口被防火墙拦截时,服务器可以调节,开放发送端口。
主要是从访问角度来衡量考虑。
端口:
ftp连接端口
控制连接:tcp 21,用于发送ftp命令信息
数据连接:tcp 20,用于上传、下载数据
2、ftp相关文件
安装
vsftpd-2.2.2-11.el6.i686.rpm
相关文件
主配置文件:
/etc/vsftpd/vsftpd.conf
用户控制列表文件:
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
ftp相关用户
匿名用户
anonymous或ftp
本地用户
使用linux系统用户和密码
虚拟用户
管理员自定义的模拟用户
注意事项:
关闭防火墙
关闭SELinux
3、配置文件详解
默认配置文件
anonymous_enable=YES #允许匿名用户登录
local_enable=YES #允许本地用户登录
write_enable=YES #允许本地用户上传
local_umask=022 #本地用户上传 umask值
dirmessage_enable=YES #用户进入目录时,显示.message文件中信息
message_file=.message #指定信息文件
xferlog_enable=YES #激活记录日志
connect_from_port_20=YES #主动模式数据传输接口
xferlog_std_format=YES #使用标准的ftp日志格式
ftpd_banner #登录欢迎信息
listen=YES #允许被监听
pam_service_name=vsftpd
#设置PAM外挂模块提供的认证服务所使用的配置文件名,
#即/etc/pam.d/vsftpd文件
userlist_enable=YES #用户登录限制
tcp_wrappers=YES #是否使用tcp_wrappers作为主机访问控制方式
常用全局配置
listen_address=192.168.4.1 #设置监听的ip地址
Listen_port=21 #设置监听的ftp服务的端口号
download_enable=YES #是否允许西下载文件
max_clients=0 #限制并发客户端的连接数
max_per_ip=0 #限制同一ip地址的并发连接数
被动模式:
pasv_enable=YES #开启被动模式
pasv_min_port=24500 #被动模式最小端口
pasv_max_port=24600 #被动模式最大端口
常用安全配置
accept_timeout=60 #被动模式,连接超时时间
connect_timeout=60 #主动模式,连接超时时间
idle_session_timeout=600 #600秒没有任何操作就关闭端口连接
data_connection_timeout=500 #资料传输时,超过500秒没有完成,就断开传输
4、连接ftp的客户端使用
使用命令行连接
ftp ip
-help 获取帮助
-get 下载
-mget 下载一批文件
-put 上传
-mput 上传一批文件
-exit 退出
使用windows对话框
ftp://192.168.2.1
使用第三方工具
Winscp
在使用命令行方式连接tfp服务器的时候,不支持断点续传和目录传输
5、匿名用户访问
基本配置
anonymous_enable #允许匿名用户访问
anon_upload_enable #允许匿名用户上传
anon_mkdir_write_enable #允许匿名用户建立目录
anon_umask #设置上传的默认文件权限(默认是600)
注意事项:
默认上传目录:/var/ftp/pub/
如果允许上传,需要服务权限和系统目录权限同时允许
Vsftpd服务的伪用户是ftp
当匿名用户上传文件的时候,只开启上传权限是不够的,还需要对上传的文件夹拥有linux的系统操作权限,可以将上传文件到的目录所有者改为ftp伪用户,即可有权限上传操作。
6、本地用户访问
1、本地用户基本配置
local_enable=YES #允许本地用户登录
write_enable=YES #允许本地用户上传
local_umask=022 #本地用户上传umask值
local_root=/var/ftp #设置本地用户的ftp根目录(注意目录权限)
local_max_rate=0 #限制最大传输速率(字节/秒)
注意:
当不设置local_root=/var/ftp参数时,各本地用户上传的默认目录是各自的家目录。
当设置了local_root=/var/ftp参数后,任何本地用户上传的目录都默认到了指定的目录,进行了统一。
同样当本地用户对文件上传是,除了开启ftp上传权限,还要拥有linux系统读写权限。更改上传目录的所属组,将本地用户加入到组中,即可上传文件。
使用匿名用户和本地用户登录ftp服务器后,可以随意切换到根目录,可以随意下载到东西。就要,限制用户在本地目录不可以随意切换目录
把用户限制在家目录
chroot_local_user=YES
#开启用户目录限制(只有此行,把所有用户都现在在用户主目录中)
设置chroot_local_user=YES参数之后,所有的本地用户都只会在此目录下,不可随意切换到其他目录。
如果想要允许用户可以随意切换其他目录可以使用参数:
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
#写入到/etc/vsftpd/chroot_list文件中的用户可以访问任何目录,其他用户限制在用户主目录
2、用户访问控制
ftp相关文件
用户控制列表文件:
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
访问控制:
1、
userlist_enable=YES #开启用户访问控制
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list
#写入/etc/vsftpd/user_list文件中的用户不能访问ftp服务器,没有写入的用户可以访问(默认就是如此)
2、
userlist_enable=YES #开启用户访问控制
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
#写入/etc/vsftpd/user_list文件中的用户可以访问ftp服务器,没有写入的用户不能访问
注意:
不要把限制用户主目录和用户访问限制搞混
#chroot_local_user=YES 用于把用户禁锢在主目录下
#userlist_enable=YES 用于用户访问控制
7、虚拟用户访问
1、配置虚拟用户访问
配置虚拟用户登录的步骤:
1、添加虚拟用户口令文件
2、生成虚拟用户口令认证文件
3、编辑vsftpd的PAM认证文件
4、建立本地映射用户并设置宿主目录权限
5、修改配置文件
6、重启vsftp服务,并测试
7.调整虚拟用户权限
1、添加虚拟用户口令文件
vi /etc/vsftpd/vuser.txt #vuser.txt文件名是随意起的,但是要与后面配置对应
cangls#用户名
123#密码
bols#用户名
123#密码
2、生成虚拟用户口令认证文件
yum -y install db4-utils
#如果没有安装口令认证命令,需要安装
db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuser.db
#把文本文档转换为认证的数据库
3、编辑vsftpd的PAM认证文件
vi /etc/pam.d/vsftpd
auth required /lib/security/pam.userdb.so db=/etc/vsftpd/vuser
account required /lib/security/pam.userdb.so db=/etc/vsftpd/vuser
#注释掉其他行,加入此俩行即可
#注释掉其他行,可以禁止本地用户登录,因为本地用户登录时的验证依然依赖这个文件
4、建立本地映射用户并设置宿主目录权限
useradd -d /home/vsftproot -s /sbin/nologin vuser
#此用户不需要登录,只是映射用户
#用户名必须和下一步配置文件中一致
chmod 755 /home/vftproot
5、修改配置文件
vi /etc/vsftpd/vsftpd.conf
guest_enable=YES #开启虚拟用户
guest_username=vuser #ftp虚拟用户对应的系统用户
pam_service_name=vsftpd #PAM认证文件(默认存在)
6、重启vsftp服务,并测试
service vsftpd restart
#此时虚拟用户可以登录,查看,下载,不能上传
#默认上传文件的位置是宿主用户的家目录
#权限使用的是匿名用户权限进行管理
7.调整虚拟用户权限
vi /etc/vsftpd/vsftpd.conf
anonymous_enbale=NO #关闭匿名用户登录,更加安全
#(不影响虚拟用户登录)
anon_upload_enable=YES #允许(虚拟)匿名用户上传
anon_mkdir_write_enable=YES #允许(虚拟)匿名用户建立目录
anon_other_write_enable=YES
#给虚拟用户设定权限,允许所有虚拟用户上传
2、为每个虚拟用户建立自己的配置文件,单独定义权限
可以给每个虚拟用户单独建立目录,并建立自己的配置文件。这样方便单独配置权限,并可以单独指定上传目录
1、修改配置文件
vi /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_dir
#指定保存虚拟用户配置文件的目录
2、手工建立目录
mkdir /etc/vsftpd/vusers_dir
3、为每个虚拟用户建立配置文件
vi /etc/vsftpd/vusers_dir/cangls
anon_upload_enable=YES #允许(虚拟)匿名用户上传
anon_mkdir_write_enable=YES #允许(虚拟)匿名用户建立目录
anon_other_write_enable=YES
#允许此用户上传
local_root=/tmp/vcangles
#给cangls指定独立的上传目录
4、建立上传目录
mkdir /tmp/vcangls
Chown vuser:vuser /tmp/vangls
如果不给bols指定单独的配置文件,则遵守主配置文件(/etc/vsftpd/vsftpd.conf)的权限。
配置效果如下:
禁止匿名用户登录(配置文件修改)
禁止本地系统用户登录(pam文件修改)
允许虚拟用户登录(配置文件修改)
cangls的上传目录是/tmp/vcangls并且允许查看,下载,上传
bols的上传目录是虚拟用户的默认目录/home/vftproot,只能查看,下载。但是 不能上传