一步一步学会linux之四 :vsftpd的企业案例

论坛 期权论坛 脚本     
匿名技术用户   2021-1-6 17:41   39   0

一步一步学会linux之四 vsftpd的企业案例

为学校架设一个ftp服务器,普通学生通过账号ftp和密码123登陆,他只能下载不能上传;再为要提供资源的学生开设个账号vip密码123,上传资源通过管理员审核合格了再提供给学生下载,服务器要实现 ip限制(如限制外网访问)时间限制(如晚上12点到早上6点不能下载)

第一步:建立两个虚拟账号并生成数据库

[root@service root]# vi users.txt

ftp

123

vip

123

[root@service root]# db_load -T -t hash -f users.txt /etc/vsftpd_login.db

[root@service root]# chmod 600 /etc/vsftpd_login.db

注:上述两步在前面的课程都已经讲过如果不明白什么意思的话回去看我的这篇文章

《一步一步学会linux之三 vsftpd 应用举例》

第二步:配置pam模块

[root@service root]# vi /etc/pam.d/ftp

#%PAM-1.0

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

#auth required /lib/security/pam_unix.so shadow nullok

#auth required /lib/security/pam_shells.so

#account required /lib/security/pam_unix.so

#session required /lib/security/pam_unix.so

auth required pam_userdb.so db=/etc/vsftpd_login

account required pam_userdb.so db=/etc/vsftpd_login

注释:重点是加入 这两行

auth required pam_userdb.so db=/etc/vsftpd_login

account required pam_userdb.so db=/etc/vsftpd_login

用于处理虚拟账号的数据库,前面的为了防干扰只好把他们先注释掉

第三步:建立系统用户与虚拟数据库用户关联

//建立帐户并把指定的文件夹给该帐户

[root@service root]# useradd -d /var/ftp/share ftpuser

//建立文件夹

[root@service root]# mkdir /var/ftp/share

//把文件夹的所有者和域的身份都赋给了ftpuser这个帐户

[root@service root]# chown ftpuser.ftpuser /var/ftp/share

//设置文件夹所有者读写属性

[root@service root]# chmod o=r /var/ftp/share

[root@service root]# useradd -d /var/ftp/vip ftpvip

[root@service root]# mkdir /var/ftp/vip

[root@service root]# chown ftpvip.ftpvip /var/ftp/vip

[root@service root]# chmod o=rw /var/ftp/vip

注释:上面我们建立了两个系统帐户 ftpuser(其对应虚拟帐户ftp ftpvip(其对应帐户为vip),从修改文件的权限我们很清楚知道我们要使虚拟帐户ftp只有下载功能(读),而

虚拟帐户vip有上传和下载功能(读写)。当然这只是设置了文件夹读写属性我们还要进一步编辑vsftpd.conf的配置文件。

第四步:配置相关的vsftpd.conf文件

接下来就要配置vsftpd.conf文件了,把vsftpd.conf所有注释了然后自己写算了如下:

#打开独立运行模式

listen=YES

#不允许匿名用户登陆

anonymous_enable=NO

#不允许匿名用户创建目录 这个最好不要打开否则会带来不可预测的后果

anon_mkdir_write_enable=NO

//不开放用户的改名、删除文件等权限;

anon_other_write_enable=NO

#允许本地用户登陆 如果这个不打开的话 uid 500以下的人都被访问拒绝

local_enable=YES

#不允许匿名上传

anon_upload_enable=NO

#限制用户在当前目录

chroot_local_user=YES

#设置执行虚拟用户配置文件的目录

user_config_dir=/ftpconfig

Vsftpd的文件是配置好了但是我们还要继续增加需要用户的配置

[root@service root]# mkdir /ftpconfig

[root@service root]# vi /ftpconfig/ftp

然后在/ftpconfig/ftp的文件里加入如下内容

#开启虚拟帐户功能

guest_enable=yes

#虚拟帐户ftp为对应系统帐户ftpuser

guest_username=ftpuser

#配置虚拟帐户全局可读,允许其下载数据

anon_world_readable_only=yes

#限定传输速度30k每秒

anon_max_rate=30000

同理

[root@service root]# vi /ftpconfig/vip

guest_enable=yes

guest_username=ftpvip

#关闭匿名用户只读功能

anon_world_readable_only=no

#允许客户端写命令

write_enable=yes

#开启匿名用户上传功能

anon_upload_enable=yes

anon_max_rate=60000

注释:这里大家经常看到anon_匿名用户的前缀,其实虚拟用户在某种程度上更接近于匿名用户,包括上传,下载,修改文件名,删除文件等配置所使用的指令与匿名用户的指令是相同的。

好了这个vsftpd服务器的骨架已经出来了 下面我们来进一步的优化。

由于我的ftp是自己编译的所以启动时默认是standalone 模式因此用

/usr/local/sbin/vsftpd & 启动 注意用这个启动先要吧xinetd模式关了否则可能会出现错误

现在我们启动了vsftpd 然后看看测试截图。

图一

图一 ftp虚拟帐户登陆

我现在换个 flashfxp ftp工具 ftp虚拟帐户登陆 并试图上传视频文件liaoluyu2.wmv视频文件

图二

图二 上传文件失败

下面是下载test.mp3文件 大家观察下载速度是25.6kb/s左右

图三

图三 下载文件(成功下载)

现在我们来观察虚拟帐户vip的测试:

上传的速度 大概是64.0kb/s

图四

图四 可以上传 速度为64.0kb/s

下载速度大概是64.0kb/s

图五

图五 下载速度64.0kb/s

第五步:进一步配置vsftpd 之优化启动命令

vsftpd有两种工作模式,standalone模式和xinetd守护进程模式,在standalone模式下,每次修改配置文件必须重新启动vsftpd服务才能生效,而且每次用到的命令启动服务比较麻烦,我们做一个脚本来启动和停止服务。
建立一个新文件/etc/rc.d/init.d/vsftpd,把以下内容复制到文件中:

#!/bin/bash

#

# vsftpd This shell script takes care of starting and stopping

# standalone vsftpd.

#

# chkconfig: - 60 50

# description: Vsftpd is a ftp daemon, which is the program /

# that answers incoming ftp service requests.

# processname: vsftpd

# config: /etc/vsftpd/vsftpd.conf

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ ${NETWORKING} = "no" ] && exit 0

[ -x /usr/local/sbin/vsftpd ] || exit 0

RETVAL=0

prog="vsftpd"

start() {

# Start daemons.

if [ -d /etc ] ; then

for i in `ls /etc/vsftpd.conf`; do

site=`basename $i .conf`

echo -n $"Starting $prog for $site: "

/usr/local/sbin/vsftpd $i &

RETVAL=$?

[ $RETVAL -eq 0 ] && {

touch /var/lock/subsys/$prog

success $"$prog $site"

}

echo

done

else

RETVAL=1

fi

return $RETVAL

}

stop() {

# Stop daemons.

echo -n $"Shutting down $prog: "

killproc $prog

RETVAL=$?

echo

[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog

return $RETVAL

}

# See how we were called.

case "$1" in

start)

start

;;

stop)

stop

;;

restart|reload)

stop

start

RETVAL=$?

;;

condrestart)

if [ -f /var/lock/subsys/$prog ]; then

stop

start

RETVAL=$?

fi

;;

status)

status $prog

RETVAL=$?

;;

*)

echo $"Usage: $0 {start|stop|restart|condrestart|status}"

exit 1

esac

exit $RETVAL

注释:没什么好说的重点是看清楚目录了自己修改下

保存文件,再给该文件加上执行权限:
# chmod 755 /etc/rc.d/init.d/vsftpd

这样我们就可以通过下面的方法来管理服务了:
# service vsftpd {start|stop|restart|condrestart|status}

六、进一步优化配置vsftpd之用户时间限制

前面我们提过,vsftpd 服务是支持在linux下的两种服务模式:独立(standalone)模式和守护进程(xinetd)模式。在standalone模式下,vsftpd进程启动后会一直占用系统资源,当有连接请求时,它会迅速反应;在xinetd模式下,ftp服务是由守护进程统一管理,当出现ftp连接请求时,守护进程才将ftp服务启动,这种方式最大的优点是没有连接的时候ftp服务不会占用系统资源,处于睡眠状态,但因为要花费时间去唤醒该服务,所以响应时间较长。

现在我们尝试用守护进程来控制vsftpd

我们需要在守护进程配置目录/etc/xinetd.d/里建立vsftpd 的守护进程文件。我们在安装时已经将该文件考到/etc/xinetd.d/目录下了。我们稍稍修改其内容:
#vi /etc/xinetd.d/vsftpd

service ftp
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/vsftpd
server_args = /etc/ vsftpd.conf
nice = 10
}


接下来把配置文件(vsftpd.conf)中的listen=yeslisten_ipv6=yes去掉,停掉vsftpd服务,重启xinetd服务:
# sesrvice vsftpd stop
# service xinetd restart

重新启动守护进程后,vsftpd 服务就会让守护进程来管理了。在守护进程管理过程中,我们再修改主配置文件的话,就不需要重新启动服务了。

现在我们开始实现ip 和时间限制了

1. ip限制

在配置文件/etc/xinetd.d/vsftpd{}中加入

only_from=主机表

如:only_from=192.168.1.0

表示只允许192.168.1.0网段内的主机访问

no_access=主机表

例如:no_access=192.168.1.0

表示禁止192.168.1.0网段内的主机访问

主机表 的内容可以查如下表:

图六

1. 时间限制

同样在在配置文件/etc/xinetd.d/vsftpd{}中加入

access_time = hour:min-hour:min

例如:access_time = 18:00-23:59

表示只有在下午6 点到午夜0 点之前才能访问此FTP 服务器;

又如:access_time = 8:30-11:30 13:00-18:00

表示只有在上午8 点半到11 点半和下午1 点到下午6 点才能访问此FTP 服务器。

注意修改完后一定要重启下 xinetd服务

[root@service root]# service xinetd restart

Stopping xinetd: [ OK ]

Starting xinetd: [ OK ]

其实 通过xinetd 还有很多要学的 东西 这里只是简单地满足vsftpd服务器的需求,现在我们开始测试下ip 和时间限制。

时间限制:我当前时间是北京时间16点正, ftp 允许时间00:00-6:00测试如图

service ftp

{

socket_type = stream

wait = no

user = root

server = /usr/local/sbin/vsftpd

server_args =/etc/vsftpd.conf

log_on_success += DURATION USERID

log_on_failure += USERID

nice = 10

disable = no

access_times = 00:00-6:00

}

[root@service root]# service xinetd restart

Stopping xinetd: [ OK ]

Starting xinetd: [ OK ]

图七

图七 在不允许的时间段内练级限制了

把时间改下access_times =12:00-18:00再测试

图八

图八 在允许的时间段内连接成功

注释:不同版本的时间限制命令估计是不同的,网上流传的是access_time 结果我测试了n久都失败,后来网上查了下结果发现有人用access_times于是我转成这个就成功了。还有一个地方要注意的就是access_times =12:00-18:00这个命令中access_times=号之间记得留空格否则就会出现ftp: connect: Connection refused 的错误提示!!所以出现了这个提示大概就是/etc/xinetd.d/vsftpd文档内书写格式有误了。

为了测试方便我只允许192.168.0.1这台主机访问ftp服务器

service ftp

{

socket_type = stream

wait = no

user = root

server = /usr/local/sbin/vsftpd

server_args = /etc/vsftpd.conf

log_on_success += DURATION USERID

log_on_failure += USERID

nice = 10

disable = no

access_times =20:00-23:59

only_from =192.168.0.1

}

图九

图九 192.168.0.1访问ftp服务器(允许)

图十

图十 用服务器自己(即192.168.0.2)访问就被拒绝

到此 一个简单的vsftpd 案例就讲完了如果有错的地方希望大家帮忙指正,问题讨论请邮

Weihua0722@163.com

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP