FTP的全称是File Transfer Protocol(文件传输协议),就是专门用来传输文件的协议.它工作在OSI模型的第七层,即是应用层,使用TCP传输而不是UDP.这样FTP客户端和服务器建立连接前就要经过一个"三次握手"的过程.FTP服务还有一个非常重要的特点是它可以独立于平台。





    LINUX下实现FTP服务的软件很多,最常见的有vsftpd,Wu-ftpd和Proftp等。Red Hat Enterprise Linux中默认安装的是vsftpd。

    通常,访问FTP服务器时需要经过验证,只有经过了FTP服务器的相关验证,用户才能访问和传输文件.vsftpd提供了3种ftp登录形式:

    (1)anonymous(匿名帐号)

使用anonymous是应用广泛的一种FTP服务器.如果用户在FTP服务器上没有帐号,那么用户可以以anonymous为用户名,以自己的电子邮件地址为密码进行登录.当匿名用户登录FTP服务器后,其登录目录为匿名FTP服务器的根目录/var/ftp.为了减轻FTP服务器的负载,一般情况下,应关闭匿名帐号的上传功能。

    (2)real(真实帐号)

real也称为本地帐号,就是以真实的用户名和密码进行登录,但前提条件是用户在FTP服务器上拥有自己的帐号.用真实帐号登录后,其登录的目录为用户自己的目录,该目录在系统建立帐号时系统就自动创建。

    (3)guest(虚拟帐号)

如果用户在FTP服务器上拥有帐号,但此帐号只能用于文件传输服务,那么该帐号就是guest,guest是真实帐号的一种形式,它们的不同之处在于,geust登录FTP服务器后,不能访问除宿主目录以外的内容。

下面就对其详细介绍。



接下来我们开始实现vsftpd的虚拟用户的功能:

1、yum安装vsftpd程序:

# yum install vsftpd -y

2、修改配置文件

备份修改配置文件

   # cd /etc/vsftpd

    # mv vsftpd.conf vsftpd.conf.bak

    # vim vsftpd.conf

加入以下内容,并保存wq:

anonymous_enable=NO
local_enable=YES
write_enable=YES
anon_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
listen=YES
user_config_dir=/etc/vsftpd/vuser_dir
pam_service_name=/etc/pam.d/ftp.vu
userlist_enable=NO
chroot_list_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=root
chown_uploads=YES
chown_username=root

参数说明:

# cat vsftpd.conf | grep "^[^#]"

anonymous_enable=NO  //是否允许anonymous登录FTP服务器,默认是允许的。

local_enable=YES  //是否允许本地用户登录FTP服务器,默认是允许

write_enable=YES  //是否允许用户具有在FTP服务器文件中执行写的权限,默认是允许

anon_umask=022  //设置虚拟用户的文件生成掩码为022,默认是077

dirmessage_enable=YES  //激活目录信息,当远程用户更改目录时,将出现提示信息

xferlog_enable=YES  //启用上传和下载日志功能

connect_from_port_20=YES  //启用FTP数据端口的连接请求

xferlog_file=/var/log/vsftpd.log  //设置日志文件的文件名和存储路径,这是默认的

xferlog_std_format=YES  //是否使用标准的ftpd xferlog日志文件格式

listen=YES  //使vsftpd 处于独立启动模式

user_config_dir=/etc/vsftpd/vuser_dir  //使用虚拟用户配置文件的目录

pam_service_name=/etc/pam.d/ftp.vu  //设置PAM认证服务的配置文件名称,该文件存放在/etc/pam.d/目录下.

userlist_enable=NO  //用户列表中的用户是否允许登录FTP服务器,默认是不允许

chroot_list_enable=YES  //如果希望用户登录后不能切换到自己目录以外的其它目录,需要设置该项

tcp_wrappers=YES  //使用tcp_wrqppers作为主机访问控制方式

guest_enable=YES  //是否启用来宾用户(也就是启用虚拟用户)

guest_username=root  //如果启用了虚拟用户后上传文件修改文件的用户名

chown_uploads=YES  //是否启用上传文件后修改为指定的属主

chown_username=root  //是否启用上传文件后修改为指定的属主用户

3、在/etc/vsftpd/下创建两个目录

vuser_db   #后续存放虚拟用户的配置文件

vuser_dir  #存放虚拟用户的认证文件

# mkdir vuser_db vuser_dir

# cd vuser_db/

# ll

-rw-r--r-- 1 root root    44 6月  17 19:35 login_vuser

-rw-r--r-- 1 root root 12288 6月  17 19:35 vuser.db

# vim login_vuser

//以下是login_vuser虚拟用户的帐号密码格式,奇数行为用户名,双数行为密码

ftpuser1
123456
ftpuser2
123456

生成数据库文件

选项-T允许应用程序能够将文本文件转译载入进数据库。由于我们之后是将虚拟用户的信息以文件方式存储在文件里的,为了让Vsftpd这个应用程序能够通过文本来载入用户数据,必须要使用这个选项。

如果指定了选项-T,那么一定要追跟子选项-t

子选项-t,追加在在-T选项后,用来指定转译载入的数据库类型。扩展介绍下,-t可以指定的数据类型有Btree、Hash、Queue和Recon数据库。

-f:参数后面接包含用户名和密码的文本文件,文件的内容是:奇数行用户名、偶数行密码



# db_load -T -t hash -f /etc/vsftpd/vuser_db/login_vuser /etc/vsftpd/vuser_db/vuser.db

4、更改pam认证模块

# cd /etc/pam.d/

# vim ftp.vu  //这个文件名要与主配置文件中的pam_service_name指定的一致

//最后面的vuser就是vuser.db,但是这里的后缀不是需要写的

auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_db/vuser
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_db/vuser

5、为虚拟用户创建对应的文件

# cd /etc/vsftpd/vuser_dir/

# ll   //login_vuser中有多少个帐号就创建多少个虚拟用户文件

-rw-r--r-- 1 root root 168 6月  17 19:36 ftpuser1

-rw-r--r-- 1 root root 169 6月  17 19:37 ftpuser2



# vim ftpuser1

anon_world_readable_only=NO
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/data/ftp1 //指定虚拟用户有权限登录到哪个目录
chown_upload_mode=0777 //虚拟用户上传文件的权限设置

到这里基本上算是配置完成了,可以启动vsftpd服务了:

# service vsftpd start

注意:在复制配置文件时,记得先保存在文本编辑器中,去掉空格,避免配置无法被识别

如果ftp://ip连接不上去,可在终端使用lftp -u user,passwd ip连接上去,看看报什么错,然后逐个排查,线上服务器的话要开放ftp的端口,线上的开放端口设置:

iptables -A INPUT -p tcp -m multiport --dports 20,21 -m state --state NEW -j ACCEPT

iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT

iptables -A INPUT -p tcp -m tcp --dport 30000:31000 -j ACCEPT





在centos客户机上安装lftp命令

# yum install -y lftp

# lftp -u ftpuser1,pass 192.168.8.39

lftp ftpuser1@192.168.8.39:~> ls

ls: 登录失败: 500 OOPS: could not read chroot() list file:/etc/vsftpd/chroot_list





此时

vim /etc/vsftpd/chroot_list

加入以下内容即可,这个是说可以列出除家目录以外的用户

ftpuser1

ftpuser2





lftp ftpuser1@192.168.8.68:~> ls

ls: 登录失败: 500 OOPS: bad bool value in config file for: anon_world_readable_only





/etc/vsftpd/vuser_dir/ftpuser1的配置文件权限中有空格,去掉即可





lftp ftpuser1@192.168.8.68:~> ls

ls: 登录失败: 500 OOPS: cannot change directory:/root

解决办法:

1、 查看 SELinux 的状态





# sestatus -b | grep ftp

allow_ftpd_anon_write                       off

allow_ftpd_full_access                      off

allow_ftpd_use_cifs                         off

allow_ftpd_use_nfs                          off

ftp_home_dir                                off

ftpd_connect_db                             off

ftpd_use_fusefs                             off

ftpd_use_passive_mode                       off

httpd_enable_ftp_server                     off

tftp_anon_write                             off

tftp_use_cifs                               off

tftp_use_nfs                                off

2、 在出现的结果中可以看到 ftp_home_dir off

tftpd_disable_trans off

之类。我们现在只要把其中之一设置为on就可以啦。

3、 setsebool -P ftpd_disable_trans on 或者 setsebool -P ftp_home_dir on

# setsebool -P ftpd_disable_trans on

Boolean ftpd_disable_trans is not defined

4、 重启vsftpd: service vsftpd restart





貌似不行,此时需要关闭selinux防火墙

# setenforce 0

修改其配置文件,不让selinux随机启动

# vim /etc/selinux/config

SELINUX=disabled

centos6.5下vsftpd服务的安装及配置并通过pam认证实现虚拟用户文件共享的更多相关文章

  1. CentOS6.5 下Haproxy服务的安装与配置

    参考网站: http://wenku.baidu.com/link?url=57AsCAL8TIv8NC3Vdnpd0hQ4fGNls8RFikjRWna3OaZb6qGHYTdV-4_wQPuzv8 ...

  2. CentOS 6.5 下Nginx服务的安装与配置

    参考网站: http://www.cnblogs.com/zhuhongbao/archive/2013/06/04/3118061.html http://www.cnblogs.com/jilia ...

  3. 关于linux - Centos 7 下DHCP服务的安装与配置

    DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP ...

  4. [转] Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置

    from:  http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得 ...

  5. Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置

    原文:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得搭建好j ...

  6. CentOS6.4下Mysql数据库的安装与配置

    原文连接:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 说到数据库,我们大多想到的是关系型数据库,比如 ...

  7. Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置(转)

    原文地址:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得搭建 ...

  8. Linux学习之CentOS(一)--CentOS6.6下Mysql数据库的安装与配置

    在这里我是通过yum来进行mysql数据库的安装的,通过这种方式进行安装,可以将跟mysql相关的一些服务.jar包都给我们安装好,所以省去了很多不必要的麻烦!!! [root@larry ~]# c ...

  9. linux-Centos 7下tftp-server服务的安装与配置

    TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间 进行简单文件传输的协议,提供不复杂.开销不大的文件传输服 ...

随机推荐

  1. bzoj2870最长道路tree——边分治

    简化版描述: 给定一棵N个点的树,求树上一条链使得链的长度乘链上所有点中的最小权值所得的积最大. 其中链长度定义为链上点的个数.   有几个不同的做法: 1.sort+并查集+树的直径.边从大到小加入 ...

  2. jnlp初次试用

    1.jnlp是什么?是java提供的一种让你可以通过浏览器直接执行java应用程序的途径,它使你可以直接通过一个网页上的url连接打开一个 java应 用程序.好处就不用说了,如果你的java应用程序 ...

  3. R语言:多个因变量时,如何在plot函数中画多条曲线(plot,points,lines,legend函数)

    最近阅读一篇文献<Regional and individual variations in the function of the human eccrine sweat gland>, ...

  4. 第二节,TensorFlow 使用前馈神经网络实现手写数字识别

    一 感知器 感知器学习笔记:https://blog.csdn.net/liyuanbhu/article/details/51622695 感知器(Perceptron)是二分类的线性分类模型,其输 ...

  5. 获取Methods成员方法类

    位于java.lang.reflect.Method包中 getModifiers() 成员方法的修饰符 getName() 成员方法的名字 getReturnType() 成员方法的声明类型 get ...

  6. Java基础-考察JVM内部结构的常用工具介绍

    Java基础-考察JVM内部结构的常用工具介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们可以通过jvisualvm.exe考察jvm内部结构.而jvisualvm.exe ...

  7. CodeForces - 348D Turtles(LGV)

    https://vjudge.net/problem/CodeForces-348D 题意 给一个m*n有障碍的图,求从左上角到右下角两条不相交路径的方案数. 分析 用LGV算法.从(1,1)-(n, ...

  8. 作业引擎quartz.net --- 监听链

    针对多个作业:如何描述各个跑批任务之间的顺序,紧前.紧后关系,实现灵活调度.例如:A完成则B开始,B完成C开始. 对quartz.net 进行了查阅,能实现如上业务,如下图: 测试代码: using ...

  9. buildroot构建项目(二)--- u-boot 2017.11 建立 2440 开发板

    一.准备工作 在建立之前,先需要将下载的u-boot 拷贝一份出来解压,在此工程下进行更改和创建.同时根据前面搜索到的 mini2440开发板所在的版本,下载一份u-boot 拷贝出 mini2440 ...

  10. 计算机网络之互联网|因特网|万维网|HTTP|HTML之间的关系辨析

    本博文基于知乎"Web 是什么意思?"一问而引起.(本文均属于博主从知乎上自身所答搬运而至). 如无特殊声明,括号()内以分号分隔的名词均等效. 本文如无特殊引用声明,则所有内容版 ...