- DAS:直接存储(本地硬盘)
- NAS:网络连接存储(局域网)
- FTP
- NFS
- SAMBA
- SAN:存储区域网络(跨网络)
FTP协议
- 双通道协议:数据和命令连接
- 两种模式:服务器角度
- 主动(PORT style):服务器主动连接
- 命令(控制):客户端:随机port —> 服务器:tcp21
- 数据:客户端:随机port <—服务器:tcp20
- 被动(PASV style):客户端主动连接
- 命令(控制):客户端:随机port —> 服务器:tcp21
- 数据:客户端:随机port —>服务器:随机port
- 主动(PORT style):服务器主动连接
主动模式下,服务器开启20端口主动连接客户端
被动模式下,客户端连接服务器,服务器开启一个随机端口响应,通过命令控制客户端和服务器可以知道开启的随机端口
[root@Web /var/www/html/loges]# ftp 192.168.8.7
Name (192.168.8.7:root): ftp #匿名用户
Password: #密码随便输
ftp> ls
227 Entering Passive Mode (192,168,8,7,141,130). #被动模式,服务器数据端口为141*256+130
- FTP服务器
- vsftpd:Very Secure FTP Daemon,CentOS默认FTP服务器
- 客户端软件
- ftp -A ftpserver port -A主动模式 –p 被动模式
- lftp –u username ftpserver
- 状态码:
- 1XX:信息 125:数据连接打开
- 2XX:成功类状态 200:命令OK 230:登录成功
- 3XX:补充类 331:用户名OK
- 4XX:客户端错误 425:不能打开数据连接
- 5XX:服务器错误 530:不能登录
- 用户认证:
- 匿名用户:ftp,anonymous,对应Linux用户ftp
- 系统用户:Linux用户,用户/etc/passwd,密码/etc/shadow
- 虚拟用户:特定服务的专用用户,独立的用户/密码文件
- nsswitch:network service switch名称解析框架
- pam:pluggable authentication module 用户认证
- /lib64/security /etc/pam.d/ /etc/pam.conf
vsftpd
- 用户认证配置文件:/etc/pam.d/vsftpd
- 服务脚本:
/usr/lib/systemd/system/vsftpd.service
/etc/rc.d/init.d/vsftpd - 配置文件:/etc/vsftpd/vsftpd.conf
man 5 vsftpd.conf
格式:option=value
注意:= 前后不要有空格 - 匿名用户(映射为系统用户ftp )共享文件位置:/var/ftp
- 系统用户共享文件位置:用户家目录
- 虚拟用户共享文件位置:为其映射的系统用户的家目录
[root@rsyslog ~]# rpm -ql vsftpd
/etc/logrotate.d/vsftpd 日志滚动
/etc/pam.d/vsftpd 用户认证
/etc/vsftpd/vsftpd.conf 配置文件
/usr/lib/systemd/system/vsftpd.service 服务
/usr/sbin/vsftpd 命令
/var/ftp 文件路径
/var/ftp/pub 共享目录
1、命令端口
[root@rsyslog ~]# vim /etc/vsftpd/vsftpd.conf
listen_port=21
2、主动模式端口
[root@rsyslog ~]# vim /etc/vsftpd/vsftpd.conf
connect_from_port_20=YES 主动模式端口为20
ftp_data_port=20 指定主动模式的端口(没有这条时默认为20)
3、被动模式端口范围
[root@rsyslog ~]# vim /etc/vsftpd/vsftpd.conf
linux 客户端默认使用被动模式
windows 客户端默认使用主动模式
pasv_min_port=6000 0为随机分配
pasv_max_port=6010 范围指定需大一些
匿名用户
1、启用匿名用户
[root@rsyslog ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES 支持匿名用户
2、centos登录时不输入口令
[root@rsyslog ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES 支持匿名用户
no_anon_password=YES(默认NO) 匿名用户略过口令检查
3、匿名上传文件及目录
[root@rsyslog ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES 支持匿名用户
anon_upload_enable=YES 匿名上传,注意:文件系统权限
anon_mkdir_write_enable=YES 匿名建目录
只能上传不能下载
- 默认只能下载所有组全有读权限的文件
- 一、修改下载读权限的配置为所有权限都可下载
- 二、上传文件默认都有读权限
4、实现下载(一)
[root@rsyslog ~]# vim /etc/vsftpd/vsftpd.conf
anon_world_readable_only=no (默认YES)只能下载全部读的文件
5、实现下载(二)
默认上传文件权限600
anon_umask=0222 指定匿名上传文件的umask,默认077
以上配置不能删除及修改文件
6、删除和修改上传的文件
anon_other_write_enable=YES 可删除和修改上传的文件
7、指定上传文件的默认的所有者和权限
chown_uploads=YES(默认NO)
chown_username=wang
chown_upload_mode=0644
系统用户
1、允许系统用户登录
local_enable=YES 是否允许linux用户登录
write_enable=YES 允许linux用户上传文件
local_umask=022 指定系统用户上传文件的默认权限
2、允许系统用户上传文件
local_enable=YES 是否允许linux用户登录
write_enable=YES 允许linux用户上传文件
默认上传到家目录
3、指定上传文件的权限
local_enable=YES 是否允许linux用户登录
write_enable=YES 允许linux用户上传文件
local_umask=022 指定系统用户上传文件的默认权限
4、所有系统用户上传到指定目录
guest_enable=YES 所有系统用户都映射成guest用户
guest_username=ftp 配合上面选项才生效,指定guest用户
local_root=/ftproot guest用户登录所在目录(没有时为guest家目录)
系统默认当根目录有写权限时拒绝登录,指定目录是要注意该目录权限
当不映射到guest用户时,可以配置只能登录自己的家目录,不能访问其他
5、禁锢所有系统用户在家目录中
chroot_local_user=YES(默认NO,不禁锢) 禁锢系统用户
6、禁锢时,部分用户可以列外
禁锢用户时实际是系统认为的根目录有写权限
chroot_local_user=YES(默认NO,不禁锢) 禁锢系统用户
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
当chroot_local_user=YES时,则chroot_list中用户不禁锢
当chroot_local_user=NO时,则chroot_list中用户禁锢
启用禁锢,magedu例外,magedu能够登录及切换到其他目录,wang用户登录拒绝,是因为有写权限
[root@rsyslog ~]# vim /etc/vsftpd/vsftpd.conf
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
[root@rsyslog ~]# vim /etc/vsftpd/chroot_list
magedu
[root@Web /var/www/html/loges]# ftp 192.168.8.7
Name (192.168.8.7:root): wang
Password:
500 OOPS: vsftpd: refusing to run with writable root inside chroot() 登录报错
[root@rsyslog ~]# chmod 500 /home/wang 修改权限
[root@Web /var/www/html/loges]# ftp 192.168.8.7
Name (192.168.8.7:root): wang
ftp> cd /etc
550 Failed to change directory. 不能切换目录
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
chroot_local_user=YES去掉时magedu用户不能登录,改变家目录权限后可以
日志
1、wu-ftp日志:默认启用
xferlog_enable=YES (默认) 启用记录上传下载日志
xferlog_std_format=YES (默认) 使用wu-ftp日志格式
xferlog_file=/var/log/xferlog (默认)可自动生成
2、vsftpd日志:默认不启用
dual_log_enable=YES 使用vsftpd日志格式,默认不启用
vsftpd_log_file=/var/log/vsftpd.log(默认路径)可自动生成 #可不写
提示信息
1、登录提示信息
ftpd_banner=“welcome to mage ftp server"
banner_file=/etc/vsftpd/ftpbanner.txt
banner_file优先级更高
2、目录访问提示信息
dirmessage_enable=YES (默认)
message_file=.message(默认) 信息存放在指定目录下.message
.message放在共享目录文件下,对该文件说明
用户控制
1、使用pam(Pluggable Authentication Modules)完成用户认证
[root@CentOS7 ~]# vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd
[root@CentOS7 ~]# vim /etc/pam.d/vsftpd
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
####/etc/vsftpd/ftpusers的用户拒绝登录当sense=allow时,该文件用户允许登录,其他用户不能登录
[root@CentOS7 ~]# cat /etc/vsftpd/ftpusers
# Users that are not allowed to login via ftp 默认文件中用户拒绝登录
root
bin
daemon
2、是否启用控制用户登录的列表文件
userlist_enable=YES 默认有此设置
userlist_deny=YES(默认值) 黑名单,不提示口令,NO为白名单
userlist_file=/etc/vsftpd/users_list 此为默认值
userlist_enable=YES时users_list拒绝登录,但当userlist_deny=NO时只能是users_list登录
3、vsftpd服务指定用户身份运行
nopriv_user=nobody (默认值) 指定第二层nobody用户
[root@CentOS7 ~]# ps auxf
root 2185 0.0 0.0 53288 704 ? Ss 03:17 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
nobody 2557 0.0 0.1 55412 1488 ? Ss 03:38 0:00 \_ /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
ftp 2559 0.0 0.1 57520 1452 ? S 03:38 0:00 \_ /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
4、连接数限制
max_clients=0 最大并发连接数
max_per_ip=0 每个IP同时发起的最大连接数(一般设置为1或2)
5、传输速率:字节/秒
anon_max_rate=0 匿名用户的最大传输速率
local_max_rate=0 本地用户的最大传输速率
6、连接时间:秒为单位
connect_timeout=60 主动模式数据连接超时时长
accept_timeout=60 被动模式数据连接超时时长
data_connection_timeout=300 数据连接无数据输超时时长
idle_session_timeout=60 无命令操作超时时长
7、优先以文本方式传输
ascii_upload_enable=YES
ascii_download_enable=YES
默认以二进制传输(不需更改,文本传输时,win端容易出现问题)
实现基于SSL的FTPS
实现SSL需要自签名证书,进入/etc/pki/tls/certs/目录使用make 跟带.key .csr .crt .pem后缀的文件可以生成各种该后缀的文件,因为Makefile脚本
创建自签名证书
[root@CentOS7 ~]# cd /etc/pki/tls/certs/
[root@CentOS7 /etc/pki/tls/certs]# make vsftpd.pem
[root@CentOS7 /etc/pki/tls/certs]# openssl x509 -in vsftpd.pem -noout -text #查看内容
配置vsftpd服务支持SSL:/etc/vsftpd/vsftpd.conf
[root@CentOS7 ~]# /etc/vsftpd/vsftpd.conf
ssl_enable=YES 启用SSL
allow_anon_ssl=NO 匿名不支持SSL
force_local_logins_ssl=YES 本地用户登录加密
force_local_data_ssl=YES 本地用户数据传输加密
rsa_cert_file=/etc/pki/tls/certs/vsftpd