• Linux vsftpd服务配置以及三种验证方式以及常见错误解决办法


    文件传输协议(FTP):

      文件传输协议(FTP,File Transfer Protocol),即能够让用户在互联网中上传、下载文件的文件协议,而FTP服务器就是支持FTP传输协议的主机,要想完成文件传输则需要FTP服务端和FTP客户端的配合才行。

      通常用户使用FTP客户端软件向FTP服务器发起连接并发送FTP指令,服务器收到用户指令后将执行结果返回客户端。

    FTP协议占用两个端口号:

    21端口:命令控制,用于接收客户端执行的FTP命令。

    20端口:数据传输,用于上传、下载文件数据。

    FTP数据传输的类型:

    主动模式:FTP服务端主动向FTP客户端发起连接请求。

    被动模式:FTP服务端等待FTP客户端的连接请求。

    Vsftpd的主程序与配置文件

    主程序:/usr/sbin/vsftpd

    用户禁止登陆列表:/etc/vsftpd/ftpusers  /etc/vsftpd/user_list

    主配置文件:/etc/vsftpd/vsftpd.conf

                             

    vsftpd程序配置文件参数的作用:

     

     一、匿名访问模式

    匿名访问:任何人无需验证口令即可登入FTP服务端。

    FTP匿名访问模式是比较不安全的服务模式,尤其在真实的工作环境中千万不要存放敏感的数据,以免泄露。

    第1步:安装完vsftpd服务后,打开服务查看服务状态。

    第2步:vsftpd程序默认已经允许匿名访问模式,我们要做的就是开启匿名用户的上传和写入权限,写入下面的参数:

     修改完后重启服务。

    第3步:在物理机上输入输入ftp://+ip查看

    但是进去之后是空的,物理机上无对文件操作的权限,需要在虚拟机改一下权限。

    也可以在另一台虚拟机终端用ftp命令+IP去访问,但是匿名用户无写入等权限,需要把所有者修改为ftp(chown ftp /var/ftp/pub )

    [root@linuxprobe ~]# ftp 192.168.2.100       #这里指作为服务器的虚拟机IP

    Connected to 192.168.10.10 (192.168.10.10).

    220 (vsFTPd 3.0.2)

    Name (192.168.10.10:root): anonymous

    331 Please specify the password.

    Password:敲击回车

    230 Login successful.

    Remote system type is UNIX.

    Using binary mode to transfer files.

    ftp>cd pub

    250 Directory successfully changed.

    ftp>mkdir files

    257 "/pub/files" created

    ftp>rename files database

    350 Ready for RNTO.

    250 Rename successful.

    ftp>rmdir database

    250 Remove directory operation successful.

    ftp>exit

    221 Goodbye.

     这里在客户端里去pub下创建文件夹会报错,比如550,因为服务器中pub文件夹没有给其他用户写的权限也或者是没有关闭selinux。

    找到ftp/pub 更改权限

     如果是selinux的问题,做如下更改 vim /etc/selinux/config 更改玩后需要重启虚拟机。或者用setenforce 0命令关闭selinux就可以不用重启虚拟机。

    二、本地用户模式

    本地用户模式确实要比匿名访问模式更加的安全,所以本实验中会关闭匿名访问模式。

    vsftpd服务程序默认已经允许本地用户模式,我们要做的是添加设置本地用户模式权限的参数:

    [root@linuxprobe ~]# vim /etc/vsftpd/vsftpd.conf

    参数

    作用

    anonymous_enable=NO

    禁止匿名访问模式。

    local_enable=YES

    允许本地用户模式。

    write_enable=YES

    设置可写入权限。

    local_umask=022

    本地用户模式创建文件的umask值。

    userlist_deny=YES

    参数值为YES即禁止名单中的用户,参数值为NO则代表仅允许名单中的用户。

    userlist_enable=YES

    允许“禁止登陆名单”,名单文件为ftpusers与user_list。

    确认填写正确后保存并退出vsftpd.conf文件,然后重启vsftpd服务程序并设置为开机自启动。

    [root@linuxprobe ~]# systemctl restart vsftpd
    [root@linuxprobe ~]# systemctl enable vsftpd

    如果重启vsftpd服务程序时没有报错,此时便可以使用FTP客户机(192.168.2.100)尝试登入FTP服务了~

    我们先来看下ftpusersuser_list文件中禁止登陆用户名单:

    root
    bin
    daemon
    adm
    lp
    sync
    shutdown
    halt
    mail
    news
    uucp
    operator
    games
    nobody

    root用户是禁止登录的,所以需要在服务器新建一个普通用户然后切换到客户端用普通用户的账号密码登录ftp服务器。我这里新建的用户为zzw

    [root@linuxprobe ~]# ftp 192.168.2.100

    Connected to 192.168.2.100 (192.168.2.100).

    220 (vsFTPd 3.0.2)

    Name (192.168.10.10:root): zzw           #新建的用户

    331 Please specify the password.

    Password:输入新建用户本地密码

    230 Login successful.

    Remote system type is UNIX.

    Using binary mode to transfer files.

    ftp>mkdir files

    257 "/home/linuxprobe/files" created

    ftp>rename files database

    350 Ready for RNTO.

    250 Rename successful.

    ftp>rmdir database

    250 Remove directory operation successful.

    ftp>exit

    221 Goodbye.

     

    三、虚拟用户模式

    因为虚拟用户模式的帐号口令都不是真实系统中存在的,所以只要配置妥当虚拟用户模式会比本地用户模式更加安全,但是Vsftpd服务配置虚拟用户模式的操作步骤相对复杂一些,具体流程如下:

    第1步:建立虚拟FTP用户数据库文件。

    第2步:创建FTP根目录及虚拟用户映射的系统用户。

    第3步:建立支持虚拟用户的PAM认证文件。

    第4步:在vsftpd.conf文件中添加支持配置。

    第5步:为虚拟用户设置不同的权限。

    第6步:重启vsftpd服务,验证实验效果。

     

    第1步:建立虚拟FTP用户数据库文件。

    切换至vsftpd程序目录:

    [root@linuxprobe ~]# cd /etc/vsftpd/

    创建用于生成FTP用户数据库的原始帐号和密码文件:

    [root@linuxprobe vsftpd]# vim vuser.list

    //单数行为帐号,双数行为密码。

    linuxprobe

    pa33w0rd

    blackshield

    pa22w1rd

    使用db_load命令用HASH算法生成FTP用户数据库文件vuser.db:

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

    查看数据库文件的类型:

    [root@linuxprobe vsftpd]# file vuser.db

    vuser.db: Berkeley DB (Hash, version 9, native byte-order)

    FTP用户数据库内容很敏感,所以权限给小一些:

    [root@linuxprobe vsftpd]# chmod 600 vuser.db

    删除原始的帐号和密码文件:

    [root@linuxprobe vsftpd]# rm -f vuser.list

     

    第2步:创建FTP根目录及虚拟用户映射的系统用户。

     

    创建用户virtual并设置为不允许登陆系统并定义该用户的家目录:

    [root@linuxprobe ~]# useradd -d /var/ftproot -s /sbin/nologin virtual

    查看该用户的家目录权限:

    [root@linuxprobe ~]# ls -ld /var/ftproot/

    drwx------. 3 virtual virtual 74 Jul 14 17:50 /var/ftproot/

    为保证其他用户可以访问,给予rwxr-xr-x权限:

    [root@linuxprobe ~]# chmod -Rf 755 /var/ftproot/

     

    第3步:建立支持虚拟用户的PAM认证文件:

     

    [root@linuxprobe ~]# vim /etc/pam.d/vsftpd.vu

    //参数db用于指向刚刚生成的vuser.db文件,但不要写后缀。

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

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

     

    第4步:在vsftpd.conf文件中添加支持配置。

    既然要使用虚拟用户模式,而虚拟用户模式确实要比匿名访问模式更加的安全,配置的同时也关闭匿名开放模式。

    [root@linuxprobe ~]# vim /etc/vsftpd/vsftpd.conf

     

    参数

    作用

    anonymous_enable=NO

    禁止匿名开放模式。

    local_enable=YES

    允许本地用户模式。

    guest_enable=YES

    开启虚拟用户模式。

    guest_username=virtual

    指定虚拟用户帐号。

    pam_service_name=vsftpd.vu

    指定pam文件。

    allow_writeable_chroot=YES

    允许禁锢的FTP根目录可写而不拒绝用户登入请求。

     

    第5步:为虚拟用户设置不同的权限


    现在不论是zzw1还是zzw2帐户,他们的权限都是相同的——默认不能上传、创建、修改文件,如果希望用户zzw2能够完全的管理FTP内的资料,就需要让FTP程序支持独立的用户权限配置文件了:
    指定用户独立的权限配置文件存放的目录:

    [root@linuxprobe ~]# vim /etc/vsftpd/vsftpd.conf

    user_config_dir=/etc/vsftpd/vusers_dir

    创建用户独立的权限配置文件存放的目录:

    [root@linuxprobe ~]# mkdir /etc/vsftpd/vusers_dir/

    切换进入到该目录中:

    [root@linuxprobe ~]# cd /etc/vsftpd/vusers_dir/

    创建空白的zzw1的配置文件:

    [root@linuxprobe vusers_dir]# touch zzw1

    指定zzw2用户的具体权限:

    [root@linuxprobe vusers_dir]# vim zzw2

    anon_upload_enable=YES

    anon_mkdir_write_enable=YES

    anon_other_write_enable=YES

     

    第6步:重启vsftpd服务,验证实验效果。

    确认填写正确后保存并退出vsftpd.conf文件,重启vsftpd程序并设置为开机后自动启用:

    [root@linuxprobe ~]# systemctl restart vsftpd
    [root@linuxprobe ~]# systemctl enable vsftpd

    [root@linuxprobe ~]# ftp 192.168.2.100

    Connected to 192.168.2.100

    220 (vsFTPd 3.0.2)

    Name (192.168.10.10:root): zzw2

    331 Please specify the password.

    Password:此处输入虚拟用户的密码

    230 Login successful.

    Remote system type is UNIX.

    Using binary mode to transfer files.

    ftp>mkdir files

    257 "/files" created

    ftp>rename files database

    350 Ready for RNTO.

    250 Rename successful.

    ftp>rmdir database

    250 Remove directory operation successful.

    ftp>exit

    221 Goodbye.

    使用zzw1用户创建(肯定会报错):

    [root@linuxprobe ~]# ftp 192.168.2.100

    Connected to 192.168.2.100

    220 (vsFTPd 3.0.2)

    Name (192.168.10.10:root): zzw1

    331 Please specify the password.

    Password:此处输入虚拟用户的密码

    230 Login successful.

    Remote system type is UNIX.

    Using binary mode to transfer files.

    ftp>mkdir files

    550 Permission denied.

    ftp>exit

    221 Goodbye.

     

    tip:如果在客户端ftp连接服务器时出现500错误找不到用户的话,需要看一下第一步中vuser.list文件中有没有敲错东西。

  • 相关阅读:
    AIBigKaldi(十三)| Kaldi的三音子模型训练(下)(源码解析)
    AIBigKaldi(十二)| Kaldi的三音子模型训练(中)(源码解析)
    AIBigKaldi(十一)| Kaldi的三音子模型训练(上)(源码解析)
    AIBigKaldi(十)| Kaldi的thchs30实例(源码解析)
    AIBigKaldi(九)| Kaldi的解码搜索(源码解析)
    AIBigKaldi(八)| Kaldi的解码图构造(下)(源码解析)
    AIBigKaldi(七)| Kaldi的解码图构造(上)(源码解析)
    AIBigKaldi(六)| Kaldi的单音子模型训练(下)(源码解析)
    AIBigKaldi(五)| Kaldi的单音子模型训练(上)(源码解析)
    理解 Linux 的硬链接与软链接
  • 原文地址:https://www.cnblogs.com/Zh1z3ven/p/11780775.html
Copyright © 2020-2023  润新知