安装基于vsftpd搭建的ftp服务器

一、vsftpd的基本使用
# 安装vsftpd软件
shell> yum install vsftpd
# 启动服务
shell> chkconfig vsftpd on
shell> service vsftpd start
# 简单测试
shell> ftp 192.168.246.120
    连接到 192.168.246.120.
    220 (vsFTPd 2.0.5)
    用户(192.168.246.120:(none)): anonymous
    331 Please specify the password.
    密码:
    230 Login successful.
    ftp> help
    命令可能是缩写的。  命令为:

    !               delete          literal         prompt          send
    ?               debug           ls              put             status
    append          dir             mdelete         pwd             trace
    ascii           disconnect      mdir            quit            type
    bell            get             mget            quote           user
    binary          glob            mkdir           recv            verbose
    bye             hash            mls             remotehelp
    cd              help            mput            rename
    close           lcd             open            rmdir
    ftp> bye
    221 Goodbye.
# 配置文件详解/etc/vsftpd/vsftpd.conf
  anonymous_enable=YES          # 是否启用匿名用户
  local_enable=YES              # 是否启用系统用户
  write_enable=YES              # 系统用户是否可以上传文件
  anon_mkdir_write_enable=YES   # 匿名用户是否可以上传文件
  anon_mkdir_write_enable=YES   # 匿名用户是否可以创建文件
  anon_other_write_enable=YES   # 匿名用户是否可以删除文件
  dirmessage_enable=YES         # 显示欢迎信息
  xferlog_enable=YES            # 打开传输日志
  xferlog_file=/var/log/xferlog # 传输日志文件的日志目录
  xferlog_std_format=YES        # 传输日志文件的日志显示格式
  chroot_list_enable=YES        # 启用禁锢用户功能 (注意针对系统用户的)
  chroot_list_file=/etc/vsftpd/chroot_list # 禁锢用户列表
  chroot_local_user=YES         # 禁锢的所有的用户
  listen=YES                    # vsftpd是否使用独立守护进程进行工作
  pam_service_name=vsftpd       # pam验证使用的文件名,在/etc/pam.d/目录中
  userlist_enable=YES           # 启用list_use文件对用户访问进行控制
  userlist_deny=YES             # YES:禁止/etc/vsftpd/list_user中所有用户访问ftp(黑名单)
                                # NO: 允许/etc/vsftpd/list_user中所有用户访问ftp(白名单)
  max_clients=100               # FTP服务的最大的连接数
  max_per_ip=8                  # 每个IP允许的最大连接数                   

#/etc/vsftpd/ftpusers文件的作用(pam模块使用的配置文件)
  基于pam验证时使用的用户列表文件,禁止中所有用户访问ftp.

# 使用不同用户登录测试
 # 1、匿名用户
   ① 使用匿名用户登录映射的用户是ftp,所有登录的目录是ftp用户的家目录,默认在/var/ftp下. 用户已经被禁锢在/var/ftp下了.
   ② 将配置anon_mkdir_write_enable=YES启用后,并需要ftp用户对自己的家目录有写权限,默认权限是root用户和root组.
      一般我们可以在/var/ftp下创建一个目录为upload并让ftp用户拥有写权限.就可以实现用户上传文件了.但是不能删除和创建文件.
      shell> mkdir -pv /var/ftp/upload
      shell> setfacl -m u:ftp:rwx /var/ftp/upload
      shell> getfacl /var/ftp/upload
        getfacl: Removing leading '/' from absolute path names
        # file: var/ftp/upload
        # owner: root
        # group: root
        user::rwx
        user:ftp:rwx
        group::r-x
        mask::rwx
        other::r-x
      如果想可以使用创建文件需要开启anon_mkdir_write_enable=YES.
      如果想可以使用创建文件需要开启anon_other_write_enable=YES.
   
 # 2、系统用户
   ① 使用系统用户登录映射的用户就是登录的系统用户,登录的目录就是登录系统用户的家目录.用户没有被禁锢在增加自己的家目录下.
      可以使用chroot_list_enable=YES和chroot_list_file=/etc/vsftpd/chroot_list定义禁锢的用户列表,chroot_list文件直接将用户名写入即可.
      也可以启用chroot_local_user=YES禁锢的所有的系统用户

   ② 将配置write_enable=YES启用后, 系统用户登录到FTP时就可以有上传文件的权限了(包括删除和创建文件).
      因为系统用户的家目录默认的是自己的用户和自己的用户组.

二、安全的ftp服务
# 使用抓包工具tcpdump分析数据包得知ftp协议是明文的,可以分析数据表轻易的获取用户名和密码.
shell> tcpdump -i eth0 -nn -X -vv tcp port 21 and ip host 192.168.246.120
# 使用安全的ftp服务(ftps服务)
  # 1、使用openssl建立私有CA
   shell> cd /etc/pki/CA
   # 私钥
   shell> (umask 077;openssl genrsa -out privite/cakey.pem 2014)
   # CA证书
   shell> openssl req -new -x509 -key privite/cakey.pem -out cacert.pem -days
    ---------------------------------------------------------------------------
        Country Name (2 letter code) [GB]:CN
        State or Province Name (full name) [Berkshire]:AH
        Locality Name (eg, city) [Newbury]:CZ
        Organization Name (eg, company) [My Company Ltd]:ca ltd
        Organizational Unit Name (eg, section) []:ca eg
        Common Name (eg, your name or your server's hostname) []:www.ca.com
        Email Address []:admin@ca.com
    ---------------------------------------------------------------------------
   shell> touch index.txt serial
   shell> echo 00 > serial
   shell> mkdir certs crl newcerts
   shell> mkdir /etc/pki/sign
  # 2、建立vsftpd的证书
   shell> mkdir -pv /etc/vsftpd/ssl
   shell> cd /etc/vsftpd/ssl
   # 私钥
   shell> (umask 077;openssl genrsa -out vsftpd.key 1024)
   # 证书申请
   shell> openssl req -new -key vsftpd.key -out vsftpd.csr
    ---------------------------------------------------------------------------
        Country Name (2 letter code) [GB]:CN
        State or Province Name (full name) [Berkshire]:AH
        Locality Name (eg, city) [Newbury]:CZ
        Organization Name (eg, company) [My Company Ltd]:ca ltd
        Organizational Unit Name (eg, section) []:ca eg
        Common Name (eg, your name or your server's hostname) []:ftp.spook.com
        Email Address []:admin@spook.com

        Please enter the following 'extra' attributes
        to be sent with your certificate request
        A challenge password []:
        An optional company name []:
    --------------------------------------------------------------------------- 
   shell> cp ./vsftpd.csr /etc/pki/sign
   shell> cd /etc/pki/sign
   # 签署证书
   shell> openssl ca -in vsftpd.csr -out vsftpd.crt -days 365
   shell> cp ./vsftpd.crt /etc/vsftpd/ssl

  # 3、修改vsftpd的配置文件/etc/vsftpd/vsftpd.conf
   shell> vim /etc/vsftpd/vsftpd.conf
    添加如下内容:
      #   SSL FUNCTION
      ######################
      ssl_enable=YES
      ssl_tlsv1=YES
      ssl_sslv2=YES
      ssl_sslv3=YES
      allow_anon_ssl=NO
      force_local_data_ssl=YES
      force_local_logins_ssl=YES
      rsa_cert_file=/etc/vsftpd/ssl/vsftpd.crt
      rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key
  # 4、测试(使用客户端软件,如FlashFXP)


      

三、建立基于MYSQL的虚拟用户实现FTP的访问
1、安装需要使用的MYSQL数据库(此处的版本为mysql-5.6.20,下载网站
http://www.mysql.com/)
  # 增加mysql用户和mysql组
  shell> groupadd mysql
  shell> useradd -r -g mysql -M -s /sbin/nologin mysql
  # 解压mysql安装包并创建链接文件
  shell> tar -xf mysql-5.5.39-linux2.6-i686.tar.gz -C /usr/local/
  shell> ln -s /usr/local/mysql-5.5.39-linux2.6-i686 /usr/local/mysql
  # 修改mysql目录中所有的文件的宿主和属组为mysql
  shell> cd /usr/local/mysql
  shell> chown -R mysql:mysql .
  # 初始化mysql数据库
  shell> scripts/mysql_install_db --user=mysql
  # 修改mysql目录中所有的文件的宿主为root
  shell> chown -R root .
  # 修改mysql目录中data文件的宿主为mysql
  shell> chown -R mysql data
  # 复制mysql的主配置文件
  shell> cp ./support-files/my-default.cnf /etc/my.cnf
  # 复制mysql的服务脚本
  shell> cp support-files/mysql.server /etc/init.d/mysqld
  # 将mysql的服务脚本加到服务列表中并在默认级别开启服务
  shell> chkconfig --add mysqld
  shell> chkconfig mysqld on
  # 将mysql的二进制文件增加到系统环境变量中
  shell> vim /etc/profile.d/mysql.sh
    增加 export PATH=$PATH:/usr/local/mysql/bin
  # 将mysql的库文件增加到系统库中
  shell> vim /etc/ld.so.conf.d/mysql.conf
    增加 /usr/local/mysql/lib
  shell> ldconfig -v
  # 将mysql的头文件增加到系统库中
  shell> ln -s /usr/local/mysql/include/ /usr/include/mysql
  # 启动mysql服务
  shell> service mysqld start

2、安装pam的mysql插件:pam_mysql-0.7RC1
  shell> tar zxvf  pam_mysql-0.7RC1.tar.gz
  shell> cd  pam_mysql-0.7RC1
  shell> ./configure --with-mysql=/usr/local/mysql --with-openssl
  shell> make
  shell> make install
  #复制安装的pam-mysql模块
  shell> cp /usr/lib/security/{pam_mysql.la,pam_mysql.so} /lib/security/

3、创建虚拟用户账号
 ①准备数据库及相关表
  mysql> create database vsftpd;
  mysql> grant select on vsftpd.* to
vsftpd@localhost identified by 'vsftpd';
  mysql> grant select on vsftpd.* to
vsftpd@127.0.0.1 identified by 'vsftpd';
  mysql> flush privileges;
  mysql> use vsftpd;
  mysql> create table users(
    -> id int AUTO_INCREMENT NOT NULL,
    -> username varchar(20) binary NOT NULL,
    -> password varchar(48) binary NOT NULL,
    -> primary key(id)
    -> );
  mysql> exit
 ②添加测试的虚拟用户
 根据需要添加所需要的用户,需要说明的是,这里将其密码采用明文格式存储,
 原因是pam_mysql的password()函数与MySQL的password()函数可能会有所不同。
  mysql> insert into users(username,password) values('tom','tom');
  mysql> insert into users(username,password) values('eric','eric');
 ③配置vsftpd
  #建立pam认证所需文件
  shell> vim /etc/pam.d/vsftpd.mysql
   添加如下两行:
    auth required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=username passwdcolumn=password crypt=0
    account required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=username passwdcolumn=password crypt=0
  #建立虚拟用户映射的系统用户及对应的目录
  shell> useradd -s /sbin/nologin -d /var/ftproot vuser
  shell> chmod go+rx /var/ftproot
  #修改vsftpd的配置文件,使其适应mysql认证
  shhell> vim /etc/vsftpd/vsftpd.conf
   #请确保vsftpd.conf中已经启用了以下选项
    anonymous_enable=YES
    local_enable=YES
    write_enable=YES
    anon_upload_enable=NO
    anon_mkdir_write_enable=NO
    anon_other_write_enable=NO
    chroot_local_user=YES
   #而后添加以下选项
    guest_enable=YES
    guest_username=vuser
   #并确保pam_service_name选项的值如下所示,对应的文件位置在/etc/pam.d/下
    pam_service_name=vsftpd.mysql
 ④重启vsftpd服务并测试
  shell> service vsftpd restart
  出现问题可以参考/var/log/secure中的日志

4、配置虚拟用户具有不同的访问权限(目前只具有下载的权限)
  # 配置介绍
    vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,
    每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,
    只需要在vsftpd.conf指定其路径及名称即可。
  # 配置vsftpd为虚拟用户使用配置文件目录
  shell> vim /etc/vsftpd/vsftpd.conf
    添加如下选项:
    user_config_dir=/etc/vsftpd/vusers_dir
  # 创建所需要目录,并为虚拟用户提供配置文件
  shell> mkdir /etc/vsftpd/vusers_dir/
  shell> cd /etc/vsftpd/vusers_dir/
  shell> touch tom
  # 配置虚拟用户的访问权限
    虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的. 比如, 如果需要让tom用户具有上传文件的权限,
    可以修改/etc/vsftpd/vusers/tom文件,在里面添加如下选项即可:anon_upload_enable=YES
    如果使其可以创建文件需要开启anon_mkdir_write_enable=YES.
    如果使其可以删除文件需要开启anon_other_write_enable=YES.
    所有选项和匿名用户选项一致.
  # 配置各个权限后可以使用FlashFXP连接测试

 

  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值