zoukankan      html  css  js  c++  java
  • [vsftpd] ubuntu14.04 ansible剧本安装vsftpd流程及报错排查

    需求:

    在ubuntu14.04机器上搭建ftp服务,ftp账号通过winscp软件登录后,仅可增删改/data/wwwroot目录。

    一、安装步骤

    1、apt 安装vsftpd

    apt-get install vsftpd

    2、设置ftp账号密码

    passwd ftp -s "ftp passwd"

    3、按需求更改/etc/vsftpd.conf

    listen=YES  #被动模式
    anonymous_enable=NO #不允许匿名用户登录FTP
    local_enable=YES  
    write_enable=YES
    local_umask=022
    dirmessage_enable=YES
    use_localtime=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    xferlog_file=/var/log/vsftpd.log
    ftpd_banner=Welcome to blah FTP service.
    chroot_local_user=YES
    local_root=/data/wwwroot
    chroot_list_file=/etc/vsftpd.chroot_list
    secure_chroot_dir=/var/run/vsftpd/empty
    pam_service_name=vsftpd
    userlist_enable=YES
    userlist_file=/etc/vsftpd.userlist  #仅供文件内的用户登录
    userlist_deny=NO
    pasv_enable=YES
    pasv_min_port=40000  #最小端口
    pasv_max_port=40050  #最大端口
    port_enable=YES
    #pasv_address=x.x.x.x
    #pasv_addr_resolve=NO
    allow_writeable_chroot=YES

    4、设置开放目录的权限和属主

    chown -R ftp:ftp /data/wwwroot
    chmod 755 /data/wwwroot

    5、重启vsftpd

    service vsftpd start

    6、本机测试

     如果报错则根据报错信息进行检测

    7、设置机器防火墙

    开放端口: 21、20、pasv_min_port - pasv_max_port

    8、winscp测试

    二、组织目录结构

    三、写ansible yaml剧本

    tasks/main.yaml

    ---
     - name: Apt-get vsftpd
       apt:
        name: vsftpd
        update_cache: yes
    
     - name: Change name of vsftpd.conf orignal
       shell: cp vsftpd.conf vsftpd.conf.orig -f
       args:
         chdir: /etc
         warn: no
    
     - name: Modify pam check mod
       shell: sed -i "s@pam_shells.so@pam_nologin.so@g" /etc/pam.d/vsftpd    #fix 503  Login incorrect
       
     - name: Copy configs
       copy: src=config/ dest=/etc/ owner=root group=root mode=644
    
     - name: Set ftp passwd
       user: name=ftp password={{ftp_pass | password_hash('sha512')}} update_password=always
    
     - name: Set dir mode
       file: path=/data/wwwroot/PapaSG2/  owner=ftp  group=ftp  mode='0644'
    
     - name: Start vsftpd
       service: name=vsftpd  state=started
    

      vsftpd.userlist

    ftp

    四、报错和解决方案

    1、无法登录

    1)检查账号、密码、防火墙、主目录

    防火墙需要将 21,asv_min_port - pasv_max_port 端口都开放

    主目录的权限需要设为755

    2、530 Login incorrect

    1)/etc/vsftpd.conf文件 将pam_service_name=vsftpd 修改为 pam_service_name=ftp

    绕过了PAM,其实并不对,同理是将/etc/pam.d/vdstpd重命名

    2)/etc/pam.d/vsftpd分析

    # Standard behaviour for ftpd(8).
    auth   required        pam_listfile.so item=user sense=deny file=/etc/ftpusers   @1
    onerr=succeed
    # Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.
    # Standard pam includes
    @include common-account
    @include common-session
    @include common-auth
    auth   required        pam_shells.so  @2
    

      @1:/etc/ftpusers 中的用户禁止登陆,如果文件不存在在默认所有用户均允许登录. 所以确保用户没在这个文件内

           @2:仅允许用户的shell为 /etc/shells 文件内的shell命令时,才能够成功。而创建ftp用户时,为了禁止ssh登录,一般多为/bin/false 、/usr/sbin/nologin 等,显然不是一个有效的bash,也就无法登录了。

    解决方案:

    确认ftp不在/etc/ftpusers, sed -i "s@pam_shells.so@pam_nologin.so@g" /etc/pam.d/vsftpd, 重启vsftpd

    3、vsftpd respawning too fast, stopped

    环境: ubuntu 12.04   vsftpd v2.3.5

    >service vsftpd start

    vsftpd start/pre-start, process 19503   #启动失败

    >tail /var/log/syslog -n 10

     

     >vsftpd  #不能启动的时候可以直接启动,方便定位原因

    500 OOPS: unrecognised variable in config file: allow_writeable_chroot
    >grep allow_writeable_chroot /etc/vsftpd.conf

    allow_writeable_chroot=YES

    >sed -i "@allow_writeable_chroot=YES@#allow_writeable_chroot=YES@g" /etc/vsftpd.conf

    >service vsftpd start

    vsftpd start/running, process 19652

    4、500 OOPS: child died

    500 OOPS: vsftpd: refusing to run with writable root inside chroot () 

    前者是默认报错,后者是更具体的报错,意思是不能使用chroot限制可写的根目录

    环境: ubuntu 12.04   vsftpd v2.3.5

    >ftp localhost

    Connected to localhost.
    220 Welcome to blah FTP service.
    Name (localhost:root):

    本来以为这样就Ok了,然后使用winscp去连接,却报错:500 OOPS: child died

    1)有的解决方案是说关闭selinux,或者是开启ftp_home_dir 或者 tftpd_disable_trans

    但是我使用的是云主机,本身selinux就是关闭的,基础项check过都是ok的

    2)vsftpd从v2.3.5版本开始,取消了根目录的可写权限

    看了下vsftpd的更新日志:

        Add stronger checks for the configuration error of running with a writeable root directory inside a chroot(). This may bite people who carelessly turned on chroot_local_user but such is life.

        解决方案A: > chmod a - w   /$local_root

        解决方案B:> echo "allow_writeable_chroot=YES"  >> /etc/vsftpd.conf

        A方案可行,可以将根目录包一层,不影响具体的业务使用

          local_root设置为test, nginx root 设为t, t目录权限设为可写

        B方案,vsftpd启动失败,会报3号错。

        但是网上也有说以下方案是ok的,也许是我这里安装vsftpd的问题。因为当前只需要可读就成了,就没往下测试。有兴趣的可以尝试下。

    $ apt-get install python-software-properties
    $ sudo add-apt-repository ppa:thefrontiergroup/vsftpd
    $ sudo apt-get update
    $ sudo apt-get install vsftpd
    $ vim /etc/vsftpd.conf and add the following
      chroot_local_user=YES
      allow_writeable_chroot=YES
    $ sudo service vsftpd restart

    参考文档:

    https://www.jianshu.com/p/91c7d4a115e0

  • 相关阅读:
    Java异常处理
    冒泡排序法
    21个项目-MNIST机器学习入门
    Hadoop集群搭建中ssh免密登录
    利用奇异值分解简化数据
    数据集中空值替换成对应特征的平均值
    PCA降维处理
    使用FP-growth算法高效发现频繁项集
    原生js---ajax---post方法传数据
    原生js---ajax---get方法传数据
  • 原文地址:https://www.cnblogs.com/faithfu/p/11498747.html
Copyright © 2011-2022 走看看