文件共享服务 FTP

一.FTP配置文件服务器

FTP文件传送协议,FTP使用两个并行TCP连接,一个控制连接,一个数据连接,控制连接用于在客户机和服务器之间发送控制信息,比如用户和密码,改变远程目录和命令,上传下载文件等,数据连接用于 真正发送数据。ftp有两种工作模式,主动模式(Active),被动模式(Passive)。

     1)主动模式

      在主动模式下,客户端随机tcp端口连接服务器的tcp21端口请求建立控制连接,tcp三次握手建立连接,需要数据连接时,然后客户端用控制连接告诉服务器可以用于数据连接的tcp端口,然后服务器用tcp20端口与客户端告知的tcp端口建立数据连接,连接方向从服务器到客户端。

      2)被动模式

       在被动模式下,客户端随机tcp端口连接服务器的tcp21端口请求建立控制连接,tcp三次握手建立连接,需要数据连接时,客户端通过控制连接告诉服务器进入被动传输模式,服务器告诉客户端可以使用的数据连接端口,客户端随机使用端口与告知的服务器端口建立连接,连接方向客户端到服务器。

1.1vsftpd

      vsftpd(Very Secure FTP)在安全性,稳定性,高速上表现不错。

      vsftpd安装

yum -y install vsftpd

1.2vsftpd配置

     配置文件/etc/vsftpd/vsftpd.conf,用户必须在配置文件中有上传功能和对应目录权限中有写权限才能上传文件。

匿名用户的配置:
            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: 本地用户的最大传输速率, 单位是“字节/秒”;

     匿名用户登录默认用户名ftp和anonymous。有效用户包括本地用户和虚拟用户,本地用户:vsftpd所在主机中/etc/passwd中的用户和密码作为认证来源,这是默认配置;虚拟用户:vsftpd将用户的信息保存在本地数据文件,Mariadb或者mysql中,虚拟用户只能访问FTP服务器的资源,加大了安全性。下边说下本地数据文件实现虚拟用户访问。

     1)过本地数据文件实现虚拟用户访问,这种方法适用于用户比较少和变化不频繁情况下。

yum -y install db4-utils    安装生成数据库的软件包
useradd -d /var/ftp/userdir -s /sbin/nologin vftpuser    生成本地映射用户,/var/ftp/userdir目录权限700
修改/etc/vsftpd/vsftpd.conf文件,如下
    guest_enable=YES         允许虚拟用户登录
    guest_username=user     将虚拟用户映射成本地vftpuser用户
    pam_service_name=vsftp.vu    将PAM配置文件指定

   生成虚拟用户文件

vim /etc/vsftpd/vftpuser.txt        建立用户文件
    user1        虚拟用户
    123          密码
    user2
    456

将刚添加的vftpuser.txt虚拟用户口令文件转换成系统识别的口令认证文件

db_load �CT �Ct hash �Cf /etc/vsftpd/vftpuser.txt /etc/vsftpd/vftpuser.db
chmod 600 vfspuser.db

新建一个虚拟用户的PAM文件,加入下边两行内容

vim /etc/pam.d/vsftpd.vu
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser

        重新加载配置完成

service vsftpd reload

     2)通过MySQL实现虚拟用户访问

     对于FTP服务器虚拟用户非常多或者变化比较频繁时,使用MySQL数据库可以发挥数据库操作灵活的优势,配置方法如下。

安装MySQL服务器软件包

yum -y install mysql-devel*
yum -y install mysql-server*

使用mysqladmin创建MySQL管理员和密码

mysqladmin -u root password redhat   建立用户root密码是redhat

・使用root用户登录MySQL数据库,建立虚拟用户的数据库和表然后加入虚拟用户tom 和tony

mysql -u root -p    登录mysql
create database vftpuser;    建立数据库vftpuser
use vftpuser;    进入数据库
create table users(name char(16) binary,pwd char(16) binary);    建立表user
insert into users(name,pwd) values (‘tom’,password(‘123’));    建立用户记录
insert into users(name,pwd) values (‘tony’,password(‘123’));    建立用户记录
select * from users        查看表信息

处于安全的考虑,在登录mysql数据库是,不应使用root,建立一个专门读取数据库中users表的用户

grant select on vftpuser.users to vsqluser@localhost identified by ‘redhat’;
flush privileges

生成本地映射用户,修改配置文件

useradd -d /var/ftp/userdir -s /sbin/nologin vftpuser    生成本地映射用户
修改/etc/vsftpd/vsftpd.conf文件,如下
    guest_enable=YES         允许虚拟用户登录
    guest_username=user     将虚拟用户映射成本地vftpuser用户
    pam_service_name=vsftp.vu    将PAM配置文件指定

安装mysql的PAM认证模块,并配置

yum -y pam_mysql*
vim /etc/pam.d/vsftp.vu  加入下列内容
auth required /lib/security/pam_mysql.so user=vsqluser \
    password=redhat host=localhost db=vftpuser table=users \
    usercolum=name passwordcolumn=pwd crypt=2
account required /lib/security/pam_mysql.so user=vsqluser \
    password=redhat host=localhost db=vftpuser table=users \
    usercolum=name passwordcolumn=pwd crypt=2
crypt指定密码以什么方式保存到数据库中
=0时以明文保存,
=1时使用crypt()函数加密保存,
=2时使用mysql中的password()函数加密保存,
=3时使用md5方式保存。
重启vsftpd后可使用tom和tony登录FTP服务器。

你可能感兴趣的:(服务器,下载文件,客户端,配置文件,客户机)