文件传输协议FTP
文件传输协议:FileTransferProtocol早期的三个应用级协议之一,基于C/S结构
数据传输格式:二进制(默认)和文本
双通道协议:命令和数据连接
两种模式:从服务器角度, 客户端命令行建立连接,获取数据通道彼此通信端口
主动(PORTstyle):服务器主动连接
命令:客户端:随机port--->服务器:21/tcp
数据:客户端:随机port<---服务器:20/tcp # 客户端网络安全
被动(PASVstyle):客户端主动连接
命令:客户端:随机port--->服务器:21/tcp
数据:客户端:随机port--->服务器:随机port/tcp
用户认证:
匿名用户:ftp,anonymous,对应Linux用户ftp
系统用户:Linux用户,用户/etc/passwd,密码/etc/shadow
虚拟用户:特定服务的专用用户,独立的用户/密码文件
安装
shell
[root@vm ~]# yum -y install vsftpd
[root@vm ~]# grep -Ev "^#|^$" /etc/vsftpd/vsftpd.conf #默认配置
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
[root@vm ~]# systemctl start vsftpd
[root@vm ~]# ss -antlp|grep 21
[root@vm ~]# ls /var/ftp/ # 默认共享位置
pub
基础使用
shell
[root@client ~]# ftp 10.1.0.11
Connected to 10.1.0.11 (10.1.0.11).
220 (vsFTPd 3.0.2)
Name (10.1.0.11:root): anonymous # anonymous ftp 都可以
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,1,0,11,187,83). # Passive Mode 被动模式的显示
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 6 Jun 09 2021 pub
226 Directory send OK.
ftp> pwd
257 "/"
ftp> help
Commands may be abbreviated. Commands are:
! debug mdir sendport site
...
ftp> passive # 关闭被动模式
Passive mode off.
ftp> ls
200 PORT command successful. Consider using PASV. #主动模式的显示
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 6 Jun 09 2021 pub
ftp> !pwd # !查看客户端信息
/root
ftp> exit
421 Timeout.
匿名用户文件上传功能
shell
[root@vm ~]# pstree -p
[root@vm ~]# ps auxf
windows ftp://10.1.0.11/ #centos 7可以不登录 8不可用匿名
直接放不进去,权限不足
[root@vm ~]# vim /etc/vsftpd/vsftpd.conf
anon_upload_enable=YES #匿名上传,注意:文件系统权限
[root@vm ~]# systemctl restart vsftpd
[root@centos8~]# setfacl -m u:ftp:rwx /var/ftp/pub/ # ftp目录不能设置写权限,会报错
[root@centos8~]# getfacl /var/ftp/pub/
[root@vm ~]# ll /var/ftp/pub/
total 8
-rw------- 1 ftp ftp 4515 Nov 2 14:27 test.txt #默认600,需改 配置实现下载
[root@vm ~]# cat /var/log/xferlog # 日志文件
详细配置
shell
# 端口
listen_port=21 #修改服务端口
pasv_min_port=6000 #分配端口范围
pasv_max_port=6010
use_localtime=YES # 使用当地时间(默认为NO,使用GMT) 一般不修改
# 匿名用户
anonymous_enable=YES #支持匿名用户 一般关掉
no_anon_password=YES #匿名用户略过口令检查,默认NO
# 匿名上传下载功能配置
anon_upload_enable=YES #匿名上传,注意:文件系统权限
anon_mkdir_write_enable=YES #匿名建目录
anon_world_readable_only #只能下载全部读的文件,默认YES
anon_umask=0333 #指定匿名上传文件的umask,默认077
anon_other_write_enable=YES # 可删除和修改上传的文件,,默认NO
# 指定匿名用户的上传文件的默认的所有者和权限
chown_uploads=YES #默认NO
chown_username=wang
chown_upload_mode=0644
# Linux系统用户 登录ftp 一般禁用
local_enable=YES # 是否允许linux用户登录
write_enable=YES # 允许linux用户上传文件
local_umask=022 # 指定系统用户上传文件的默认权限
## 重要!!!
# 将系统用户映射为指定的guest用户
guest_enable=YES # 所有系统用户都映射成guest用户 #不设置,登录的用户可进入系统任何目录
guest_username=ftp # 配合上面选项才生效,指定guest用户
local_root=/data/ftp # 调整guest用户登录所在目录 重要!!!
mkdir /data/ftp/public
chmod 777 /data/ftp/public #服务根目录不能有写权限 555
[root@vm ~]# getent passwd ftp
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@vm ~]# usermod -d /data ftp
# 禁铜系统用户在家目录中
# 不映射用户的情况下,登录账户可以进入系统任何目录,开启后只能在自己的家目录
chroot_local_user=YES # 禁铜系统用户,默认NO,即不禁
chroot_list_enable=YES # YES,白名单 chroot_list中用户不禁铜
chroot_list_file=/etc/vsftpd/chroot_list
shell
2.4.11日志
wu-ftp日志:默认启用
xferlog_enable=YES # 启用记录上传下载日志,此为默认值
xferlog_std_format=YES #使用wu-ftp日志格式,此为默认值
xferlog_file=/var/log/xferlog #可自动生成,此为默认值 vsftpd日志:默认不启用
dual_log_enable=YES # 使用vsftpd日志格式,默认不启用
vsftpd_log_file=/var/log/vsftpd.log # 可自动生成,此为默认值
提示信息登录提示信息 命令行显示
ftpd_banner="welcome to mage ftp server"
banner_file=/etc/vsftpd/ftpbanner.txt # 优先级高
目录访问提示信息
dirmessage_enable=YES #此为默认值
message_file=.message # 信息存放在指定目录下.message,此为默认值
2.4.13PAM模块实现用户访问控制
pam_service_name=vsftpd # pam配置文件:/etc/pam.d/vsftpd
[root@vm ~]# cat /etc/pam.d/vsftpd
...
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#默认文件中用户deny拒绝登录
[root@vm ~]# ldd /usr/sbin/vsftpd | grep pam
libpam.so.0 => /lib64/libpam.so.0 (0x00007f0318013000)
2.4.14是否启用控制用户登录的列表文件
userlist_enable=YES # 此为默认值
userlist_deny=YES # (默认值)黑名单,不提示口令,NO为白名单
userlist_file=/etc/vsftpd/users_list# 此为默认值
[root@vm ~]# cat /etc/vsftpd/user_list
...
# If userlist_deny=YES (default), never allow users in this file, and
...
root
2.4.14vsftpd服务指定用户身份运行
nopriv_user=nobody # 此为默认值
2.4.15连接数限制
max_clients=0 #最大并发连接数
max_per_ip=0 #每个IP同时发起的最大连接数
anon_max_rate=0 #匿名用户的最大传输速率 字节 1024000
local_max_rate=0 #本地用户的最大传输速率
2.4.17连接时间:秒为单位
connect_timeout=60 # 主动模式数据连接超时时长
accept_timeout=60 # 被动模式数据连接超时时长
data_connection_timeout=300 # 数据连接无数据输超时时长
idle_session_timeout=60 #无命令操作超时时长
2.4.18优先以文本方式传输 了解,不使用(win-linux不通用)。
ascii_upload_enable=YES
ascii_download_enable=YES
2.4.19实现基于SSL的FTPS 查看是否支持SSL
[root@vm ~]# ldd `which vsftpd`|grep ssl
libssl.so.10 => /lib64/libssl.so.10 (0x00007f678c4d6000)
mkdir/etc/vsftpd/ssl
cd/etc/vsftpd/ssl
openss1 req -x509 -nodes -keyout vsftpd.key -out vsftpd.crt -days 365 -newkey rsa:2048
cat vsftpd.crt vsftpd.key > vsftpd.pem
配置vsftpd服务支持SSL:
[root@centos8~]#vim/etc/vsftpd/vsftpd.conf
ss1_enable=YES # 启用SSL
allow_anon_ssl=No # 匿名不支持SSL
force_local_logins_ss1=YES # 本地用户登录加密
force_local_data_ss1=YEs #本地用户数据传输加密
rsa_cert_fi1e=/etc/pki/t1s/certs/vsftpd.pem #证书 + 私钥 也可分开放
#rsa_private_key_file /path/file #此项如果没有指定,私钥也在证书文件中
#ss1_tlsvl=YES
#ss1_ss1v2=N0
#ss1_ss1v3=NO
#require_ssl_reuse=No
#ss1_ciphers=HIGH
2.5vsftpd虚拟用户
虚拟用户:
所有虚拟用户会统一映射为一个指定的系统帐号:访问共享位置,即为此系统帐号的家目录
各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定
虚拟用户帐号的存储方式:
文件:编辑文本文件,此文件需要被编码为hash格式,奇数行为用户名,偶数行为密码
db_load -T -t hash -f vusers.txt vusers.db
关系型数据库中的表中:实时查询数据库完成用户认证
vsftpd支持mysql库:pam要依赖于pam-mysql
/lib64/security/pam_mysql.so
/usr/share/doc/pam_mysql-0.7/README
vim /etc/vsftpd/vusers.txt
wang
wangpass
mage
magepass
cd /etc/vsftpd/
db_load -T -t hash -f vusers.txt vusers.db
chmod 600 vusers.db
2.5.1.2创建用户和访问FTP目录
useradd -d /data/ftproot -s/sbin/nologin -r vuser
mkdir -pv/data/ftproot/upload
setfacl -m u:vuser:rwx /data/ftproot/upload
#chmoda=rx/data/ftproot/ 如果自动创建家目录,需修改权限
2.5.1.3创建pam配置文件
vim /etc/pam.d/vsftpd.db
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
2.5.1.4指定pam配置文件
vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.db
2.5.1.5虚拟用户建立独立的配置文件
#指定各个用户配置文件存放的路径
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers.d/
#创建各个用户配置文件存放的路径
mkdir /etc/vsftpd/vusers.d/
cd /etc/vsftpd/vusers.d/
#创建各用户自已的配置文件,允许wang用户可读写,其它用户只读
vim wang
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
#创建各用户自己的配置文件
vim mage
#登录目录改变至指定的目录
local_root=/data/ftproot2
也可接入到mysql pam_mysql 比较古老 暂时不看了