RHEL6.3安装vsftpd
1、下载vsftpd,可以从官网(http://vsftpd.beasts.org)下载,也可以百度搜索
[root@localhost vsftpd]# wget http://down1.chinaunix.net/distfiles/vsftpd-3.0.2.tar.gz
2、解压压缩包并进入解压出来的目录
[root@localhost vsftpd]# tar -zxvf vsftpd-3.0.2.tar.gz [root@localhost vsftpd]# cd vsftpd-3.0.2/
3、查看INSTALL文件
INSTALL文件中记录了创建、安装、运行vsftp的详细方法,主要包括以下7个步骤:
步骤一、编译vsftpd:
1a、进入vsftpd解压目录
编辑“builddefs.h”,内容如下:
#ifndef VSF_BUILDDEFS_H #define VSF_BUILDDEFS_H #undef VSF_BUILD_TCPWRAPPERS #define VSF_BUILD_PAM #undef VSF_BUILD_SSL #endif /* VSF_BUILDDEFS_H */
将以上undef的都改为define,支持tcp_wrappers,支持PAM认证方式,支持SSL
1b、输入“make”生成二进制安装程序:
执行make时出现以下错误
tcpwrap.c:16:20: 致命错误:tcpd.h:没有那个文件或目录#include <tcpd.h> ^ 编译中断。 make: *** [tcpwrap.o] 错误 1
解决方法:
yum install tcp_wrappers yum install tcp_wrappers-devel
再次执行make时又出现以下错误:
ssl.c:28:25: 致命错误:openssl/err.h:没有那个文件或目录#include <openssl/err.h>
解决方法:
yum install openssl*
再次执行make时又出现以下错误:
/usr/bin/ld: cannot find -lcap collect2: 错误:ld 返回 1 make: *** [vsftpd] 错误 1
解决方法:
yum install libcap-devel
最后执行make成功,结果如下:
[root@localhost vsftpd-3.0.2]# make gcc -o vsftpd main.o utility.o prelogin.o ftpcmdio.o postlogin.o privsock.o tunables.o ftpdataio.o secbuf.o ls.o postprivparent.o logging.o str.o netstr.o sysstr.o strlist.o banner.o filestr.o parseconf.o secutil.o ascii.o oneprocess.o twoprocess.o privops.o standalone.o hash.o tcpwrap.o ipaddrparse.o access.o features.o readwrite.o opts.o ssl.o sslslave.o ptracesandbox.o ftppolicy.o sysutil.o sysdeputil.o seccompsandbox.o -Wl,-s -fPIE -pie -Wl,-z,relro -Wl,-z,now `./vsf_findlibs.sh`
1c、测试编译结果:
[root@localhost vsftpd-3.0.2]# ls -l vsftpd -rwxr-xr-x. 1 root root 151832 3月 4 14:49 vsftpd
步骤二:满足vsftpd先决条件
2a、vsftp缺省配置需要“nobody”用户,如果系统中没有就先创建
[root@localhost vsftpd-3.0.2]# useradd nobody useradd:用户“nobody”已存在
2b、vsftpd缺省配置需要目录“/usr/share/empty”,没有该目录的话就创建一个
[root@localhost vsftpd-3.0.2]# ls /usr/share |grep empty empty
这里显示目录已经存在
3c、匿名文件传输协议(anonymous FTP)需要创建用户“ftp”,创建一个主目录(属主不能是用户ftp,且用户ftp不可写)
[root@localhost vsftpd-3.0.2]# mkdir /var/ftp [root@localhost vsftpd-3.0.2]# useradd -d /var/ftp ftp useradd:用户“ftp”已存在
用户ftp已存在,转至下面的命令(更改ftp目录的属主、数组及权限):
[root@localhost vsftpd-3.0.2]# chown root.root /var/ftp [root@localhost vsftpd-3.0.2]# chmod og-w /var/ftp
修改后ftp目录权限如下:
[root@localhost vsftpd-3.0.2]# ls -l /var/ |grep ftp drwxr-xr-x. 2 root root 6 3月 4 16:31 ftp
步骤三:安装vsftpd配置文件
3a、运行“make install”
[root@REHL vsftpd-3.0.2]# make install if [ -x /usr/local/sbin ]; then \install -m 755 vsftpd /usr/local/sbin/vsftpd; \else \install -m 755 vsftpd /usr/sbin/vsftpd; fi if [ -x /usr/local/man ]; then \install -m 644 vsftpd.8 /usr/local/man/man8/vsftpd.8; \install -m 644 vsftpd.conf.5 /usr/local/man/man5/vsftpd.conf.5; \elif [ -x /usr/share/man ]; then \install -m 644 vsftpd.8 /usr/share/man/man8/vsftpd.8; \install -m 644 vsftpd.conf.5 /usr/share/man/man5/vsftpd.conf.5; \else \install -m 644 vsftpd.8 /usr/man/man8/vsftpd.8; \install -m 644 vsftpd.conf.5 /usr/man/man5/vsftpd.conf.5; fi if [ -x /etc/xinetd.d ]; then \install -m 644 xinetd.d/vsftpd /etc/xinetd.d/vsftpd; fi
将配置样例拷贝到etc目录下
[root@REHL vsftpd-3.0.2]# cp vsftpd.conf /etc/
步骤四:冒烟测试
4a、编辑/etc/vsftpd.conf,在底部增加“listen=YES”(作用是让vsftpd不从inetd启动)
4b、以root权限登录,确保没有运行其他FTP服务(否则vsftpd不能使用ftp端口21)
运行vsftpd二进制程序
[root@localhost root]#/usr/local/sbin/vsftpd & [1] 2104
4c、关闭防火墙
[root@REHL soft]# service iptables stop iptables:清除防火墙规则: [确定] iptables:将链设置为政策 ACCEPT:filter [确定] iptables:正在卸载模块: [确定]
4d、随便复制几个文件到“/var/ftp”目录下
4e、连接FTP
[root@REHL ftp]# ftp localhost Trying ::1... ftp: connect to address ::1拒绝连接 Trying 127.0.0.1... Connected to localhost (127.0.0.1). 220 (vsFTPd 3.0.2) Name (localhost:zcl): ftp 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp>
Password处直接敲回车登录
4f、查看ftp文件
ftp> ls -l 227 Entering Passive Mode (127,0,0,1,183,34). 150 Here comes the directory listing. -r--r--r-- 1 0 0 58300 Mar 07 01:24 ftp-0.17-51.1.el6.x86_64.rpm -rw-r--r-- 1 0 0 192808 Mar 07 01:24 vsftpd-3.0.2.tar.gz 226 Directory send OK. ftp>
4g、在windows系统上登录ftp
用户名输入ftp,密码为空,点击登录
步骤五:启动和关闭vsftpd
vsftpd支持两种启动方式:xinetd和standalone。其中,xinetd是通过xinetd进程来启动和关闭vsftpd服务,这是vsftpd默认的启动方式。standalone方式则是采用独立进程进行启动和关闭,跟普通程序的启动方式一样。
5a、从xinetd运行vsftpd
修改" /etc/xinetd.d/vsftpd ”文件
[root@REHL ftp]# vi /etc/xinetd.d/vsftpd
disable=no,表明xinetd已启用
default: on # description: # The vsftpd FTP server serves FTP connections. It uses # normal, unencrypted usernames and passwords for authentication. # vsftpd is designed to be secure. service ftp {socket_type = streamwait = nouser = rootserver = /usr/local/sbin/vsftpd # server_args = # log_on_success += DURATION USERID # log_on_failure += USERIDnice = 10disable = no
将/etc/vsftpd.conf 中的listen=YES改为listen=NO
采用这种方式时,vsftpd不能单独管理。如果需要重启vsftpd,必须重启整个系xinetd的服务,命令如下:
[root@REHL ftp]# service xinetd start 正在启动 xinetd: [确定] [root@REHL ftp]# service xinetd stop 停止 xinetd: [确定] [root@REHL ftp]# service xinetd restart 停止 xinetd: [确定] 正在启动 xinetd: [确定]
需要注意的是,“/etc/xinetd.d”目录中仅能开启一个FTP服务
5b、standalone方式启动vsftpd
修改/etc/xinetd.d/vsftpd文件,将disable选项由no改为yes,禁止vsftpd通过xinetd服务启动
修改/etc/vsftpd.conf配置文件,将listen=NO改为listen=YES,指定vsftpd使用standalone方式启动。
重启xinetd服务
[root@REHL ~]# service xinetd restart
启动vsftpd服务
[root@REHL ~]# /usr/local/sbin/vsftpd & [1] 5205
关闭vsftpd服务
[root@REHL ~]# ps -ef | grep vsftpd root 5205 3234 0 13:43 pts/0 00:00:00 /usr/local/sbin/vsftpd root 5231 3234 0 13:44 pts/0 00:00:00 grep vsftpd [root@REHL ~]# kill -9 5205 [root@REHL ~]# ps -ef | grep vsftpd root 5242 3234 0 13:45 pts/0 00:00:00 grep vsftpd [1]+ 已杀死 /usr/local/sbin/vsftpd
步骤六:为本地登录设置PAM
如果计算机启用了PAM,需要有一个/etc/pam.d/ftp文件,否则非匿名登录将会失败,对于标准安装,可以从vsftpd安装包解压目录中拷贝,命令如下:
[root@REHL pam.d]# cp /tmp/soft/vsftpd-3.0.2/RedHat/vsftpd.pam /etc/pam.d/ftp
以上仅为vsftpd初级配置,本人为初学者,不到之处望各位大神多多指教(未完待续)!
转载于:https://blog.51cto.com/zhongcl/1903905
相关文章:

创建mysql数据库,在新数据库中创建表,再尝试删除表
创建之前,先登录数据库存 mysql -u 账号 -p密码 登录完成后,展示一下已存在的数据库 show databases; 创建数据库 create database test111; 然后展示一下数据库,如下 show databases; 使用数据库 use test; 在test数据库里面看一下已存在的…

cmake:在各级目录之间共享变量(cmake cache变量)
摘要: 本文记录一下 CMake 变量的定义、原理及其使用。CMake 变量包含 Normal Variables、Cache Variables。通过 set 指令可以设置两种不同的变量。也可以在 CMake 脚本中使用和设置环境变量。set(ENV{} …),本文重点讲述 CMake 脚本语言特有的两种变量。 正文&am…

antd+dva笔记
参考 React中函数式声明组件Dva Ant Design 前后端分离之 React 应用实践ReactDvaJS 之 hook 路由权限控制dva 知识地图react-router Guides and API docs (v2, v3)react-sage redux-saga 是一个用于管理 Redux 应用异步操作,可以用来代替 redux-thunk 中间件。《Redux-saga 中…

求两个矩形重叠部分的面积
#include<stdio.h> #include<math.h>#define areaFile "area.txt" #define perportionFile "perportion.txt"#define min(a,b) ( ((a)>(b)) ? (b):(a) ) #define max(a,b) ( ((a)>(b)) ? (a):(b) )typedef struct xy { int x; int y; …

session,cookie,sessionStorage,localStorage的区别及应用场景
浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式,可以利用cookie,session等跟服务端进行数据交互。 一、cookie和session cookie和session都是用来跟踪浏览器用户身份的会话方式。 区别: 1、保持状态:cookie保存在浏览器端&#x…

鱼眼镜头及其标定
1. 鱼眼镜头特性与镜头分类 普通镜头和针孔相机在数学模型上可以等价对待,都是射影变换(Perspective transform); 鱼眼镜头受到水下斯涅耳窗口现象的启发,采用不同的投影方式,来得到极大的视场角ÿ…

django -- url 的 name 属性
在html的form中使用给url定义的name值,可以在修改url时不用在修改form的src。 urls.py from django.conf.urls import url from mytest import viewsurlpatterns [# url(r^admin/, admin.site.urls),url(r^index/, views.index, namemysite), views.Index.as_view(…

两个矩形重叠部分面积
#include<stdio.h> #include<math.h> #define min(a,b) ( ((a)>(b)) ? (b):(a) ) #define max(a,b) ( ((a)>(b)) ? (a):(b) )typedef struct xy { int x; int y; }xy;void main() {xy a[4];int s,chang,kuang;while (true){printf("Please input 4 x,…

前百度面试官整理的——Java后端面试题(一)
2019独角兽企业重金招聘Python工程师标准>>> List 和 Set 的区别 List , Set 都是继承自 Collection 接口 List 特点:元素有放入顺序,元素可重复 , Set 特点:元素无放入顺序,元素不可重复,重复元…

vibe前景提取算法示例代码
//ViBe.h#pragma once #include <iostream> #include "opencv2/opencv.hpp"using namespace cv; using namespace std;#define NUM_SAMPLES 20 //每个像素点的样本个数 #define MIN_MATCHES 2 //#min指数 #define RADIUS 20 //Sqthere半径 #define SUBSAMPL…

Linux系统程序运行时加载动态库路径顺序
程序运行时加载动态库路径顺序(Linux) 在linux系统中,如果程序需要加载动态库,它会按照一定的顺序(优先级)去查找: 链接时路径(Link-time path)和运行时路径(Run-time path)不是一回…

浮动元素会引起的问题和你的解决办法
问题: (1)父元素的高度无法被撑开,影响与父元素同级的元素(2)与浮动元素同级的非浮动元素会跟随其后(3)若非第一个元素浮动,则该元素之前的元素也需要浮动,否…

Visual Paradigm 教程[UML]:如何使用刻板印象和标记值?(下)
下载Visual Paradigm最新试用版 已加入在线订购,现在抢购立享特别优惠>> 将构造型应用于模型元素 接下来,我们将构造型应用于模型元素。右键单击Customer,然后从弹出菜单中选择Stereotypes> External User。 从图形上看…

基于opencv的简单视频处理类示例
#include "opencv2/opencv.hpp" using namespace std; using namespace cv; class VideoProcessor { private: VideoCapture caputure; //图像处理函数指针 void (*process)(Mat &,Mat &); bool callIt; string WindowNameInput; string WindowNa…

flex数据绑定
2019独角兽企业重金招聘Python工程师标准>>> 1 、方法绑定 [Bindable(event"myFlagChanged")] private function isEnabled():String { if (myFlag)return true; else return ‘false; } <mx:TextArea id"myTA" text"{isEnabled()}&…

【error】error: field * has incomplete type
在编译程序是出现了如题错误, 类或结构体有前向声明的用法,编译到这里时还没有发现定义,不知道该类或者结构的内部成员,没有办法具体的构造一个对象,所以会报错。 两种解决方法: 方法一:将类成员…

Web前端学习笔记:Vue生命周期理解
一、感谢原创博主 示例代码出处vue2.0 探索之路——生命周期和钩子函数的一些理解 官方文档 二、生命周期简单描述 总共分为8个阶段创建前/后,载入前/后,更新前/后,销毁前/后。 创建前/后 在beforeCreated阶段,vue实例的挂载元素…

获取结构体中变量的偏移量
C/C获取结构体中变量的偏移量 1.某些特殊需求下,我们需要知道某个变量在其结构体中的偏移位置。 通常的做法就是定义一个宏变量,如下: #define OFFSET(structure, member) ((int64_t)&((structure*)0)->member) // 64位系统 #defin…

VS2010 CUDA 5.5 VA_X Win7 64位配置
一.安装CUDA5.5以及配置VS助手 1、安装之前必须确认自己电脑的GPU支持CUDA。在设备管理器中找到显示适配器(Display adapters),找到自己电脑的显卡型号,如果包含在http://www.nvidia.com/object/cuda_gpus.html的列表中,说明支持…

SmartRoute之大规模消息转发集群实现
为什么80%的码农都做不了架构师?>>> 消息转发的应用场景在现实中的应用非常普遍,我们常用的IM工具也是其中之一;现有很多云平台也提供了这种基础服务,可以让APP更容易集成相关功能而不必投入相应的开发成本。对于实现…

unity项目警告之 LF CRLF问题
unity中创建的脚本,以LF结尾。 Visual studio中创建的脚本,以 CRLF结尾。 当我们创建一个unity脚本后,再用VS打开编辑保存后,这个文件既有LF结尾符,也有CRLF结尾符。 解决办法:更改unity的代码生成模板&…

Eigen向量化内存对齐/Eigen的SSE兼容,内存分配/EIGEN_MAKE_ALIGNED_OPERATOR_NEW
1.总结 对于基本数据类型和自定义类型,我们需要用预编译指令来保证栈内存的对齐,用重写operator new的方式保证堆内存对齐。对于嵌套的自定义类型,申请栈内存时会自动保证其内部数据类型的对齐,而申请堆内存时仍然需要重写operat…

c/c++文件遍历
//CBrowseDir.h#pragma once#include <stdlib.h> #include <direct.h> #include <string.h> #include <io.h> #include <stdio.h> #include <iostream> using namespace std; class CBrowseDir { protected: //存放初始目录的绝对…

优化应用启动时的体验
2019独角兽企业重金招聘Python工程师标准>>> 对于应用的启动时间,只能是尽量的避免一些耗时的、非必要性的操作在主线程中,这样相对减少一部分启动的耗时,同时在等待第一帧显示的时间里,可以加入一些配置用来增加用户体…

系列四、SpringMVC响应数据和结果视图
2019独角兽企业重金招聘Python工程师标准>>> 项目结构如下 一、返回值分类 一 返回字符串 Controller方法返回字符串可以指定逻辑视图的名称,根据视图解析器为物理视图的地址,根据字符串最后跳转到对应jsp页面 第一步、导入依赖坐标文件、配置…

numpy数组切片:一维/二维/数组
文章目录numpy数组切片操作一维数组(冒号:)1、一个参数:a[i]2、两个参数:ba[i:j]3、三个参数:格式b a[i:j:s]4、例子二维数组(逗号,)取元素 X[n0,n1]切片 X[s0:e0,s1:e1…

行列式求值、矩阵求逆
#include <iostream> #include <string> #include <assert.h> #include <malloc.h> #include <iostream> #include <stdlib.h> #include <memory.h> #include <time.h>using namespace std;//动态分配大小位size的一维数组 te…

IP 地址子网划分
1.你所选择的子网掩码将会产生多少个子网2的x次方-2(x代表网络位借用主机的位数,即2进制为1的部分,现在的网络中,已经不需要-2,已经可以全部使用,不过需要加上相应的配置命令,例如CISCO路由器需要加上ip su…

git rebase 和 git merger
& git merge 在上图中,每一个绿框均代表一个commit。除了c1,每一个commit都有一条有向边指向它在当前branch当中的上一个commit。 图中的项目,在c2之后就开了另外一个branch,名为experiment。在此之后,master下的修…

matplotlib绘制三维轨迹图
1. 绘制基本三维曲线 # import necessary module from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as plt import numpy as np# load data from file # you can replace this using with open data1 np.loadtxt("./pos.txt") # print (data1) n…