标签:ftp mysql
如果我们有三台主机在一个环境中,需要将不同主机上的文件拷贝到不同主机上,如果拷贝到U盘中,然后再一个一个的拷贝,显然这样降低了工作效率,如果可以将某个主机共享内容,然后每个主机连接,这样就降低了时间成本,ftp就帮我们解决了这个问题。
用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。
Client(PORT/TCP)向Server(22/TCP)发送连接请求,建立三次握手
Client告知Server数据连接端口为PORT+1
Server(20/TCP)主动向Client发送连接请求,建立数据通信。
Client(PORT/TCP)和Server建立三次握手
Client向Server发起PASSIVE请求
Server告知Client数据端口
Client(PORT+1/TCP)再次向Server发送数据连接请求
这里需要注意一下,Server数据端口需要计算得出来的一个随机端口号
示例:
192,168,4,60,140,28
服务器数据端口为:140*256+28=35868即此端口为数据连接端口
TCP三次握手过程 被动模式下通信过程,产生随机端口通信。
1XX | 信息 |
2XX | 成功类响应码 |
3XX | 提示需进一步提供补充类信息的状态码 |
4XX | 客户端错误 |
5XX | 服务器端错误 |
匿名用户:ftp,anonymous,对应linux用户为ftp
匿名用户映射为ftp用户共享资源位置:/var/ftp/pub
系统用户:linux用户,用户/etc/passwd,密码/etc/shadow
系统用户通过ftp访问的资源的位置:用户自己的家目录
虚拟用户:特定服务的专用用户,独立于用户/密码的文件;仅用于访问某特定功能的资源
虚拟用户通过ftp访问资源的位置:给虚拟用户指定的映射成系统用户的家目录
用户认证配置文件
/etc/pam.d/vsftpd
服务脚本
/usr/lib/systemd/system/vsftpd.service (CentOS 7)
/etc/rc.d/init.d/vsftpd
配置文件
/etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd.conf
匿名了用户配置
anonymous_enable 是否启用匿名用户
anon_upload_enable 是否允许匿名用户上传
anon_mkdir_write_enable 是否允许匿名用户创建目录
anon_other_write_enable 是否允许匿名用户删除目录
系统用户配置
local_enable 是否开启系统用户
write_enable 是否允许创建、删除文件
local_mask 控制本地上传文件权限
chroot_local_user 锁定所有用户在家目录中
chroot_list_enable 运行列表中的用户切换为家目录
chroot_list_file 指定用户文件存放位置
dirmessage_enable 在指定目录下创建.message文件提示用户登录信息
local_root 非匿名了用户登录所有目录
guest_enable 所有系统用户都映射成guest用户
guest_username 指定guest用户,一定要与guest_enable使用
nopriv_user vsftpd指定用户身份运行
日志
xferlog_enable 是否开启传输日志
xferlog_std_format 是否开启标准格式
xferlog_file 指定存放日志文件
dual_log_enable 使用vsftpd日志格式,默认不启用
vsftpd_log_fiel=/var/log/vsftpd.log 可自动生成
改变上传文件的所有者
chown_uploads 是否开启改变上传并修改所有者
chown_username 设置修改为who
欢迎信息
ftpd_banner 设置欢迎信息
vsftpd使用pam完成认证使用的pam配置文件
pam_service_name
是否启用控制用户登录的列表文件
userlist_enable 是否启用用户列表
userlist_deny 是否允许这个文件中的用户可以登录
连接限制
max_client 最大并发连接数
max_per_ip 每个IP可同时发起的并发请求数
传输速率
anon_max_rate 匿名用户最大传输率,单位为字节/秒
local_max_rate 本地用户最大传输速率
-主动模式端口
connect_from_port_20 主动模式端口为20
ftp_data_port 指定主动模式端口
此处注意:一定不能把connect_from_port设置为NO
被动模式端口
pasv_min_port 被动模式最小端口,0为随机端口
pasv_max_port 被动模式最大端口
是否使用当地时间,即系统时间
use_localtime
连接时间
connect_timeout 主动模式数据连接超时时长
accept_timeout 被动模式数据连接超时时长
data_connection_timeout 数据无数据传输超时时长
idle_session_timeout 无命令超时时长
-优先以文本传输
ascii_upload_enable 是否开启文本传输
ascii_download_enable
注意:vsftpd默认不允许直接修改根目录权限。
(1)修改/etc/vsftpd/vsftpd.conf
listen=NO 将此项设置为NO ,即关闭自己监听
(2)安装xinetd服务
[root@localhost ~]# yum install -y xinetd
(3)复制模板并修改启动xinetd服务
[root@localhost xinetd.d]# cp rsync vsftpd
[root@localhost xinetd.d]# vim vsftpd
service vsftpd #修改服务名称
{
disable = no 是否开启
flags = IPv6
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
server_args = --daemon
log_on_failure += USERID
}
[root@localhost xinetd.d]# service xinetd restart
(4)验证是否成为非独立服务
[root@localhost xinetd.d]# ss -tnl
LISTEN 0 64 :::21 :::* users:(("xinetd",48493,5))
(1)确认是否支持ssl
[root@localhost ~]# ldd
which vsftpd|grep ssl
libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f56e8de8000)
(2)创建证书
[root@localhost/etc/pki/tls/certs]#make vsftpd.pem
[root@localhost/etc/pki/tls/certs]#openssl x509 -in vsftpd.pem -noout -text
#查看证书内容 [root@localhost/etc/pki/tls/certs]#mv vsftpd.pem /etc/vsftpd/
#将证书移动至此目录下方便管理
(3)配置vsftpd服务支持SSL
[root@localhost~]#vim /etc/vsftpd/vsftpd.conf
#在文件下追击如下几行
128 ssl_enable=YES #是否开启SSL
129 allow_anon_ssl=NO #是否允许匿名用户支持SSL
130 force_local_logins_ssl=YES #本地用户登录加密
131 force_local_data_ssl=YES #本地用户数据传输加密
132 rsa_cert_file=/etc/vsftpd/vsftpd.pem #证书存放的位置
(4)测试是否使用加密传输
[root@localhost ~]# ftp 192.168.4.60
Connected to 192.168.4.60 (192.168.4.60).
220 (vsFTPd 3.0.2)
Name (192.168.4.60:root): wang
530 Non-anonymous sessions must use encryption. #禁止匿名用户登录
Login failed.
421 Service not available, remote server has closed connection
使用Fileilla工具测试
所有虚拟用户会被统一映射为一个指定的系统账号,访问的共享位置即此系统账号的目录;
每个虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定;
文本存储:编辑文本文件,此文件需要被编码为hash格式
格式:奇数行为账户,偶数行为密码
不过需要对此文件加密,使用的工具为db_load
db_load -T -t hash -f Filename.txt Filename.db
-T 转换
-t 指定类型
-f 指定文件
存储在关系型数据库表中,可以实现查询数据库完成用户认证
(1)创建用户并写入一个文本文件中
[root@localhost/etc/vsftpd]#vim vusers
1 joah
2 123456
3 wang
4 123456
(2)创建用户数据库文件
[root@localhost/etc/vsftpd]#db_load -T -t hash -f vusers vusers.db
[root@localhost/etc/vsftpd]#chmod 600 vusers.db
#修改文件权限
(3)创建用户和访问的目录 [root@localhost~]#useradd -s /sbin/nologin -d /app/ftproot vuser
[root@localhost~]#chmod +rx /app/ftproot/
[root@localhost~]#chmod -w /app/ftproot/
#由于CentOS 7 上不允许系统用户直接修改家目录所有需要去掉此权限 [root@localhost~]#mkdir /app/ftproot/upload
[root@localhost~]#setfacl -m u:vuser:rwx /app/ftproot/upload/
(4)创建pam配置文件
[root@localhost~]#ls /usr/lib64/security/ |grep userdb
#查看是否已有此模块
pam_userdb.so
[root@localhost/etc/pam.d]#vim vsftpd.db
1 auth required pam_userdb.so db=/etc/vsftpd/vusers
2 account required pam_userdb.so db=/etc/vsftpd/vusers
(5)创建虚拟用户独立的配置文件
[root@localhost/etc/vsftpd]#mkdir vdocs
[root@localhost/etc/vsftpd]#cd vdocs/
[root@localhost/etc/vsftpd/vdocs]#vim wang
[root@localhost/etc/vsftpd/vdocs]#vim joah
1 anon_upload_enable=YES
2 anon_mkdir_write_enable=YES
3 anon_other_write_enable=YES
注意:默认不创建用户文件,只有下载权限。
(6)修改/etc/vsftpd/vsftpd.conf
文件
133 guest_enable=YES #所有系统用户映射为guest用户
134 guest_username=vuser #指定guest用户
135 pam_service_name=vsftpd.db #pam服务的名称
136 user_config_dir=/etc/vsftpd/vdocs #文本文件用户的配置文件所在位置
(7)测试
CentOS7 环境
(1)编译安装pam_mysql,提供pam_mysql.so模块
[root@localhost/usr/local/src/pam_mysql-0.7RC1]#yum install -y mariadb-devel pam-devel
[root@localhost/usr/local/src/pam_mysql-0.7RC1]#./configure --with-mysql=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security
[root@localhost/usr/local/src/pam_mysql-0.7RC1]#make && make install
(2)准备数据库和相关表
[root@localhost~]#mysql -uroot -p
MariaDB [(none)]> CREATE DATABASE ftpdb;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON ftpdb.* TO ftpuser@‘localhost‘ IDENTIFIED BY ‘123456‘;
MariaDB [(none)]> USE ftpdb;
MariaDB [ftpdb]> CREATE TABLE vuser (ID int unsigned auto_increment primary key,username char(40),password char(50));
[root@localhost~]#useradd -d /app/ftproot -s /sbin/nologin ftpuser
[root@localhost~]#chmod 555 /app/ftproot/
#修改目录权限,因为CentOS7中默认不允许父目录有写权限
(3)添加虚拟用户
MariaDB [ftpdb]> INSERT INTO vuser(username,password) VALUES(‘joah‘,password(‘123456‘));
MariaDB [ftpdb]> INSERT INTO vuser(username,password) VALUES(‘li‘,password(‘123456‘));
(4)建立pam认证所需文件
[root@localhost~]#vim /etc/pam.d/vsftpd.mysql
1 auth reuqired pam_mysql.so user=ftpuser passwd=123456 host=localhost db=ftpdb table=vu ser usercolumn=username passwdcolumn=password crypt 2
2 account reuqired pam_mysql.so user=ftpuser passwd=123456 host=localhost db=ftpdb table =vuser usercolumn=username passwdcolumn=password crypt 2
选项说明:
auth 表示认证
account 验证账号密码正常使用
reuqired 表示认证通过
user 为登录mysql的用户
passwd 登录mysql的密码
host mysql服务器的主机名或IP地址
db 指定连接mysql的数据库名称
table 指定连接数据库中的表名
usercolumn 当做用户名的字段
passwdcolumn 当做用户名字段的密码
crypt 表示加密方式,0表示不加密;1表示crypt(3)加密;2表示使用mysql password()函数加密;3表示md5加密;4表示sha1加密
(5)创建虚拟用户配置文件
[root@localhost/etc/vsftpd]#mkdir vdocs
[root@localhost/etc/vsftpd]#cd vdocs/
[root@localhost/etc/vsftpd/vdocs]#vim joah
[root@localhost/etc/vsftpd/vdocs]#vim li
(6)修改/etc/vsftpd/vsftpd.conf
在配置文件中添加如下内容
128 guest_enable=YES
129 guest_username=ftpuser
130 pam_service_name=vsftpd.mysql
131 user_config_dir=/etc/vsftpd/vdocs
(7)重启服务并测试
axel是 Linux 下一个不错的HTTP/FTP高速下载工具。支持多线程下载、断点续传,且可以从多个地址或者从一个地址的多个连接来下载同一个文件。适合网速不给力时多线程下载提高下载速度
--max-speed=x -s x 最大速度(字节/秒)
--num-connections=x -n x 最大连接数
--output=f -o f 指定文件名
--search[=x] -S [x] 从镜像搜索并下载
--header=x -H x 添加头部
--user-agent=x -U x 设置用户代理
--no-proxy -N 不使用任何代理
--quiet -q 静默
--verbose -v 显示更多状态信息
--alternate -a 显示简单进度条
--version -V 显示版本信息
示例:
`[root@localhost~]#axel -n 3 -o /root ftp://172.18.0.1/pub/ISOs/CentOS-6.9-x86_64-bin-DVD1.iso`
标签:ftp mysql
原文地址:http://merit.blog.51cto.com/10757694/1973788