Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2343031
  • 博文数量: 535
  • 博客积分: 8689
  • 博客等级: 中将
  • 技术积分: 7066
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-26 10:00
文章分类

全部博文(535)

文章存档

2024年(4)

2023年(4)

2022年(16)

2014年(90)

2013年(76)

2012年(125)

2011年(184)

2010年(37)

分类: LINUX

2022-05-14 11:07:35




cat run-vsftpd.sh

#!/bin/bash

 

# If no env var for FTP_USER has been specified, use 'admin':

if [ "$FTP_USER" = "**String**" ]; then

    export FTP_USER='admin'

fi

 

# If no env var has been specified, generate a random password for FTP_USER:

if [ "$FTP_PASS" = "**Random**" ]; then

    export FTP_PASS=cat /dev/urandom | tr -dc A-Z-a-z-0-9 | head -c${1:-16}

fi

 

# Do not log to STDOUT by default:

if [ "$LOG_STDOUT" = "**Boolean**" ]; then

    export LOG_STDOUT=''

else

    export LOG_STDOUT='Yes.'

fi

 

# Create home dir and update vsftpd user db:

mkdir -p "/home/vsftpd/${FTP_USER}"

chown -R ftp:ftp /home/vsftpd/

 

echo -e "${FTP_USER}\n${FTP_PASS}" > /etc/vsftpd/virtual_users.txt

/usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db

 

# Set passive mode parameters:

if [ "$PASV_ADDRESS" = "**IPv4**" ]; then

    export PASV_ADDRESS=$(/sbin/ip route|awk '/default/ { print $3 }')

fi

 

echo "pasv_address=${PASV_ADDRESS}" >> /etc/vsftpd/vsftpd.conf

echo "pasv_max_port=${PASV_MAX_PORT}" >> /etc/vsftpd/vsftpd.conf

echo "pasv_min_port=${PASV_MIN_PORT}" >> /etc/vsftpd/vsftpd.conf

echo "pasv_addr_resolve=${PASV_ADDR_RESOLVE}" >> /etc/vsftpd/vsftpd.conf

echo "pasv_enable=${PASV_ENABLE}" >> /etc/vsftpd/vsftpd.conf

echo "file_open_mode=${FILE_OPEN_MODE}" >> /etc/vsftpd/vsftpd.conf

echo "local_umask=${LOCAL_UMASK}" >> /etc/vsftpd/vsftpd.conf

echo "xferlog_std_format=${XFERLOG_STD_FORMAT}" >> /etc/vsftpd/vsftpd.conf

echo "reverse_lookup_enable=${REVERSE_LOOKUP_ENABLE}" >> /etc/vsftpd/vsftpd.conf

 

# Get log file path

export LOG_FILE=grep xferlog_file /etc/vsftpd/vsftpd.conf|cut -d= -f2

 

# stdout server info:

if [ ! $LOG_STDOUT ]; then

cat << EOB

        *************************************************

        *                                               *

        *    Docker image: fauria/vsftpd                *

        *        *

        *                                               *

        *************************************************

 

        SERVER SETTINGS

        ---------------

        · FTP User: $FTP_USER

        · FTP Password: $FTP_PASS

        · Log file: $LOG_FILE

        · Redirect vsftpd log to STDOUT: No.

EOB

else

    /usr/bin/ln -sf /dev/stdout $LOG_FILE

fi

 

# Run vsftpd:

&>/dev/null /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf



















需求:需要2个ftp用户访问不同的根目录,其他的访问ftp默认目录。

2个用户为:test1、test2

首先安装vsftpd,然后配置文件如下:

vsftpd.conf:
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
ftpd_banner=”welcome test Ftp Server.”
pam_service_name=vsftpd  #设置PAM使用的名称,该名称就是/etc/pam.d/目录下vsfptd文件的文件名
userlist_enable=YES
tcp_wrappers=YES
local_root=/home/www/test/upload/
virtual_use_local_privs=YES
guest_enable=YES   #表示是否开启vsftpd虚拟用户的功能,yes表示开启,no表示不开启。
guest_username=www
user_config_dir=/etc/vsftpd/vuser_conf  #指定每个虚拟用户账号配置目录
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40080
pasv_promiscuous=YES
 
创建虚拟用户配置目录:
mkdir /etc/vsftpd/vuser_conf
 
创建虚拟用户文件,把这些用户名和密码存放在一个文件中。该文件内容格式是:用户名占用一行,密码占一行。如下:
[root@localhost vsftpd]# cat /etc/vsftpd/login.txt
test1
testone
test2
testtwo
 

这个文件的虚拟用户和密码的文本文件无法被系统帐号直接调用,所以我们需要使用db_load命令生成db口令数据库文件,命令如下:

db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db

为了使服务器能够使用上述生成的数据库文件,对客户端进行身份验证,需要调用系统的PAM模块。PAM(Plugable Authentication Module)为可插拔认证模块,不必重新安装应用系统,通过修改指定的配置文件,调整对该程序的认证方式。PAM模块配置文件路径为/etc/pam.d/目录,此目录下保存着大量与认证有关的配置文件,并以服务名称命名。

我们现在切换到/etc/pam.d/ 目录下,编辑vsfptd文件。如下图:

ftp

auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/login
 

auth是指对用户的用户名口令进行验证。

accout是指对用户的帐户有哪些权限哪些限制进行验证。

再后面的/lib64/security/pam_userdb.so表示该条审核将调用pam_userdb.so这个库函数进行。

注意该函数会根据系统的位数而所在位置不同。

如果是32bit系统,该文件所在位置是/lib/security/pam_userdb.so
如果是64bit系统,该文件所在位置是/lib64/security/pam_userdb.so
 
最后db=/etc/vsftpd/login则指定了验证库函数将到这个指定的数据库中调用数据进行验证。其实该文件指的是/etc/vsftpd/login.db文件。
 
注意:db=/etc/vsftpd/login格式是这样的,去掉.db后缀。
 
PAM配置完毕后,我们现在开始创建虚拟用户与系统用户对应的文件。切换到/etc/vsftpd/vuser_conf目录下,并创建test1文件。注意该文件名称一定要与login.txt中的虚拟用户要对应。比如现在login.txt文件有test1用户,那么在 /etc/vsftpd/vuser_conf目录下创建一个文件名为test1的文件。

[root@localhost vsftpd]# cat /etc/vsftpd/vuser_conf/test1

local_root=/home/www/test1/upload/   #表示使用本地用户登录到ftp时的默认目录
virtual_use_local_privs=YES   #虚拟用户和本地用户有相同的权限
guest_username=www   #表示的是设置FTP对应的系统用户为www
write_enable=YES
anon_umask=022
 
以上配置完毕后,启动vsftpd服务完成。
测试test1、test2 ftp用户均可以正常登录,对应的根目录不同,均有创建和删除、上传权限。
 
ftp虚拟用户,故不需要事先创建系统用户。
 
关于chroot:
    1. chroot_local_user
    2. chroot_list_enable
    3. chroot_list_file

可以通过如下两种方法来设置chroot,从而杜绝上述不安全的情况发生:

(1)设置所有的本地用户执行chroot,只要将/etc/vsftpd/vsftpd.con文件中的chroot_local_ user值置为YES,即             chroot_local_user=YES。

(2)设置指定的用户执行chroot,按照如下方法进行设置:

chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

设置后,只有/etc/vsftpd.chroot_list文件中指定的用户才能够执行chroot命令。

 
阅读(2186) | 评论(0) | 转发(0) |
0

上一篇:BGP的负载分担

下一篇:单向网闸原理

给主人留下些什么吧!~~