标签:vsftpd
FTP(File Transfer Protocol,文件传输协议)是一个用于从一台主机到另一台主机传送文件的协议。FTP服务可以工作在主动模式和被动模式两种模式下。
主动模式:ftp客户端通过一个随机选择的TCP端口连接FTP服务器的21端口请求建立连接。这是控制连接。当控制连接建立完成后,进行数据连接,FTP服务器会用自己的20端口和客户端随机的TCP端口进行数据传输。
被动模式:ftp客户端通过一个随机选择的TCP端口连接FTP服务器的21端口请求建立连接。然后FTP服务器随机选择一个TCP端口,并用控制连接告诉客户端,客户端用另一个TCP端口连接。
Vsftp(Very secure FTP,非常安全的FTP)是一个基于GPL发布的类unix系统上使用的FTP服务器软件。
vsftp的安装
[root@lys ~]# yum install vsftpd
vsftpd 服务的启动,暂停,自动加载。
[root@lys ~]# service vsftpd start
[root@lys ~]# chkconfig vsftpd on
在启动vsftpd前,需要关闭selinux,并清空iptables规则。
用户认证:
虚拟用户:仅用于访问某特定服务中的资源,vsftpd支持将用户及密码保存在本地数据文件,数据库或LDAP中。
nsswitch: network server switch, 名称解析框架
配置文件:/etc/nsswitch.conf
模块:/lib64/libnss*, /usr/lib64/libnss*
pam: pluggable authentication module, 用户认证框架
模块:/lib64/security/
配置文件:/etc/pam.conf, /etc/pam.d/*
系统用户:以vsftpd所在主机中的/etc/passwd中的用户及密码作为认证用户来源
匿名用户:vsftpd 允许匿名用户登录
CentOS 6.5: vsftpd
用户认证配置文件:/etc/pam.d/vsftpd
服务脚本:/etc/rc.d/init.d/vsftpd
配置文件目录:/etc/vsftpd
主配置文件:vsftpd.conf
匿名用户(映射为ftp用户)共享资源位置:/var/ftp
系统用户通过ftp访问的资源的位置:用户自己的家目录
虚拟用户通过ftp访问的资源的位置:给虚拟用户指定的映射成为的系统用户的家目录
匿名用户的配置:
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_ohter_write_enable=YES
系统用户的配置:
local_enable=YES
write_enable=YES
local_umask=022
禁锢所有的ftp本地用户于其家目录中:
chroot_local_user=YES
禁锢文件中指定的ftp本地用户于其家目录中:
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/xferlog
改变上传文件的属主:
chown_uploads=YES
chown_username=whoever
vsftpd使用pam完成用户认证,其用到的pam配置文件:
pam_service_name=vsftpd
是否启用控制用户登录的列表文件
userlist_enable=YES
userlist_deny=YES|NO
默认文件为/etc/vsftpd/user_list
连接限制:
max_clients: 最大并发连接数;
max_per_ip: 每个IP可同时发起的并发请求数;
传输速率:
anon_max_rate: 匿名用户的最大传输速率, 单位是“字节/秒”;
local_max_rate: 本地用户
虚拟用户:所有的虚拟用户会被统一映射为一个指定的系统账号,访问的共享位置即为此系统账号的家目录;各虚拟用户可被赋予不同的访问权限;通过匿名用户的权限控制参数进行指定;
虚拟用户账号的存储方式:
文件:编辑文件
奇数行为用户名
偶数行为密码
此文件需要被编码为hash格式;
系型数据库中的表中:
即时查询数据库完成用户认证;
mysql库,pam要依赖于pam_mysql
# yum -y install pam_mysql
安装好vsftpd后,可以查看生成那些文件,主配置文件/etc/vsftpd/vsftpd.conf
启动vsftpd服务,并查看端口。
清空ip规则,并关闭selinux
[root@lys ~]# iptables -F
[root@lys ~]# getenforce
Enforcing
[root@lys ~]# setenforce 0 临时关闭selinux
[root@lys ~]# vi /etc/selinux/config 永久关闭selinux
SELINUX=disabled
在Windows客户端,进入命令行模式,使用ftp这个命令,来测试是否能匿名正常登录ftp服务器
默认情况下,是允许匿名登录的。也可以通过linux主机来测试。
新建一个ftpuser,通过系统用户来登录。
发现系统可以随意切换目录。
ftp> ls
227 Entering Passive Mode (192,168,2,114,176,227).
150 Here comes the directory listing.
drwxr-xr-x 5 0 0 4096 Nov 02 21:10 ConsoleKit
-rw-r--r-- 1 0 0 4439 Jul 16 2014 DIR_COLORS
-rw-r--r-- 1 0 0 5139 Jul 16 2014 DIR_COLORS.256color
-rw-r--r-- 1 0 0 4113 Jul 16 2014 DIR_COLORS.lightbgcolor
drwxr-xr-x 3 0 0 4096 Jul 24 07:50 NetworkManager
-rw-r--r-- 1 0 0 45 Feb 12 2014 Trolltech.conf
drwxr-xr-x 4 0 0 4096 Nov 02 21:13 X11
drwxr-xr-x 3 0 0 4096 Nov 02 21:11 abrt
drwxr-xr-x 4 0 0 4096 Nov 02 21:16 acpi
-rw-r--r-- 1 0 0 44 Nov 02 22:12 adjtime
-rw-r--r-- 1 0 0 1512 Jan 12 2010 aliases
-rw-r--r-- 1 0 0 12288 Nov 02 21:21 aliases.db
drwxr-xr-x 2 0 0 4096 Nov 02 21:17 alsa
drwxr-xr-x 2 0 0 4096 Nov 02 21:17 alternatives
-rw------- 1 0 0 541 Mar 30 2015 anacrontab
-rw-r--r-- 1 0 0 148 May 14 2009 asound.conf
-rw-r--r-- 1 0 0 1 Feb 19 2015 at.deny
drwxr-x--- 3 0 0 4096 Nov 02 21:17 audisp
vsftpd+pam+mysql的实现(mysql,vsftp基于同一台linux主机)
1.安装mysql和pam_mysql,其中pam_mysql是由epel提供。
2.创建虚拟用户
3.创建保存用户名和密码的数据库和表
mysql> create database vsftpd;
mysql> grant select on vsftpd.* to vsftpd@localhost identified by ‘123‘;
mysql> grant select on vsftpd.* to vsftpd@127.0.0.1 identified by ‘123‘;
mysql> flush privileges;
mysql> use vsftpd;
mysql> create table users (
-> id int AUTO_INCREMENT NOT NULL,
-> name char(20) binary NOT NULL,
-> password char(48) binary NOT NULL,
-> primary key(id)
-> );
2、添加测试的虚拟用户
根据需要添加所需要的用户,需要说明的是,这里将其密码为了安全起见应该使用PASSWORD函数加密后存储。
mysql> insert into users(name,password) values(‘tom‘,password(‘magedu‘));
mysql> insert into users(name,password) values(‘jerry‘,password(‘magedu‘));
三、配置vsftpd
1.建立pam认证所需文件
#vi /etc/pam.d/vsftpd.mysql
添加如下两行
auth required /lib64/security/pam_mysql.so user=vsftpd passwd=www.magedu.com host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib64/security/pam_mysql.so user=vsftpd passwd=www.magedu.com host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
注意:由于mysql的安装方式不同,pam_mysql.so基于unix sock连接mysql服务器时可能会出问题,此时,建议授权一个可远程连接的mysql并访问vsftpd数据库的用户。
2.修改vsftpd的配置文件,使其适应mysql认证
建立虚拟用户映射的系统用户及对应的目录
# useradd -s /sbin/nologin -d /var/ftproot vuser
# chmod go+rx /var/ftproot
请确保/etc/vsftpd.conf中已经启用了以下选项
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES
而后添加以下选项
guest_enable=YES
guest_username=vuser
并确保pam_service_name选项的值如下所示
pam_service_name=vsftpd.mysql // 系统用户将无法登录
四、启动vsftpd服务
# service vsftpd start
# chkconfig vsftpd on
查看端口开启情况
# netstat -tnlp |grep :21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 23286/vsftpd
使用虚拟用户登录,验正配置结果,以下为本机的命令方式测试,你也可以在其它Win Box上用IE或者FTP客户端工具登录验正,重启vsftpd服务后,输入用户名和密码报错,报错日志如下
想很久都不知道怎么办,后来去查var/lib/mysql/mysql.sock,路径确实不存在,看到和mysql有关,我就去看mysql的配置文件
发现mysql.sock在/tmp/目录下,接着我就把/tmp/mysql.sock和/var/lib/mysql/mysql.sock做了一个连接,。
[root@lys ~]# ln -sv /tmp/mysql.sock /var/lib/mysql/mysql.sock
`/var/lib/mysql/mysql.sock‘ -> `/tmp/mysql.sock‘
重启服务,再登录就正常了。(为什么不直接读取/tmp/mysql.sock,而是读取/var/lib/mysql/mysql.sock???有没有大神知道是为什么?)
标签:vsftpd
原文地址:http://laoli110.blog.51cto.com/9136611/1711149