FTP服务

文件传输协议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   比较古老  暂时不看了
相关推荐
wzhao1016 分钟前
elf_loader:一个使用Rust编写的ELF加载器
linux·rust·gnu
qwy7152292581636 小时前
13-R数据重塑
服务器·数据库·r语言
anddddoooo8 小时前
域内证书维权
服务器·网络·网络协议·安全·网络安全·https·ssl
zhoupenghui1688 小时前
golang时间相关函数总结
服务器·前端·golang·time
lllsure8 小时前
Linux 实用指令
linux·物联网
努力的小T9 小时前
使用 Docker 部署 Apache Spark 集群教程
linux·运维·服务器·docker·容器·spark·云计算
Nerd Nirvana9 小时前
OpenSSL crt & key (生成一套用于TLS双向认证的证书密钥)
linux·ssl·shell·认证·加密·tls·oepnssl
不修×蝙蝠9 小时前
HTTP 协议(Ⅲ)
服务器·http·javaee·http协议
letisgo510 小时前
记录一次部署PC端网址全过程
linux·阿里云·服务器运维
梨落秋溪、10 小时前
输入框元素覆盖冲突
java·服务器·前端