ftp文件服务器

环境:

server:
	os:centos7.3	
	prog:vsftpd3.0.2
client:
	centos7

ftp服务:

ftp协议:file transfer protocol,应用层协议,提供文件共享服务
工作模式:主动模式、被动模式
	ftp服务在使用时会建立两个连接:
		命令连接:客户端随机端口-->服务器21/tcp端口;
		数据连接:当客户端发起数据传输命令时,会建立此连接,并在
			数据传输完成后断开连接,ftp的主动和被动模式就是数据传输
			连接的建立方式不同;
		主动模式:服务器使用固定的20/tcp端口去连接客户端发起命令
			连接的端口号+1的端口(如被占用,则继续+1)
		被动模式:服务器通过命令连接发送数据连接随机端口号到客户端,
			客户端向收到的端口号和服务器建立数据连接
		数据传输格式:文本和二进制格式(不应人为指定某种传输格式,
			而应根据文件格式自动使用数据传输格式)
服务端程序:
	vsftpd:very secure ftp daemon
	proftpd
	pure-ftpd
	serv-U(windows)
客户端程序:
	ftp
	filezilla
	lftp
	gftp
	wget、curl

部署:

1、安装服务器软件vsftpd:
	# yum install vsftpd -y
2、启动服务:
	# systemctl start vsftpd
3、客户端安装软件:
	# yum install ftp
4、关闭服务器和客户端的防火墙和selinux:
	# setenforce 0
	# iptables -P INPUT ACCEPT
	# iptables -P OUTPUT ACCEPT
	# iptables -F
5、客户端访问
	# ftp 192.168.181.10
	192.168.181.10为服务器ip,匿名访问用户名输入anonymous或ftp
	密码为任意;用户登录访问输入服务器端委派的用户
6、vsftpd的三种用户模式:
	匿名用户:支持匿名用户登录,对应的目录文件权限为ftp用户权限
	系统用户:支持系统用户登录,对应的目录文件权限为系统用户权限
	虚拟用户:定义在数据库表中或文件中的用户,该类用户权限跟随匿名
		用户权限设置;
7、配置文件/etc/vsftpd/vsftpd.conf参数:
	anonymous_enable=YES
	#允许匿名用户访问,NO为禁止
	local_enable=YES
	#允许系统用户访问,NO或注释为仅允许匿名访问
	write_enable=YES
	#允许写操作,NO或注释为禁止任何形式的写操作
	local_umask=022
	#系统用户默认umask为077,启用此项可修改为022
	anon_upload_enable=YES
	#允许匿名用户上传文件,NO或注释为禁止
	anon_mkdir_write_enable=YES
	#允许匿名用户创建目录,NO或注释为禁止
	anon_other_write_enable=YES
	#允许匿名用户删除文件或目录,NO或注释为禁止
	dirmessage_enable=YES
	#启用目录消息,在用户进入目录时,会显示目录下.message文件
	中的内容;NO或注释为禁止
	xferlog_enable=YES
	#启用下载或上传的日志记录;NO或注释为禁止
	chown_uploads=YES
	#改变上传文件的属主属组,默认开启
	chown_username=whoever
	#和上个参数配合使用,改变后文件的属主属组名,默认开启
	chroot_local_user=YES
	#启用系统用户的chroot,即系统用户在登录时会锁定根目录在
	用户家目录下,NO或注释为禁止(要和allow_writeable_chroot
	=YES一起使用)
	chroot_list_enable=YES
	#启用chroot用户列表;配合chroot_list_file参数使用
	当chroot_local_user=YES时,表示系统用户默认开启chroot,
	列表中的用户为例外
	当chroot_local_user=NO或注释时,表示系统用户默认不开启
	chroot,列表中的用户为要进行chroot的用户
	chroot_list_file=/etc/vsftpd/chroot_list
	#此文件为默认项,文件中每行定义一个系统用户
	allow_writeable_chroot=YES
	#设置chroot的父目录具有写权限时也可执行chroot
	listen=YES
	#为yes时,vsftpd进程工作为独立守护进程模式;为no时,工作
	时工作为瞬时守护进程模式
	pam_service_name=vsftpd
	#pam认证模块配置文件名称,位于/etc/pam.d下
	user_list_enable=YES
	#是否启用/etc/vsftpd/user_list文件来进行用户访问控制;
	该文件中的用户默认为拒绝登录,设置参数userlist_deny=NO
	时,该文件中的用户为允许登录,其他用户拒绝;
	#该文件是对用户登录时输入的用户名称进行匹配检查;如登录名
	称被文件匹配并禁止登录,则客户端登录失败;
	用此文件禁止匿名登录时,需在文件中同时添加ftp和anonymous,
	并设置user_deny=YES;
	该选项是ftp服务本身的访问控制定义,而非pam的访问控制定义,
	所以包括匿名用户、系统用户、虚拟用户等所有ftp用户都可进行控制;
	#该文件中的用户如果设定为允许登录时,当pam_service_name
	=vsftpd时,还会使用ftpusers文件进行二次认证,通过后才能登录;
	(因为/etc/pam.d/vsftpd中定义了对ftpusers文件的用户认证)
	max_clients=10
	#允许同时最多客户端连接数为10
	max_per_ip=3
	#允许每ip可连接数为3
	anon_max_rate=0
	#允许匿名用户每秒最大传输速率总值,单位为字节,0是默认值,
	为不限制;
	local_max_rate=0
	#允许系统用户每秒最大传输速率总值,单位为字节,0是默认值,
	为不限制;
	pasv_enable=YES
	#是否开启被动模式,此为默认值;值为NO时,配置参数:
	connect_from_port_20=YES,是开启主动模式,相对于被动模式
	安全性稍差;
	pasv_max_port=30000
	#被动模式随机端口的最大值设置;
	pasv_min_port=29900
	#被动模式随机端口的最小值设置;
8、ftp的安全通信方式:ftps、sftp
	ftps:
		运行在ssl或tls加密协议之上的ftp服务
		ca签署证书给vsftpd服务,并在vsftpd.conf中开启以下指令
		ssl_enable=YES
		ssl_tlsv1=YES
		ssl_sslv2=YES
		ssl_sslv3=YES
		allow_anon_ssl=NO
		force_local_data_ssl=YES
		force_local_logins_ssl=YES
		rsa_cert_file=/etc/vsftpd/ssl/vsftpd_cert.pem
		rsa_private_key_file=/etc/vsftpd/ssl/vsftpd_key.pem
		ca证书中的主机名称必须和客户端访问的主机名称保持一致
		设置完成后重启服务:
			#systemctl restart vsftpd
		此时,非匿名用户必须进行加密连接才允许登录
		win10安装filezilla客户端,进行ftps连接,选择信任证书即可
 	sftp:
 		是基于ssh协议实现的加密的ftp服务,借助22端口提供服务,仅
 		当一个用户以ssh协议登录服务器时sftp服务才会被启动;sftp通
 		常是作为ssh实现程序的一部分,常用的例如openssh、tectia ssh
 		下面介绍openssh中sftp的用法:
 		服务器端:启动sshd服务,客户端连接sshd服务即可使用
 		客户端命令
 			scp命令:远程复制文件
 			sftp命令:类似ftp的交互式命令
 				sftp user@host
 			sshfs命令:挂载sshfs文件系统(需安装fuse-sshfs),借助
 				ssh安全连接挂载服务器端文件系统到客户端
 				sshfs user@host:/path/to/dir /path/to/dir
 9、ftp虚拟用户登录设置:
 	使用数据文件进行虚拟用户登录认证		
 		@创建用户文件,单行为用户名,偶数行为密码
 			#cat << EOF >> /root/vuser.list
 			<jerry
 			<123.com
 			<tom
 			<123.com
 			EOF
 		@转换vuser.list文件为Berkeley DB类型:
 			# db_load -T -t hash -f /root/vuser.list /etc/vsftpd/vuser.db
 			#chmod 600 /etc/vsftpd/vuser.db
 		@在/etc/pam.d目录下添加vuser认证配置文件:
 			#cat << EOF >> /etc/pam.d/vsftpd.vuser
 			<auth required pam_userdb.so db=/etc/vsftpd/vuser
 			<account required pam_userdb.so db=/etc/vsftpd/vuser
 			EOF
 			Tip:该文件中db文件名不能跟随.db,认证服务会自动补全,
 				加后缀名.db成为vuser.db后,客户端登录时会提示错误:
 				user_lookup: could not open database `/etc/vsftpd/vuser.db': 
 				No such file or directory
 		@创建虚拟用户统一映射到的本地系统用户,设置家目录为ftp
 			为虚拟登录用户准备的共享目录
 			#useradd -d /var/ftp/pub/vuser-home -s /sbin/nologin vuserftp
 			#rm /var/ftp/pub/vuser-home/.* -rf
 			#chmod o+rx /var/ftp/pub/vuser-home
 		@修改/etc/vsftpd/vsftpd.conf配置文件,添加并修改以下内容:
 			添加内容:
 			guest_enable=YES ;启用来宾账号,即虚拟账号
 			guest_username=vuserftp ;虚拟账号映射成为的本地账号
 			修改内容:
 			pam_service_name=vsftpd改为
 			pam_service_name=vsftpd.vuser
 		@重启vsftpd服务:
 			#systemctl restart vsftpd
 		@客户端登录测试
 		@为虚拟用户单独设置权限控制:
 			首先,在/etc/vsftpd/vsftpd.conf主配置文件中添加以下参数:
 				user_config_dir=/etc/vsftpd/vuserconf
 			其次,创建上面参数中定义的目录,并在目录中创建同虚拟
 			用户名称的文件,文件中可定义参数为:
 				anon_upload_enable=[YES|NO];是否允许上传文件
 				anon_mkdir_write_enable=[YES|NO];是否允许创建目录
 				anon_other_write_enable=[YES|NO];是否允许删除目录
 					或文件
 			当主配置文件/etc/vsftpd/vsftpd.conf中参数与虚拟用户独立
 			配置文件重复时,以虚拟用户独立文件设定为最终权限;
 			例:
 				#mkdir /etc/vsftpd/vuserconf
 				#cat << EOF >> /etc/vsftpd/vuserconf/tom
 				<anon_upload_enable=YES
 				<anon_mkdir_write_enable=YES
 				<anon_other_write_enable=YES
 				EOF
 			此时,不管主配置文件是否分派权限,tom用户都具有以上
 			权限;
 		Tip:启用数据文件虚拟账号认证后,系统用户无法登录,匿名
 			用户登录仍可用
 	使用mysql进行用户登录认证数据存放
 		@安装所需软件
 			#yum install -y mariadb-server mariadb mariadb-devel 
 				pam-devel
 			下载并安装pam的mysql扩展:
 			#  wget http://prdownloads.sourceforge.net/pam-mysql
 				/pam_mysql-0.7RC1.tar.gz
 			#tar xf pam_mysql-0.7RC1.tar.gz
 			#cd pam_mysql-0.7RC1
 			#./configure --with-mysql=/usr
 			#cp pam_mysql.so pam_mysql.la /usr/lib64/security/
 		@配置数据库:
 			#systemctl start mariadb
 			#mysql  ;连入数据库
 			......中间省略了数据库初始化、删除空用户、设置root密码等
 			MariaDB>create database vsftpd;
 			MariaDB>use vsftpd;
 			MariaDB>create table vuser (
 			MariaDB>id smallint auto_increment primary key not null,
 			MariaDB>user char(20) binary not null,
 			MariaDB>password char(48) binary not null);
 			MariaDB>grant select on vsftpd.vuser to 'vsftpd'@'192.168.
 			MariaDB>181.10' identified by ‘123.com’;
 			MariaDB>flush privileges;
 			MariaDB>inert into vuser (user,password) value ('tom',password
 			MariaDB>('123.com')),('jerry',password('123.com'));
 			MariaDB>exit;
 		 @创建pam认证文件:
 		 	#cat <<EOF >> /etc/pam.d/vsftpd.mysql
 		 	<auth required pam_mysql.so user=vsftpd passwd=123.com
 		 	host=192.168.181.10 db=vsftpd table=vuser usercolumn=u
 		 	ser passwdcolumn=password crypt=2
 			<account required pam_mysql.so user=vsftpd passwd=123.com
 		 	host=192.168.181.10 db=vsftpd table=vuser usercolumn=u
 		 	ser passwdcolumn=password crypt=2
 		 	EOF
 		 @修改vsftpd主配置以下选项为:
 		 	pam_service_name=vsftpd.mysql
 		 @重启vsftpd服务:
 		 	#systemctl restart vsftpd
 		 @此时仅可登录匿名用户和mysql数据库中标vuser中的用户
 		 	也可通过user_config_dir参数进行每用户权限控制
 		 Tip:
 		 	%not null一般置于column定义参数的最后面,不然命令报错
 		 	%/etc/pam.d/vsftpd.mysql中定义crypt=2可能会报错,可以
 		 		尝试其他参数,详细说明参见pam_mysql-0.7RC1目录下
 		 		的readme文件;

Tip:

1、/var/ftp目录除了root用户具有w权限外,不能设置其他任何w权限,
	否则报错‘vsftpd: refusing to run with writable root inside chroot()’,
	客户端无法连接
2、客户端以ftp或anonymous用户进行匿名访问时,所创建的目录或
	上传的文件属主属组都为ftp用户,默认设定,文件的权限为600,
	目录的权限为700
	匿名用户对所有匿名用户创建的目录无法访问,哪怕是在当前会话
	创建的,可以进入目录,可以上传文件(假如设置了允许上传),
	但目录内容不可见;(测试必须设置该目录其他用户拥有读权限);
	anon_other_write_enable=YES;允许匿名登录用户在ftp用户拥有
	写权限且other用户读权限的目录下删除文件
3、客户端

问题:

1、设置登录用户chroot时,用户登录提示
	‘refusing to run with writable root inside chroot()’
解:正常情况下chroot不允许父目录具有写权限,在vsftpd.conf中加入
	参数:allow_writeable_chroot=YES,重启vsftpd服务
参考:https://ma.ttias.be/vsftpd-linux-500-oops-vsftpd-refusing-run-
	writable-root-inside-chroot/
2、Ubuntu18.04 使用ftp 192.168.181.10 命令访问centos7 vsftpd,
	上传文件提示553 Could not create file. 而使用其他客户端相同
	用户上传成功;
解:各linux发行版软件可能稍有差别,ubuntu中ftp的pub命令可能选项
	稍有不同,使用lcd进入目标文件目录后,使用put命令再次上传成功
3, 在网关上做ftp连接的iptables转发, 命令连接正常, 但数据连接异常
解:  PASSIVE模式ftp, 交换数据连接端口的行为导致, 以下文章有详细
     的流程分析和解决方法:https://blog.51cto.com/ourlinux/895562
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值