• vsftpd架设(配置pam模块)


    Vsftpd 是很安全的ftp软件

    VSFTPD的目录结构

    /usr/sbin/vsftpd: VSFTPD的可执行文件

    /etc/rc.d/init.d/vsftpd:启动脚本

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

    /etc/pam.d/vsftpd:PAM认证文件

    /etc/vsftpd.ftpusers:禁用使用VSFTPD的用户列表文件

    /etc/vsftpd.user_list:禁止或允许使用VSFTPD的用户列表文件

    /var/ftp:匿名用户主目录

    一,安装vsftpd

     sudo aptitude install vsftpd

    二,配置

    注意,等号“=”两边不能有空格

    1,备份主配置表

    sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup

    然后打开此配置表,

    sudo gedit /etc/vsftpd.conf

     ctrl+f 找到

    anonymous_enable=YES 

    # 是否允许匿名FTP访问。

    local_enable=YES

    # 是否允许本地用户访问,这里虚拟用户也是本地用户

    write_enable=YES 

    #是否允许所有用户都上传文件

    local_umask=027

    # vsftpd的默认umask是077,即,屏蔽除了创建者以外所有的用户的权限,如果觉得这样没必要,可以设置为022,这样其他用户可读。

    anon_upload_enable=YES

    #是否允许匿名用户上传

    ftpd_banner=Welcome to blah FTP service

    # 用户连接后看到的欢迎信息

    pam_service_name=vsftpd

    # PAM 服务名称,这里的设置决定PAM将为vsftpd使用配置文件

    #/etc/pam.d/vsftpd

    除了local_enable和ftpd_banner 之外,其他设置都很好地适应我们的需求,因此不需改动。

     

    虚拟用户和真实用户?

    真实用户,是在这台机器上登录的用户,比如安装系统时的用户。

    虚拟用户,是创立的用户,只能登录ftp,而不能登录系统,不是系统的用户。这样比较安全。

    为了使用虚拟用户,还需要加入以下设置:

     

    guest_enable=YES

     

    guest_username=ftp

     

    user_config_dir=/etc/vsftpd_user_conf

    这样使虚拟用户在系统中具有系统用户使用ftp的权限。系统用户ftp无法在终端登录,他是FTP服务目录的拥有者,最后一行为今后服务,是配置用户的目录。

    4,配置PAM模块

       由于安全考虑,不希望vsftpd共享本地系统的用户认证信息,而采用自己独立的用户认证数据库来认证虚拟用户。这样,虚拟用户和真是的用户不必采用相同的用户名和口令。

       和linux下面大多数需要用户认证的程序一样,vsftpd也采用PAM作为后端,可插拔的认证模块来集成各种不同的认证方式。

       在这里,可以通过修改vsftpdPAM配置文件

    /etc/pam.d/vsftpd来决定vsftpd使用何种认证方式,

    可以是本地系统的真实用户认证(模块pam_unix),也可以是独立的用户认证数据库(模块pam_userdb,也可以是网络上的LDAP数据库(模块pam_ldap)等。所有这些模块都存放在/lib/security/目录(对AMD64则是/lib64/security/)下。

          这里采用pam_userdb模块,该模块采用独立的Berkeley DB 格式(Berkeley DB 是 Unix平台最常见的数据持久化格式,有各种版本,这里假设系统采用4.6版本)的用户认证数据库。为了建立Berkeley Db式的数据库,需要安装db4.6-util 软件包。

    $ sudo aptitude install db4.6-util 

    建立一个db 格式数据库的一般方式是先编辑一个文本文件,将键值和对应的数据写在相邻的行中。比如下面,我建立logins.txt的文档,内容如下:

    upo 

    magic

    longxibendi

    1234

    根据pam_userdb 模块的约定,键值就是用户名,对应的数据则是口令。所以,这个文本文档中的奇数行为用户名,用户名的下一行就是其对应的口令。

    下面将文档logins.txt转换为berkeley Db格式,并使他对应用户为不可读:

    sudo db4.6_load -T -t hash -f logins.txt /etc/vsftpd_login.db

    sudo chmod 600 /etc/vsftpd_login.db

    rm logins.txt #这是删除logins.txt文档

     

    然后编辑 /etc/pam.d/vsftpd

    注释掉或者删除掉原有的所有内容,

    加入这几行:

    # /etc/pam.d/vsftpd

     

    auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login

     

    account required /lib/security/pam_userdb.so db=/etc/vsftpd_login

    PAM采用相应的认证模块和刚刚建立的用户数据库。

    重新启动 vsftpd之后,虚拟用户设置就生效了。

    sudo invoke-rc.d vsftpd restart

    至此,用户upo 或者 longxibendi 已经可以用相应的用户名和口令登录FTP了。 

    5,分用户设置

    上面设置了两个用户分别是upolongxibendi

    接下来相让upo 可以上传文件,但是不希望longxibendi也有同样的权限 ,借助vsftpd提供的分用户 设置机制,可以容易的做到这一点。

      上文,已经在/etc/vsftpd.conf 中加入了

    user_config_dir 设置,现在只需建立相应的目录,并在该目录下增加用户upo的配置文件即可:

    代码:

    sudo mkdir /etc/vsftpd_user_conf 

    #建立文件夹,在/etc/下,名字是#vsftpd_user_conf

    #这样才可以与上面的配置相对应。

    代码:

    sudo sh -c “echo 'write_enable=YES' > /etc/vsftpd_user_conf/upo”

    将 内容write_enable=YES 

    /etc/vsftpd_user_conf/upo

    而,write_enable=YES的意思是允许写操作

    代码:

    sudo sh -c “echo 'anno_upload_enable=YES' >> / /etc/vsftpd_user_conf/upo

    按行,也就是为什么要用‘>> /’

    # anno_upload_enable=YES写 

    /etc/vsftpd_user_conf/upo 

    # anno_upload_enable=YES 允许用户上传

    代码:

    sudo sh -c “echo 'anno_mkdir_write_enable=YES' >> / /etc/vsftpd_user_conf/upo”

    也是写入...内容到...

    # anno_mkdir_write_enable=YES 意思是

    允许建立文件夹

    如果允许用户upo删除和重命名文件(不建议)

    执行:

    sudo sh -c “echo 'anon_other_write_enable=YES' >> / /etc/vsftpd_user_conf/upo”

    然后运行下面的命令,让vsftpd读入新配置

    代码:

    sudo invoke-rc.d vsftpd reload

    现在用户upo 可以上传文件了,作为站点管理员,可能希望文件只能被上传到限定的目录,所以运行下面:

    sudo mkdir /home/ftp/incoming

    建立文件夹incoming /home/ftp/

    sudo chown ftp:nogroup incoming

    sudo chmod 770 /home/ftp/incoming 

    sudo chmod -w /home/ftp

    上面的命令是配置文家夹的属性

        这样,目录/home/ftpftp用户,也就是隐藏在所有虚拟用户背后的真实用户不可写了,因此上传到/home/ftp不会成功。

        注意,上面的例子中屏蔽了一般用户对/home/ftp/incoming 的访问权限,这样做是为了利用vsftpd的一个副作用。

         在默认的情况下,虚拟用户只能读取,或者下载对于任何用户都可读的文件和目录。上面的设置使虚拟用户无法列出目录 /home/ftp/incoming 下的文件,通常这是一个不错的特性。另一方面,通常,会希望upo用户,也可以看到自己上传的文件,为此可以运行如下命令:

    代码:

    sudo sh -c “echo 'anno_world_readable_only=NO' >> / etc/vsftpd_user_conf/upo”

    ... 写入...文档

    # anno_world_readable_only=NO 意思是

    取消用户的只读限制,不加这句,用户不能查看自

    己上传的文件。

    代码:

    sudo killall -l vsftpd

    sudo /etc/init.d/vsftpd restart

    现在用户upo 可以看到/home/ftp/incoming 的内容了,完美主义者,可在/etc/vsftpd_user_conf/upo

    中加入下面两行

    local_umask=027 

    以彻底化副作用。

     

    6,注意:

    1),上面的添加文档内容的命令,可以用gedit 来完成。

    2),配置表中的''号两边不能有空格

    3),上面的关于/etc/vsftpd_user_conf/upo并没有配置下载权限,实际上默认是可以下载文件的。包括,我们并没有配置用户longxibendi的权限,但他也可以下载文件。

     

    7,下面是我的配置表:

    第一个/etc/vsftpd.conf

     

    # Example config file /etc/vsftpd.conf

     

    #

     

    # The default compiled in settings are fairly paranoid. This sample file

     

    # loosens things up a bit, to make the ftp daemon more usable.

     

    # Please see vsftpd.conf.5 for all compiled in defaults.

     

    #

     

    # READ THIS: This example file is NOT an exhaustive list of vsftpd options.

     

    # Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's

     

    # capabilities.

     

    #

     

    #

     

    # Run standalone?  vsftpd can run either from an inetd or as a standalone

     

    # daemon started from an initscript.

     

    listen=YES

     

    #

     

    # Run standalone with IPv6?

     

    # Like the listen parameter, except vsftpd will listen on an IPv6 socket

     

    # instead of an IPv4 one. This parameter and the listen parameter are mutually

     

    # exclusive.

     

    #listen_ipv6=YES

     

    #

     

    # Allow anonymous FTP? (Beware - allowed by default if you comment this out).

     

    anonymous_enable=YES

     

    #

     

    # Uncomment this to allow local users to log in.

     

    local_enable=YES

     

    #

     

    # Uncomment this to enable any form of FTP write command.

     

    write_enable=YES

     

    #

     

    # Default umask for local users is 077. You may wish to change this to 022,

     

    # if your users expect that (022 is used by most other ftpd's)

     

    local_umask=027

     

    #

     

    # Uncomment this to allow the anonymous FTP user to upload files. This only

     

    # has an effect if the above global write enable is activated. Also, you will

     

    # obviously need to create a directory writable by the FTP user.

     

    anon_upload_enable=YES

     

    #

     

    # Uncomment this if you want the anonymous FTP user to be able to create

     

    # new directories.

     

    #anon_mkdir_write_enable=YES

     

    #

     

    # Activate directory messages - messages given to remote users when they

     

    # go into a certain directory.

     

    dirmessage_enable=YES

     

    #

     

    # Activate logging of uploads/downloads.

     

    xferlog_enable=YES

     

    #

     

    # Make sure PORT transfer connections originate from port 20 (ftp-data).

     

    connect_from_port_20=YES

     

    #

     

    # If you want, you can arrange for uploaded anonymous files to be owned by

     

    # a different user. Note! Using "root" for uploaded files is not

     

    # recommended!

     

    #chown_uploads=YES

     

    #chown_username=whoever

     

    #

     

    # You may override where the log file goes if you like. The default is shown

     

    # below.

     

    xferlog_file=/var/log/vsftpd.log

     

    #

     

    # If you want, you can have your log file in standard ftpd xferlog format

     

    xferlog_std_format=NO

     

    #

     

    # You may change the default value for timing out an idle session.

     

    idle_session_timeout=600

     

    #

     

    # You may change the default value for timing out a data connection.

     

    data_connection_timeout=120

     

    #

     

    # It is recommended that you define on your system a unique user which the

     

    # ftp server can use as a totally isolated and unprivileged user.

     

    #nopriv_user=ftpsecure

     

    #

     

    # Enable this and the server will recognise asynchronous ABOR requests. Not

     

    # recommended for security (the code is non-trivial). Not enabling it,

     

    # however, may confuse older FTP clients.

     

    #async_abor_enable=YES

     

    #

     

    # By default the server will pretend to allow ASCII mode but in fact ignore

     

    # the request. Turn on the below options to have the server actually do ASCII

     

    # mangling on files when in ASCII mode.

     

    # Beware that on some FTP servers, ASCII support allows a denial of service

     

    # attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd

     

    # predicted this attack and has always been safe, reporting the size of the

     

    # raw file.

     

    # ASCII mangling is a horrible feature of the protocol.

     

    ascii_upload_enable=YES

     

    ascii_download_enable=YES

     

    #

     

    # You may fully customise the login banner string:

     

    ftpd_banner=Welcome to blah FTP service.

     

    #

     

    # You may specify a file of disallowed anonymous e-mail addresses. Apparently

     

    # useful for combatting certain DoS attacks.

     

    #deny_email_enable=YES

     

    # (default follows)

     

    #banned_email_file=/etc/vsftpd.banned_emails

     

    #

     

    # You may restrict local users to their home directories.  See the FAQ for

     

    # the possible risks in this before using chroot_local_user or

     

    # chroot_list_enable below.

     

    chroot_local_user=NO

     

    #

     

    # You may specify an explicit list of local users to chroot() to their home

     

    # directory. If chroot_local_user is YES, then this list becomes a list of

     

    # users to NOT chroot().

     

    #chroot_list_enable=YES

     

    # (default follows)

     

    #chroot_list_file=/etc/vsftpd.chroot_list

     

    #

     

    # You may activate the "-R" option to the builtin ls. This is disabled by

     

    # default to avoid remote users being able to cause excessive I/O on large

     

    # sites. However, some broken FTP clients such as "ncftp" and "mirror" assume

     

    # the presence of the "-R" option, so there is a strong case for enabling it.

     

    ls_recurse_enable=YES

     

    #

     

    #

     

    # Debian customization

     

    #

     

    # Some of vsftpd's settings don't fit the Debian filesystem layout by

     

    # default.  These settings are more Debian-friendly.

     

    #

     

    # This option should be the name of a directory which is empty.  Also, the

     

    # directory should not be writable by the ftp user. This directory is used

     

    # as a secure chroot() jail at times vsftpd does not require filesystem

     

    # access.

     

    secure_chroot_dir=/var/run/vsftpd

     

    #

     

    # This string is the name of the PAM service vsftpd will use.

     

    pam_service_name=vsftpd

     

    #

     

    # This option specifies the location of the RSA certificate to use for SSL

     

    # encrypted connections.

     

    rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem

     

    # This option specifies the location of the RSA key to use for SSL

     

    # encrypted connections.

     

    rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

     

     

     

    guest_enable=YES

     

    guest_username=ftp

     

    user_config_dir=/etc/vsftpd_user_conf

     

    第二个 /etc/pam.d/vsftpd

    #  # Standard behaviour for ftpd(8).

     

    #  auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed

     

     

     

    # Note: vsftpd handles anonymous logins on its own.  Do not enable

     

    # pam_ftp.so.

     

     

     

    # Standard blurb.

     

    # @include common-account

     

    # @include common-session

     

     

     

    # @include common-auth

     

    # auth required pam_shells.so

     

    上面的行,是原有的。

     

     

     

    # /etc/pam.d/vsftpd

     

    auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login

     

    account required /lib/security/pam_userdb.so db=/etc/vsftpd_login

     

    第三个 logins.txt

    upo

     

    magic

     

    longxibendi

     

    1234

    第四个 /etc/vsftpd_user_conf/upo

    write_enable=YES

     

    anon_upload_enable=YES

     

    anon_mkdir_write_enable=YES

     

    anon_world_readable_only=NO

     

    anon_other_write_enable=YES

     

    #上面这行是是否允许删除和重命名操作

     

    local_umask=027

     

     

     

     

     

     

     

     

     

     

     

     

    参考资料:

    Ubuntu实战技巧精粹》 何晓龙 编著 人邮出版社

    Ubuntu linux从入门到精通》 郝铃,李晓 编著

    http://forum.ubuntu.org.cn/viewtopic.php?f=54&t=117505

    http://doc.linuxpk.com/4233.html(推荐)

     

  • 相关阅读:
    linux下文件结束符
    【转】跟我学Kafka之NIO通信机制
    【转】 详解Kafka生产者Producer配置
    【转】项目延期的⑦大因素
    (转)EOSIO开发(三)钱包、账户与账户权限之概念篇
    CentOS里alias命令
    (转)EOSIO开发(一)使用Docker构建本地环境
    Marathon自动扩缩容(marathon-lb-autoscale)
    (转)Springboot日志配置(超详细,推荐)
    Spring Boot下的lombok安装以及使用简介
  • 原文地址:https://www.cnblogs.com/little-white/p/3757941.html
Copyright © 2020-2023  润新知