文件共享服务器FTP
---恢复内容开始---
简介:
File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文件传输协议”。用于Internet上的控制文件的双向传输。
同时,它也是一个应用程序(applicaction)。给予不同的操作系统有不用的FTP应用程序,而所有这些应用程序都遵循同一种协议以传输文件。在FTP的使用中,用户经常遇到两个概念:“下载”和“上传”。
下载:从远程主机拷贝文件到自己的计算机中
上传:将文件从自己的计算机拷贝到远程计算机中
支持FTP协议的服务器都叫做FTP服务器
服务端和客户端程序:
FTP用户的类型:
匿名用户:anonymous或ftp
本地用户:账号名称、密码等信息都保存在password和shadow文件中
常见的FT怕服务器程序:
IIS、Serv-U
wu-ftpd、Proftpd
vsftpd(Very Secure FTP Daemon)
常见FTP客户端或程序:
CuteFTP、FlashFTP、leapFTP、Filezilla
gftp、kuftp、ftp
工作原理 - 模式比较
主动模式:
端口: 21(命令端口) 20(数据端口)
网络连通性:服务器通过20端口连接客户端的随机端口,对于客户端来说可能存在防火墙阻止端口的现象,而对于服务器来说只开放两个固定端口更安全
被动模式:
端口:21(命令端口) 随机端口(数据端口)
网络连通性:数据的传输由客户端主动连接,客户端不存在防火墙阻隔数据包问题。但是,服务器端开启了随机端口,不利于服务器的安全管理。
非特权端口:大于1024小于65535的端口
通常在企业中如果是自己用的ftp会搭建第一种主动模式。如果是放在公网上使用第二种被动模式。
75作为服务器 77作为客户端
在75服务器安装vsftpd服务器端
查看包中的文件
1是日志轮替
2是加密的或需要加密的一些配置文件
/etc/vsftpd/ftpusers第五行写在这里的所有用户名都会被ftp拒绝
/etc/vsftpd/vsftpd.conf主配置文件
/var/ftp默认的匿名用户的家目录
/var/ftp/pub开发权限后匿名用户可以到这个目录下上传或下载等操作
启动vsftpd服务
在77主机安装客户端ftp
使用方法ftp ftp 服务器地址
ftp或anonymous代表匿名用户,vsftpd服务默认开启匿名用户,密码可以不输,直接登陆
successful登录成功
failed 登录失败
配置选项 - 匿名用户
匿名权限控制
anonymous_enable=YES 启用匿名访问
aon_umask=022 匿名用户所上传文件的权限掩码
anon_root=/var/ftp 匿名用户FT怕的根目录
anon_upload_enable=YES 允许上传文件
anon_mkdir_write_enable=YES 允许创建目录
anon_other_write_enable=YES 允许其它写入权
anon_max_rate=0 限制最大传输速率(字节/秒)
匿名用户默认登录的家目录/var/ftp
尝试上传一些东西。
上传:put
下载:get
上传失败,权限拒绝
/etc/vsftpd/vsftpd.conf匿名用户上传文件需要打开设置选项anon_upload_enable=YES
取消注释
保持。重启服务
默认情况下(匿名用户的家目录不能有w权限),ftp的根目录为/var/ftp,为了安全,这个目录默认不允许设置为777权限,否则ftp将无法访问。但是我们要匿名上传文件,需要“other"用户的写权限,正确的做法然后再75主机上给pub目录777权限或者新建子目录。
77客户机上传文件
注意一定要关闭selinux,如果是修改配置文件的话一定要重启系统,可以使用getenforce命令查看selinux的状态。
上传到服务器上的文件权限都变成了600
匿名用户的掩码(如需要,需自己添加,含义:如umask是022,这时创建一个权限为666得文件,文件得时间权限为666-022=644)
anon_umaks=022
再上传得文件就是644了
现在对这个文件有读权限了看看能不能下载
可以下载了。
下载方式 (ftp自己选择):binary(直接下载不做转换) 图片 视频
ASCII (做一些转换方便在不同的平台上查看) 文本文档 网页
默认开启匿名用户
设置匿名用户的登录目录(如需要,需自己添加并修改)
anon_root=/var/ftp/pub
重启服务。注意用户的家目录不能有写权限
指定家目录成功
还有两个就不实验了,直接下一个实验;
打开匿名用户创建目录的权限
anon_mkdir_write_enable=YES
打开匿名用户删除和重命名的权限(如需要,需自己添加)
anon_other_write_enable=YES
二、本机用户
在服务器上新建用户
在77客户端用user1用户登录
配置选项 - 本地用户
本地用户权限控制
local_enable=YES 启用匿名访问
local_umask=022 本地用户所上传文件得权限掩码
local_root=/var/ftp 设置本地用户得FTP根目录
chroot_local_user=YES 是否将用户禁锢再主目录
local_max_rate=0 限制最大传输速率(字节/秒)
本机用户默认登录的就是自己的家目录/home/用户名
默认本地用户可以cd到任何地方。可以将本地用户禁锢再主目录
把这行取消注释
这时就无法去到家目录以外的地方了
如果这个本地用户只是用来使用它来使用ftp服务的就应该禁止它登陆系统,在创建用户或创建用户后指定它的shell为/sbin/nologin
local_max_rate=0 限制最大传输速率(字节/秒)(新加行)
/etc/vsftpd/ftpusers文件中的用户无法使用ftp登陆
比如root
还有一个文件也有相似的作用/etc/vsftpd/user_list
这两文件的区别是user_list可以在主配置文件中关闭ftpusers不能,如果用户只写到list文件内,在用户登录时只要输完用户名回车就会提示无法登陆,如果只写到ftpusers中会在用户输完密码后提示无法登陆。
设置user_list文件是否开启yes开启
vsftpd服务还支持tcp_wrappers可以把某个ip写到/etc/hosts.deny文件里让用户无法登陆使用ftp服务(75主机双网卡一个116网段一个115网段)
直接被拒绝
三、虚拟用户(用假的用户映射到本机一个真实存在的用户)
虚拟机恢复快照还原环境,75做服务器77做客户端。75安装服务器端,77安装客户端。配置服务器。
1、创建账号信息文件(声明虚拟用户的账号和密码)
vi /etc/vsftpd/user.list(文件内的规则为奇数用户名,偶数密码)
2、将创建的账户信息文件修改为系统识别的数据库类型文件
#cd /etc/vsftpd
#db_load -T(生成系统文件) -t(指定算法) hash -f(指定文件名)/etc/vsftpd/user.list user.db(生成的系统可以识别的文件)
#chmod 600 user.* (不能让普通用户查看文件内容)
3、添加虚拟映射用户
useradd -d /var/ftproot(指定用户的家) -s /sbin/nologin(不让用户登录) virtual(添加的用户)
chmod 755 /var/ftproot/(给用户家目录设置权限。用户默认家目录权限700)
4、设置认证
cd /etc/pam.d(目录下都是一些模板)
cp –a vsftpd vsftpd.a 拷贝模板文件,进行修改
vi vsftpd.a 写入以下内容,前后不能有空格注意格式
#%PAM-1.0
auth required pam_userdb.so(加载这个模块) db=/etc/vsftpd/user(指定前面生成的user.db的位置,默认.db格式就直接写user了)
account required pam_userdb.so db=/etc/vsftpd/user
不能直接在后面加,要把原来的删除。
不然用户无法登陆。会报这样的错。
正确的格式如下,直接写。
排错是出现用户无法登陆的问题,应该是前面的问题(虚拟用户,真实用户,以及真实和虚拟的映射)。
5、在主配置文件中声明(配置文件的最下面)
vi /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd.a (声明模板文件为vsftpd.a)
userlist_enable=YES (启用userlist这个文件)
tcp_wrappers=YES (声明tcp_wrappers可以使用)
guest_enable=YES (允许客户(虚拟用户)访问
guest_username=virtual (指定引用的是本地那个用户)
user_config_dir=/etc/vsftpd/conf (指定对用户进行权限控制的目录conf)
这里的路径vsftp后面少打一个d,导致后面用户只能登陆,但是进行一些操作时回报这样的错。
因为找不到授权文件就相当于没有用户没有权限。正确的路径应该是/etc/vsftpd/conf/
排错时因为看到用户可以登录了但是却没有权限,那么肯定是授权的这一块出了问题。
注意前后不能有空格
6、创建用户控制权限
cd /etc/vsftpd/
mkdir conf(创建对用户进行权限控制的目录conf)
cd conf
touch user1 user2 user3 (user.list文件中的用户。在文件内设置这个用户的权限)
常见权限:
anon_upload_enable=YES 允许上传
anon_mkdir_write_enable=YES 允许用户创建目录
anon_other_write_enable=YES 允许其它写入权限
对user1只设置允许上传权限,user2只有创建目录权限,user3只有其他写入权限如改名。
vi user1
anon_upload_enable=YES
vi user2
anon_mkdir_write_enable=YES
vi user3
anon_other_write_enable=YES
启动服务。客户端77访问测试。
user1登陆成功。尝试上传文件。
上传成功。测试一下其他的权限
permission 权限 denied 否定
换user2
密码456登陆成功。创建目录
尝试改名
没权限
再换user3
密码789登陆成功。给文件改名
尝试新建
还是没权限。
默认ftp是明文传递的利用抓包工具可以看到用户登录的信息和传递的信息
tcpdump port 21(命令端口) –nA 抓包测试
、、
用本地用户访问ftp服务器
看下抓到的包
用户名
都能被直接看到
四、vsftpd服务使用openssl加密
服务器端安装openssl(主程序) 和openssl–devel(支持的一些库)
2.创建证书
openssl()命令 req –new(这两个代表新建证书) –x509(证书的格式) -nodes (默认会为这个证书添加密码,加这个选项就是不加密码) –out(指定输出的文件名) vsftpd.pem –keyout vsftpd.pem
第一行,加密的位数2048,采用RSA加密方式的密钥
输入国家
省
市
组织
机构名称
一般名称
邮件地址
这些都可以随便写的。
查看生成的证书
3./etc/ssl/certs/是存放openssl证书的位置
4.为了安全给证书重新设置权限为600
5.到vsftpd服务的主配置文件中/etc/vsftpd/vsftpd.conf声明证书
在文件内写入以下内容:
ssl_enable=YES 开启加密
allow_anon_ssl=YES 允许匿名用户采用ssl加密
force_local_data_ssl=YES 强制在数据传输时使用ssl加密
force_local_logins_ssl=YES 强制本地用户登录时使用ssl加密
force_anon_data_ssl=YES 强制匿名用户在数据传输时使用ssl加密
force_anon_logins_ssl=YES 强制匿名用户在登录时使用ssl加密
ssl_tlsv1=YES 证书的加密等级(推荐是用这个)
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/ssl/certs/vsftpd.pem 声明证书的位置
保存退出重启服务
客户端登录!!!但但是在linux下客户端是无法使用这种加密算法的,只能使用win来测试。
tcpdump port 21(命令端口) –nA 抓包测试
随便截个图反正就是找不着了
win也有工具(如filezilla)可以范文vsftpd服务
公司内部可以使用主动模式,为外网提供vsftpd服务就一定要使用被动模式,前面的所有都是主动模式
五、 vsftpd被动模式
pasv_enable=YES 开启被动模式
pasv_min_port=10000 指定最小端口
pasv_max_port=10100 指定最大端口
先创建一个大个的测试文件
把前面那三句话写入vsftpd的配置文件下面
重启服务
然后使用user1用户去下载
在下载的同时服务器端查看端口是否是前面设置的(端口只有在有数据传输时才会开启)
ESTABLISHED:正在等待文件传输
测试成功。
tcp连接会声明3次。断开会声明4次
---恢复内容结束---