• vsftpd搭建ftp服务,并实现虚拟用户访问


    安装vsftpd服务:

    yum install vsftpd -y
    [root@wadeson ~]# rpm -ql vsftpd
    /etc/logrotate.d/vsftpd
    /etc/pam.d/vsftpd
    /etc/rc.d/init.d/vsftpd
    /etc/vsftpd
    /etc/vsftpd/ftpusers
    /etc/vsftpd/user_list
    /etc/vsftpd/vsftpd.conf
    /etc/vsftpd/vsftpd_conf_migrate.sh
    /usr/sbin/vsftpd
    启动vsftpd服务:
    [root@wadeson ~]# service vsftpd start
    Starting vsftpd for vsftpd: [ OK ]
    [root@wadeson ~]# lsof -i :21
    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    vsftpd 32465 root 3u IPv4 249471 0t0 TCP *:ftp (LISTEN)
    然后进行访问:
    这里的pub目录实际是linux的/var/ftp/pub目录:
    [root@wadeson tools]# cp php-5.6.30.tar.bz2 /var/ftp/pub/
    [root@wadeson tools]# ll /var/ftp/pub/
    total 14660
    -rw-r--r--. 1 root root 15011816 Jul 11 22:11 php-5.6.30.tar.bz2
    [root@wadeson tools]#
    然后刷新网页:
    访问的时候是使用的匿名用户,默认配置文件中匿名用户是启用的:
    anonymous_enable=YES
    现在将匿名用户取消:
    anonymous_enable=NO
    重启服务:
    [root@wadeson tools]# service vsftpd restart
    Shutting down vsftpd: [ OK ]
    Starting vsftpd for vsftpd: [ OK ]
    然后再次访问网页:

    使用本地用户登陆:

    # Uncomment this to allow local users to log in.
    local_enable=YES          这句意思是可以用系统上已经存在的用户登陆ftp
    [root@wadeson tools]# id wadeson
    uid=500(wadeson) gid=500(wadeson) groups=500(wadeson)
    默认登陆进来的是用户自己的家目录:

    可以随意切换到任意目录

    当然用户也可以在命令行登陆ftp:
    首先安装ftp客户端命令:yum install ftp -y
    [root@wadeson tools]# ftp 192.168.23.129
    Connected to 192.168.23.129 (192.168.23.129).
    220 (vsFTPd 2.2.2)
    Name (192.168.23.129:root): wadeson
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> pwd
    257 "/home/wadeson"
    ftp>
     
     
    现在打开匿名登陆,并且开启匿名用户有上传和write的权限:
    anonymous_enable=YES
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES

    [root@wadeson vsftpd]# service vsftpd restart
    Shutting down vsftpd: [ OK ]
    Starting vsftpd for vsftpd: [ OK ]
    [root@wadeson vsftpd]# ftp 127.0.0.1
    Connected to 127.0.0.1 (127.0.0.1).
    220 (vsFTPd 2.2.2)
    Name (127.0.0.1:root): ftp                 匿名用户使用ftp就可以,密码为空

    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    227 Entering Passive Mode (127,0,0,1,70,12).
    150 Here comes the directory listing.
    drwxr-xr-x 2 0 0 4096 Jul 11 14:11 pub
    drwxr-xr-x 4 14 50 4096 Jul 12 01:01 test
    226 Directory send OK.
    ftp> cd test
    250 Directory successfully changed.
    ftp> put /etc/inittab
    local: /etc/inittab remote: /etc/inittab
    227 Entering Passive Mode (127,0,0,1,103,252).
    553 Could not create file.
    ftp>

    可以看出还是不能上传,但是可以创建文件

    ftp> mkdir test02
    257 "/test/test02" created

    为啥可以创建文件,是因为在test目录下面的权限为:

    [root@wadeson ftp]# ll test/
    total 528
    -rw-------. 1 ftp ftp 521169 Jul 12 09:00 2016-5.7z
    drwx------. 2 ftp ftp 4096 Jul 12 09:00 test
    drwx------. 2 ftp ftp 4096 Jul 12 09:01 test01
    drwx------. 2 ftp ftp 4096 Jul 12 10:37 test02
    -rw-------. 1 ftp ftp 1806 Jul 11 23:02 Tsgateway.RDP

    现在使用ftp客户端工具匿名用户登陆:

    可以看出这种情况下可以传输成功,但是ftp命令行下面一直却失败

    现在将匿名的设置全部关闭掉,使用本地作限制:

    [root@wadeson vsftpd]# ftp 127.0.0.1
    Connected to 127.0.0.1 (127.0.0.1).
    220 (vsFTPd 2.2.2)
    Name (127.0.0.1:root): wadeson
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    227 Entering Passive Mode (127,0,0,1,244,146).
    150 Here comes the directory listing.
    226 Directory send OK.
    ftp> pwd
    257 "/home/wadeson"
    ftp> put /etc/inittab
    local: /etc/inittab remote: /etc/inittab
    227 Entering Passive Mode (127,0,0,1,125,218).
    553 Could not create file.                       这种方式传输文件还是不行
    ftp> mkdir test
    257 "/home/wadeson/test" created
    ftp> ls
    227 Entering Passive Mode (127,0,0,1,141,36).
    150 Here comes the directory listing.
    drwxr-xr-x 2 500 500 4096 Jul 12 02:44 test
    226 Directory send OK.

    但是这种方式传输又可以:

    本地用户登陆可以随意切换目录,现在将它限制一下,只能在自己家目录访问:

    只需要将chroot_local_user=YES这一行启用:

    [root@wadeson vsftpd]# service vsftpd restart
    Shutting down vsftpd: [ OK ]
    Starting vsftpd for vsftpd: [ OK ]
    [root@wadeson vsftpd]# ftp 127.0.0.1
    Connected to 127.0.0.1 (127.0.0.1).
    220 (vsFTPd 2.2.2)
    Name (127.0.0.1:root): wadeson
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    227 Entering Passive Mode (127,0,0,1,71,18).
    150 Here comes the directory listing.
    -rw-r--r-- 1 500 500 521169 Jul 07 04:21 2016-5.7z
    drwxr-xr-x 2 500 500 4096 Jul 12 02:44 test
    226 Directory send OK.
    ftp> cd /var
    550 Failed to change directory.

    现在将本地的用户切换目录做限制,哪些可以切换哪些不能切换:

    将配置文件做如下修改:

    #chroot_local_user=YES
    chroot_list_enable=YES                 启用列表文件中的本地用户不能切换目录
    # (default follows)
    chroot_list_file=/etc/vsftpd/chroot_list        将本地用户存在这个文件列表中,这个文件中存储了wadeson这个用户

    现在进行测试:

    root@wadeson vsftpd]# chmod 600 chroot_list
    [root@wadeson vsftpd]# service vsftpd restart
    Shutting down vsftpd: [ OK ]
    Starting vsftpd for vsftpd: [ OK ]
    [root@wadeson vsftpd]# ftp 127.0.0.1
    Connected to 127.0.0.1 (127.0.0.1).
    220 (vsFTPd 2.2.2)
    Name (127.0.0.1:root): wadeson
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    227 Entering Passive Mode (127,0,0,1,223,113).
    150 Here comes the directory listing.
    -rw-r--r-- 1 500 500 521169 Jul 07 04:21 2016-5.7z
    drwxr-xr-x 2 500 500 4096 Jul 12 02:44 test
    226 Directory send OK.
    ftp> pwd
    257 "/"
    ftp> cd /var
    550 Failed to change directory.

    然后更换一个本地用户:

    [root@wadeson vsftpd]# ftp 127.0.0.1
    Connected to 127.0.0.1 (127.0.0.1).
    220 (vsFTPd 2.2.2)
    Name (127.0.0.1:root): test
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    227 Entering Passive Mode (127,0,0,1,186,236).
    150 Here comes the directory listing.
    226 Directory send OK.
    ftp> pwd
    257 "/home/test"
    ftp> cd /var/
    250 Directory successfully changed.
    ftp> pwd
    257 "/var"

    发现可以随意切换目录,现在目的已经成功了

    现在将本地用户做限制,一部分可以登陆ftp,一部分不能登陆:

    配置如下:

    userlist_enable=YES
    userlist_deny=YES
    userlist_file=/etc/vsftpd/user_list       在该文件中的本地用户都不能登陆ftp

    # If userlist_deny=YES (default), never allow users in this file, and
    # do not even prompt for a password.

    向里面新增用户wadeson

    然后测试:

    [root@wadeson vsftpd]# service vsftpd restart
    Shutting down vsftpd: [ OK ]
    Starting vsftpd for vsftpd: [ OK ]
    [root@wadeson vsftpd]# ftp 127.0.0.1
    Connected to 127.0.0.1 (127.0.0.1).
    220 (vsFTPd 2.2.2)
    Name (127.0.0.1:root): wadeson
    530 Permission denied.
    Login failed.

    而另外一个刚刚创建的test用户依然可以登陆:

    [root@wadeson vsftpd]# ftp 127.0.0.1
    Connected to 127.0.0.1 (127.0.0.1).
    220 (vsFTPd 2.2.2)
    Name (127.0.0.1:root): test
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> pwd
    257 "/home/test"

    如果将userlist_deny=YES改为NO那么该/etc/vsftpd/user_list 中的本地用户可以登陆,没有存进去的用户则不能登陆

    现在开始配置基于虚拟用户登陆的机制:

    总共有七个步骤:

    1、建立虚拟ftp用户的账号数据库文件

    2、创建ftp根目录及虚拟用户映射的系统用户

    3、建立支持虚拟用户的PAM认证文件

    4、在vsftpd.conf文件中添加支持配置

    5、为个别虚拟用户建立独立的配置文件

    6、重新加载vsftpd配置

    7、使用虚拟ftp账户访问测试

    开始操作第一步:

    1、建立虚拟ftp用户的账号数据库文件

    建立虚拟账户的账户名和密码列表

    [root@wadeson vsftpd]# vim vuser.txt

    admin     账号
    12345    密码
    test     账号
    12345    密码

    将账号密码列表文件转化为db:

    [root@wadeson vsftpd]# db_load -T -t hash -f vuser.list vuser.db

    修改两个文件的权限:

    [root@wadeson vsftpd]# chmod 600 vuser.*

    -rw-------. 1 root root 12288 Jul 12 11:19 vuser.db
    -rw-------. 1 root root 40 Jul 12 11:14 vuser.txt

    2、创建ftp根目录及虚拟用户映射的系统用户

    [root@wadeson ~]# mkdir /var/ftproot

    drwxr-xr-x.  2 root root 4096 Jul 12 11:21 ftproot

    创建一个系统用户用来被虚拟用户映射使用:

    [root@wadeson var]# useradd -d /var/ftproot/ -s /sbin/nologin ftpuser    系统用户ftpuser
    useradd: warning: the home directory already exists.
    Not copying any file from skel directory into it.
    [root@wadeson var]# cat /etc/passwd

    ftpuser:x:502:502::/var/ftproot/:/sbin/nologin

    [root@wadeson var]# chown ftpuser:ftpuser /var/ftproot/

    drwxr-xr-x.  2 ftpuser ftpuser 4096 Jul 12 11:21 ftproot

    3、建立支持虚拟用户的PAM认证文件

    [root@wadeson var]# cd /etc/pam.d/

    [root@wadeson pam.d]# vim vsftpd.vu

    auth required pam_userdb.so db=/etc/vsftpd/vuser
    account required pam_userdb.so db=/ets/vsftpd/vuser

    4、在vsftpd.conf文件中添加支持配置

    pam_service_name=vsftpd.vu
    guest_enable=YES
    guest_username=ftpuser

    整个vsftpd.conf的配置内容:

    anonymous_enable=NO
    local_enable=YES
    #write_enable=NO
    dirmessage_enable=YES
    xferlog_enable=YES
    xferlog_file=/var/log/vsftpd.log
    connect_from_port_20=YES
    xferlog_std_format=YES
    listen=YES
    listen_port=21
    userlist_enable=YES
    chroot_local_user=YES
    tcp_wrappers=YES
    guest_enable=YES
    guest_username=ftpuser     (如果系统上没有该用户,需要创建)
    pam_service_name=vsftpd.vu
    user_config_dir=/etc/vsftpd/vsftpd_user_conf
    virtual_use_local_privs=YES
    pasv_min_port=50000
    pasv_max_port=60000
    pasv_enable=yes
    max_clients=200
    max_per_ip=4
    idle_session_timeout=600
    ftpd_banner=Welcome to opendoc FTP service.

    将虚拟用户映射到本地用户,那么本地用户还是要支持访问ftp
    local_enable=YES必须启用
    5、为个别虚拟用户建立独立的配置文件
    [root@wadeson vsftpd]# mkdir /etc/vsftpd/vsftpd_user_conf
    [root@wadeson vsftpd]# vim vsftpd_user_conf/admin

    write_enable=YES
    anonymous_enable=NO
    anon_world_readable_only=NO
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    local_umask=022
    download_enable=Yes
    local_root=/var/ftproot        配置了chroot不能随意切换目录,整个admin虚拟用户权限为可创建可删除,可上传,可下载

    配置另一个test用户:         该用户只能下载

    write_enable=NO 
    anon_world_readable_only=NO
    anon_upload_enable=NO
    anon_mkdir_write_enable=NO
    anon_other_write_enable=NO
    local_umask=022
    download_enable=yes
    local_root=/var/ftproot
  • 相关阅读:
    ORA-02020 : 过多的数据库链接在使用中-Windows环境解决步骤
    <转载>c++中new一个二维数组
    C C++输出格式 <转载>仅用于个人
    *p 和p[i] 区别
    Const *ptr ptr
    C 格式化的输入输出(printf scanf)
    PP 各种快捷键
    【Java并发工具类】原子类
    【Java并发工具类】Java并发容器
    【Java并发工具类】CountDownLatch和CyclicBarrier
  • 原文地址:https://www.cnblogs.com/jsonhc/p/7155721.html
Copyright © 2020-2023  润新知