34543 发表于 2015-11-10 09:30:32

文件服务器vsftp的配置

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的安装
# yum install vsftpd

[*]vsftpd 服务的启动,暂停,自动加载。
# service vsftpd start
# 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
# iptables -F
# getenforce
Enforcing
# setenforce 0临时关闭selinux
# 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 162014 DIR_COLORS
-rw-r--r--    1 0      0            5139 Jul 162014 DIR_COLORS.256color
-rw-r--r--    1 0      0            4113 Jul 162014 DIR_COLORS.lightbgcolor
drwxr-xr-x    3 0      0            4096 Jul 24 07:50 NetworkManager
-rw-r--r--    1 0      0            45 Feb 122014 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 122010 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 302015 anacrontab
-rw-r--r--    1 0      0             148 May 142009 asound.conf
-rw-r--r--    1 0      0               1 Feb 192015 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做了一个连接,。
# 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???有没有大神知道是为什么?)




页: [1]
查看完整版本: 文件服务器vsftp的配置