热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

FTP的全称是FileTransferProtocol(文件传输协议),就是专门用来传输文件的协议.它工作在OSI模型的第七层,即是应用层,使用TCP传输而不是UDP.这样FTP客户端和服
 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=NOlocal_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虚拟用户的帐号密码格式,奇数行为用户名,双数行为密码
ftpuser1123456
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/vuseraccount 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=NOwrite_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


推荐阅读
  • 三、寻找恶意IP并用iptables禁止掉找出恶意连接你的服务器80端口的IP,直接用iptables来drop掉它;这里建议写脚本来运行, ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在CentOS 7.x上进行端口映射配置的方法,通过修改内核和配置防火墙实现端口映射。作者分享了自己使用华为服务器进行端口映射的经验,发现网速比直连还快且稳定。详细的配置过程包括开启系统路由模式功能、设置IP地址伪装、设置端口映射等。同时,还介绍了如何监听本地端口的tcp请求,以及删除规则和开放的端口的方法。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
  • Python项目实战10.2:MySQL读写分离性能优化
    本文介绍了在Python项目实战中进行MySQL读写分离的性能优化,包括主从同步的配置和Django实现,以及在两台centos 7系统上安装和配置MySQL的步骤。同时还介绍了创建从数据库的用户和权限的方法。摘要长度为176字。 ... [详细]
  • 进入配置文件目录:[rootlinuxidcresin-4.0.]#cdusrlocalresinconf查看都有哪些配置文件:[rootlinuxid ... [详细]
  • SQL Server 2008 到底需要使用哪些端口?
    SQLServer2008到底需要使用哪些端口?-下面就来介绍下SQLServer2008中使用的端口有哪些:  首先,最常用最常见的就是1433端口。这个是数据库引擎的端口,如果 ... [详细]
  • Linux 服务器修改用户名
    Linux服务器修改用户名1、编辑名称vimetchostname2、保存编辑并退出wq3、重 ... [详细]
  • 对于一般的扩展包,我们一般直接pipinstallxxx即可安装,但是unrar直接安装后,发现并不能通过Python程序实现解压的功能& ... [详细]
author-avatar
河南华萃酒业_359
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有