Linux学习-FTP服务
一、FTP相关介绍
1、文本传输协议FTP
FTP (File Transfer Protocol) 文件传输协议,是因特网中使用最广泛的文件传输协议;
基于C/S结构的双通道协议(数据和命令连接)
数据传输格式:二进制(默认) 和 文本
两种模式 (服务器角度):
主动模式(PORT style):服务器主动连接
命令(控制):客户端:随机port ⟶ 服务器:tcp21
数据:客户端:随机port ⟵ 服务器:tcp20
被动模式(PASV style):客户端主动连接
命令(控制):客户端:随机port ⟶ 服务器:tcp21
数据:客户端:随机port ⟶ 服务器:随机port
服务器被动模式数据端口示例:
227 Entering Passive Mode (172,16,0,1,224,59) ,则服务器数据端口为:224*256+59
2、FTP软价介绍
FTP服务器:Wu-ftpd,Proftpd,Pureftpd,ServU,IIS
vsftpd:Very Secure FTP Daemon,CentOS默认FTP服务器
客户端软件:ftp,lftp,lftpget,wget,curl
3、FTP服务状态码:
1XX:信息 125: 数据连接打开
2XX:成功类状态 200: 命令OK 230: 登录成功
3XX:补充类 331: 用户名OK
4XX:客户端错误 425: 不能打开数据连接
5XX:服务器错误 530: 不能登录
4、FTP服务用户认证
匿名用户: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
二、FTP相关配置说明
1、vsftpd 服务
配置文件:/etc/vsftpd/vsftpd.conf 可用man 5 vsftpd.conf 查看相关帮助,格式:option=value (=号前后不要有空格)
用户认证配置文件:/etc/pam.d/vsftpd
服务脚本:/usr/lib/systemd/system/vsftpd.service
/etc/rc.d/init.d/vsftpd
2、vsftpd 服务配置相关参数
命令端口
listem_port=21
主动模式端口
connect_from_port_20=YES #主动模式的端口为20
ftp_data_port=20 (默认) #指定主动模式的端口
被动模式端口范围
pasv_enable=yes #允许被动模式连接
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 #匿名上传,注意:文件系统权限
anno_root=/var/ftp #设备匿名用户的ftp根目录(不设置默认在/var/ftp目录下)
anon_mkdir_write_enable=YES #匿名建目录
anon_world_readable_only (默认YES) #只能下载全部读的文件
anon_umask=0333 #指定匿名上传文件的umask,默认077
anon_other_write_enable=YES #可删除和修改上传的文件
指定上传文件的默认的所有者和权限
chown_uploads=YES (默认NO)
chown_username=whoname
chown_upload_mode=0644
Linux系统用户
local_enable=YES #是否允许linux用户登录
write_enable=YES #允许linux用户上传文件
local_umask=022 #指定系统用户上传文件的默认权限
guest_enable=YES #所有系统用户都映射成guest用户
guest_username=ftp #配合上面选项才生效,指定guest用户
local_root=/ftproot #guest用户登录所在目录
禁锢所有系统用户在家目录中
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中用户禁锢
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
使用pam(Pluggable Authentication Modules)完成用户认证
pam_service_name=vsftpd #pam配置文件:/etc/pam.d/vsftpd 默认文件 /etc/vsftpd/ftpusers 中的用户拒绝登录
是否启用控制用户登录的列表文件
userlist_enable=YES #默认有此设置
userlist_deny=YES (默认值) #黑名单,不提示口令,NO为白名单
userlist_file=/etc/vsftpd/users_list #此为默认值
vsftpd服务指定用户身份运行
opriv_user=nobody (默认值)
连接数限制
max_clients=0 #最大并发连接数,0表示不限制
max_per_ip=0 #每个IP同时发起的最大连接数
传输速率:字节/秒
anon_max_rate=0#匿名用户的最大传输速率
local_max_rate=0#本地用户的最大传输速率
连接时间:秒为单位
connect_timeout=60 #主动模式数据连接超时时长
accept_timeout=60 #被动模式数据连接超时时长
data_connection_timeout=300 #数据连接无数据输超时时长
idle_session_timeout=60 #无命令操作超时时长
优先以文本方式传输 (不建议使用)
ascii_upload_enable=YES
ascii_download_enable=YES
SSL支持:
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.pem #指定RSA加密证书信息
三、FTP相关实验
系统:CentOS7.6,服务端(192.168.214.17),客户端(192.168.214.27),数据库:mariadb-server(光盘yum源)
1、实现基于SSL的FTP
1. 查看是否支持SSL
[root@centos7 ~]# ldd `which vsftpd`|grep ssl
libssl.so. => /lib64/libssl.so. (0x00007fb62523d000)
2. 创建自签名证书
[root@centos7 ~]# cd /etc/pki/tls/certs/
[root@centos7 certs]# make vsftpd.pem #生成证书,执行后填写相应信息
[root@centos7 certs]# openssl x509 -in vsftpd.pem -noout -text #查看生成证书信息
3. 配置vsftpd服务支持SSL
[root@centos7 certs]# vim /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.pem #指定证书路径
4. 用filezilla等工具测试
2、实现基于DB文件的虚拟用户FTP服务
1. 创建用户数据库文件
[root@centos7 ~]# cd /etc/vsftpd/
[root@centos7 vsftpd]# vim vusers.txt
[root@centos7 vsftpd]# cat vusers.txt
ftpuser1 #奇数行为用户名
centos #偶数行为密码
ftpuser2
linux
[root@centos7 vsftpd]# db_load -T -t hash -f vusers.txt vusers.db
[root@centos7 vsftpd]# chmod vusers.db
2. 创建用于虚拟映射的用户和访问FTP目录
[root@centos7 vsftpd]# useradd -d /data/ftproot -s /sbin/nologin vuser
[root@centos7 vsftpd]# ll /data
total
drwx------ vuser vuser Dec : ftproot
#centos7上FTP根目录不能有w写权限,所以要修改权限
[root@centos7 vsftpd]# chmod /data/ftproot
[root@centos7 vsftpd]# ll /data
total
dr-xr-xr-x vuser vuser Dec : ftproot
#无写权限,则用户不能上传文件
#所以需要建一个子目录,并设置w权限,这里用acl实现
[root@centos7 vsftpd]# mkdir /data/ftproot/upload
[root@centos7 vsftpd]# setfacl -m u:vuser:rwx /data/ftproot/upload/
3. 创建支持虚拟用户的PAM认证文件
[root@centos7 vsftpd]# vim /etc/pam.d/vsftpd.db
[root@centos7 vsftpd]# cat /etc/pam.d/vsftpd.db
auth required pam_userdb.so db=/etc/vsftpd/vusers #注意,这里后面的文件是不带后缀的
account required pam_userdb.so db=/etc/vsftpd/vusers #这里也是不带后缀的
4. 指定pam配置文件
[root@centos7 vsftpd]# vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd.db #修改此项
#添加以下两项
guest_enable=YES
guest_username=vuser
5. SELinux 设置
禁用SELinux (本次实验已禁用),或者用以下命令
[root@centos7 vsftpd]# setsebool -P ftpd_full_access
6. 虚拟用户建立独立的配置文件
[root@centos7 vsftpd]# mkdir /etc/vsftpd/vusers.d/ #创建配置文件存放的路径
[root@centos7 vsftpd]# vim /etc/vsftpd/vsftpd.conf #修改主配置文件
user_config_dir=/etc/vsftpd/vusers.d/ #添加此行
[root@centos7 vsftpd]# cd /etc/vsftpd/vusers.d/
[root@centos7 vusers.d]# vim ftpuser1 #创建各用户自已的配置文件
#配置ftpuser1用户可读写,其它用户只读
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[root@centos7 vusers.d]# vim ftpuser2 #创建各用户自已的配置文件
#将ftpuser2的登录目录改变至指定的目录
local_root=/var/ftproot
7. 启动 vsftpd 服务并进行相关测试
[root@centos7 vusers.d]# systemctl start vsftpd
[root@centos7- ~]# ftp 192.168.214.17
Connected to 192.168.214.17 (192.168.214.17).
(vsFTPd 3.0.)
Name (192.168.214.17:root): ftpuser1
Please specify the password.
Password:
Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
Entering Passive Mode (,,,,,).
Here comes the directory listing.
drwxrwxr-x Dec : upload
Directory send OK.
ftp> cd upload #只能在此目录下才能上传文件
Directory successfully changed.
ftp> put anaconda-ks.cfg #上传文件
local: anaconda-ks.cfg remote: anaconda-ks.cfg
Entering Passive Mode (,,,,,).
Ok to send data.
Transfer complete.
bytes sent in 0.000446 secs (4313.90 Kbytes/sec)
ftp> ls #可以看到上传成功了
Entering Passive Mode (,,,,,).
Here comes the directory listing.
-rw------- Dec : anaconda-ks.cfg
Directory send OK. [root@centos7 vusers.d]# mkdir /var/ftproot #创建ftpuser2的根目录
[root@centos7 vusers.d]# chmod -w /var/ftproot #去掉写权限
[root@centos7 vusers.d]# cp /etc/fstab /var/ftproot/f1.txt
#客户端上测试
[root@centos7- ~]# ftp 192.168.214.17
Connected to 192.168.214.17 (192.168.214.17).
(vsFTPd 3.0.)
Name (192.168.214.17:root): ftpuser2
Please specify the password.
Password:
Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
Entering Passive Mode (,,,,,).
Here comes the directory listing.
-rw-r--r-- Dec : f1.txt
Directory send OK.
ftp> get f1.txt #下载文件是可以的
local: f1.txt remote: f1.txt
Entering Passive Mode (,,,,,).
Opening BINARY mode data connection for f1.txt ( bytes).
Transfer complete.
bytes received in 0.000463 secs (1285.10 Kbytes/sec)
ftp> put f1.txt #上传是不行的,一是没配置权限,二是根目录也无写权限
local: f1.txt remote: f1.txt
Entering Passive Mode (,,,,,).
Could not create file.
3、实现基于MySQL的虚拟用户FTP服务
1. 配置MySQL服务,并创建相应库与表
[root@centos7 ~]# yum install mariadb-server #安装数据库
[root@centos7 ~]# systemctl start mariadb #启动
[root@centos7 ~]# mysql #连接数据库
MariaDB [(none)]> create database vsftpd; #创建数据库
Query OK, row affected (0.00 sec) MariaDB [(none)]> use vsftpd;
Database changed
MariaDB [vsftpd]> CREATE TABLE users ( --创建表
-> id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
-> name CHAR() BINARY NOT NULL,
-> password CHAR() BINARY NOT NULL
-> );
Query OK, rows affected (0.00 sec) MariaDB [vsftpd]> insert users (name,password) value('ftpuser1',password('centos')); #添加用户
Query OK, row affected (0.00 sec) MariaDB [vsftpd]> insert users (name,password) value('ftpuser2',password('linux')); #添加用户
Query OK, row affected (0.00 sec) MariaDB [vsftpd]> grant select on vsftpd.* to vsftpd@localhost identified by 'centos'; #创建本地连接数据库用户
Query OK, rows affected (0.00 sec) MariaDB [vsftpd]> grant select on vsftpd.* to vsftpd@'127.0.0.1' identified by 'centos'; #创建本地连接数据库用户
Query OK, rows affected (0.00 sec) MariaDB [vsftpd]> flush privileges; #刷新权限
Query OK, rows affected (0.00 sec)
CREATE TABLE users (
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
name CHAR() BINARY NOT NULL,
password CHAR() BINARY NOT NULL
);
创建表语名
2. 安装 pam_mysql 包
CentOS6上pam_mysql 由epel6 源中提供,配好epel源后 yum install vsftpd pam_mysql 即可
CentOS7上无对应的rpm包,需手动编译安装
[root@centos7 ~]# ls -l pam_mysql-.7RC1.tar.gz #准备pam_mysql源码包
-rw-r--r-- root root Dec : pam_mysql-.7RC1.tar.gz
#先安装相关依赖包
[root@centos7 ~]# yum install -y gcc gcc-c++ pam-devel mariadb-devel
[root@centos7 ~]# tar xvf pam_mysql-.7RC1.tar.gz
[root@centos7 ~]# cd pam_mysql-.7RC1/
#编译安装
[root@centos7 pam_mysql-.7RC1]# ./configure --with-pam-mods-dir=/lib64/security/
[root@centos7 pam_mysql-.7RC1]# make && make install
3. 安装 vsftpd 服务,并配置FTP目录权限
[root@centos7 ~]# yum install -y vsftpd
[root@centos7 ~]# useradd -d /data/ftproot -s /sbin/nologin vuser #创建虚拟用户
[root@centos7 ~]# chmod /data/ftproot #设置FTP目录权限
[root@centos7 ~]# mkdir /data/ftproot/upload #创建上传目录
[root@centos7 ~]# setfacl -m u:vuser:rwx /data/ftproot/upload #设置上传目录权限
4. 创建 pam 认证文件,并配置 vsftpd.conf 文件
[root@centos7 ~]# vim /etc/pam.d/vsftpd.mysql
[root@centos7 ~]# cat /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so user=vsftpd passwd=centos host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=
account required pam_mysql.so user=vsftpd passwd=centos host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=
[root@centos7 ~]# vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd.mysql #修改此项
#添加以下三项
guest_enable=YES
guest_username=vuser
user_config_dir=/etc/vsftpd/vusers.d/
auth 表示认证
account 验证账号密码正常使用
required 表示认证要通过
pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝 对路径;后面为给此模块传递的参数
user=vsftpd 为登录mysql的用户
passwd=centos 登录mysql的的密码
host=localhost mysql服务器的主机名或ip地址
db=vsftpd 指定连接msyql的数据库名称
table=users 指定连接数据库中的表名
usercolumn=name 当做用户名的字段
passwdcolumn=password 当做用户名字段的密码
crypt= 密码的加密方式为mysql password()函数加密,0表示不加密,1表示crypt()加密,2表示使用mysql password()函数加密,3表示md5加密,4表示sha1加密
pam配置字段说明
5. SELinux 设置
禁用SELinux (本次实验已禁用),或者用以下命令
[root@centos7 ~]# restorecon -R /lib64/security
[root@centos7 ~]# setsebool -P ftpd_connect_db
[root@centos7 ~]# setsebool -P ftp_home_dir
[root@centos7 ~]# chcon -R -t public_content_rw_t /data/ftproot/
6. 虚拟用户建立独立的配置文件
[root@centos7 ~]# mkdir /etc/vsftpd/vusers.d/ #创建配置文件存放的路径
[root@centos7 ~]# vim /etc/vsftpd/vsftpd.conf #修改主配置文件
user_config_dir=/etc/vsftpd/vusers.d/ #添加此行
[root@centos7 ~]# cd /etc/vsftpd/vusers.d/
[root@centos7 vusers.d]# vim ftpuser1 #创建各用户自已的配置文件
#配置ftpuser1用户可读写,其它用户只读
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[root@centos7 vusers.d]# vim ftpuser2 #创建各用户自已的配置文件
#将ftpuser2的登录目录改变至指定的目录
local_root=/var/ftproot
[root@centos7 vusers.d]# mkdir /data/ftproot #创建ftpuser2的登录目录
[root@centos7 vusers.d]# chmod 555 /data/ftproot #修改目录权限
7. 启动 vsftpd 服务并进行相关测试
[root@centos7 ~]# systemctl start vsftpd
Linux学习-FTP服务的更多相关文章
- 阿里云linux配置ftp服务
阿里云linux配置ftp服务 一.ftp服务安装 运行以下命令安装ftp yum install -y vsftpd 运行以下命令打开及查看etc/vsftpd cd /etc/vsftpd ls ...
- Linux 安装FTP服务
Linux 安装FTP服务,简单入门 环境: 虚拟机:Oracle VM VirtualBox. 系统:CentOS 7. (1)判断是否安装了ftp: rpm -qa | grep vsftpd 或 ...
- linux之FTP服务搭建 ( ftp文件传输协议 VSFTPd虚拟用户)
FTP服务搭建 配置实验之前关闭防火墙 iptables -F iptables -X iptables -Z systemctl stop firewalld setenforce 0 1.ftp简 ...
- Linux安装FTP服务
转自:http://blog.csdn.net/huangbiao86/article/details/6641952 ftp服务器 1. 在Linux和其他机器之间共享文件(在linux下安装ft ...
- Linux SSH,FTP服务配置
CentOS-6.4-x86_64-minimal 0.网卡配置 参考:Linux系统\Centos没有网卡eth0配置文件怎么办? - http://jingyan.baidu.com/articl ...
- Linux下FTP服务(一)—— Ubuntu安装
参考:http://www.cnblogs.com/likwo/p/3154868.html 实验环境:Ubuntu 14.04 VMware虚拟机1. 安装 apt-get install vsft ...
- linux 配置ftp服务
需求:定时远程上传文件,windows->linux linux是一个云服务器,centos7 1:安装vsftpd yum install vsftpd 2:设置开机启动服务chkconfig ...
- Linux安装ftp服务-详细步骤
最近项目中用到了FTP服务器,于是整理了一份在Linux服务器上安装FTP的详细步骤供大家分享. 1.首先连接上自己的Linux服务器.我的Linux是CentOS 6 2.检查Linux服务器上是否 ...
- linux 搭建ftp服务并设置限制访问目录
服务器有好几个项目,新项目前端外包,因为要微信授权登陆,所以前端没有办法本地调试,必须上次ftp在我们服务器上调试代码,当然要限制ftp访问的目录,否则整个服务器项目都能看到了. 安装vsftpd s ...
随机推荐
- Linux监控命令之==>iostat
一.使用说明 iostat 是对系统的磁盘I/O 操作进行监控,它的输出主要显示磁盘读写操作的统计信息,同时给出CPU 的使用情况.同vmstat 一样,iostat 不能对某个进程进行深入分析,仅对 ...
- Flink数据流图的生成----简单执行计划的生成
Flink的数据流图的生成主要分为简单执行计划-->StreamGraph的生成-->JobGraph的生成-->ExecutionGraph的生成-->物理执行图.其中前三个 ...
- netcore 使用redis session 分布式共享
首先准备redis服务器(docker 和redis3.0内置的哨兵进行高可用设置) 网站配置Redis作为存储session的介质(配置文件这些略).然后可以了解一下MachineKey这个东西.( ...
- 从企业版BOSS直聘,看求职简历技巧
有时候,不是我们不可以,而是我们连面试的机会都没有.希望这篇文章能帮助大家找工作,有一个展示自己的机会. [ ] 最近负责测试的面试工作,在等HR推简历的时候害怕错过优秀的伙伴,找HR拿到了公司在BO ...
- DockerFile与镜像(Image)仓库
深入Docker 之 Image: 当我们使用docker pull mysql 这个命令获取镜像的时候,到底他是怎么做的?我们登录官方提供的仓库看一下 https://github.com/dock ...
- Linux的磁盘配额详解(Quota)
1. 检查内核情况 检查当前内核是否支持quota,当前内核配置文件在/boot下 如果当前内核不支持quota,需要重新编译内核将quota support编译进核心: File systems ...
- 数据库与前端与Django目录
数据库 [怀心抱素]初步认识数据库 [怀心抱素]mysql的表操作 [怀心抱素]mysql记录操作 [怀心抱素]mysql索引与补充 [怀心抱素]python操作mysql 前端 [怀心抱素]HTML ...
- [LeetCode] 210. 课程表 II
题目链接:https://leetcode-cn.com/problems/course-schedule-ii/ 题目描述: 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前 ...
- eclipse调试openstack的nova代码
前段时间一直在研究openstack的nova部分的代码.特别想知道,怎样用eclipse来调试代码.也在论坛上问了别人.无果.最后还是自己摸索出了出路. 以下写出自己探索之路.我是用devstack ...
- JS事件流、事件监听、事件对象、事件委托
JS事件流: 01.DOM级别和DOM事件 02.JS事件流:页面中接收事件的顺序 事件冒泡阶段-->处于目标阶段-->事件捕获阶段 (事件捕获总发生在事件冒泡前面) 03.捕获:从外向里 ...