主题 : Linux下FTP服务器vsftp配置大全超完整版
我为人人,人人为我
级别: 七朵秋菊

UID: 13542
精华: 0
发帖: 1211
威望: 47453 点
无痕币: 23241 WHB
贡献值: 0 点
在线时间: 437(时)
注册时间: 2008-02-19
最后登录: 2023-08-15

0 Linux下FTP服务器vsftp配置大全超完整版

LinuxFTP服务器vsftp配置大全超完整版
环境:
RedHat  AS4
说明:
如果不做说明,一般安装命令均使用ROOT权限,用 # 表示

特别说明:无

以下文章介绍Liunx 环境下vsftpd的三种实现方法

ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.0.3.tar.gz,目前已经到2.0.3版本。假设我们已经将vsftpd-2.0.3.tar.gz文件下载到服务器的/home/xuchen目录




代码:
# cd /home/xuchen
# tar xzvf vsftpd-2.0.3.tar.gz //
解压缩程序
# cd vsftpd-2.0.3

三种方式的实现                                      
1、匿名用户形式实现
# vi builddefs.h  \\\\编辑builddefs.h 文件,文件内容如下:

#ifndef VSF_BUILDDEFS_H

#define VSF_BUILDDEFS_H
#undef VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#undef VSF_BUILD_SSL

#endif /* VSF_BUILDDEFS_H */
将以上undef的都改为define,支持tcp_wrappers,支持PAM认证方式,支持SSL

# make  //直接在vsftpd-2.0.3里用make编译
# ls -l vsftpd
-rwxr-xr-x  1 root root 86088 Jun  6 12:29 vsftpd  //可执行程序已被编译成功

创建必要的帐号,目录:
# useradd nobody  //可能你的系统已经存在此帐号,那就不用建立
# mkdir /usr/share/empty  //可能你的系统已经存在此目录,那就不用建立
# mkdir /var/ftp  //可能你的系统已经存在此目录,那就不用建立
# useradd -d /var/ftp ftp  //可能你的系统已经存在此帐号,那就不用建立
# chown root:root /var/ftp
# chmod og-w /var/ftp
请记住,如果你不想让用户在本地登陆,那么你需要把他的登陆SHELL设置成/sbin/nologin,比如以上的nobody和ftp我就设置成/sbin/nologin

安装vsftp配置文件,可执行程序,man等:
# install -m 755 vsftpd /usr/local/sbin/vsftpd-ano
# install -m 644 vsftpd.8 /usr/share/man/man8
# install -m 644 vsftpd.conf.5 /usr/share/man/man5
# install -m 644 vsftpd.conf /etc/vsftpd-ano.conf
这样就安装完成了,那么我们开始进行简单的配置

# vi /etc/vsftpd-ano.conf ,将如下三行加入文件
listen=YES
listen_port=21
tcp_wrappers=YES
anon_root=/var/ftp //设置匿名用户本地目录,和ftp用户目录必须相同
listen=YES的意思是使用standalone启动vsftpd,而不是super daemon(xinetd)控制它 (vsftpd推荐使用standalone方式)
# /usr/local/sbin/vsftpd-ano /etc/vsftpd-ano.conf &  //以后台方式启动vsftpd
注意:每行的值都不要有空格,否则启动时会出现错误,举个例子,假如我在listen=YES后多了个空格,那我启动时就出现如下错误:
500 OOPS: bad bool value in config file for: listen

测试搭建好的匿名用户方式
# ftp 127.0.0.1
Connected to 127.0.0.1.
220 (vsFTPd 2.0.3)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 \"/\"
ftp> quit
221 Goodbye.
#
OK,已经完成了,very nice.

高级配置
细心的朋友可能已经看出来我们只在默认配置文件增加了四行,就实现了FTP连接(也证明了vsftpd的易用性),那么让我们传个文件吧,呀!!传输失败了(见图1)
为什么呢?因为 vsftpd 是为了安全需要,/var/ftp目录不能把所有的权限打开,所以我们这时要建一个目录pub,当然也还是需要继续修改配置文件的。
# mkdir /var/ftp/pub
# chmod -R 777 /var/ftp/pub

为了测试方便,我们先建立一个名为kill-ano的脚本,是为了杀掉FTP程序的
#!/bin/bash
$1}\'`   a=`/bin/ps -A | grep vsftpd-ano | awk \'{print 
$a   kill -9 

那么现在大家看看我的匿名服务器配置文件吧
anonymous_enable=YES  //允许匿名访问,这是匿名服务器必须的
write_enable=YES  //全局配置可写
no_anon_password=YES //匿名用户login时不询问口令
anon_umask=077  //匿名用户上传的文件权限是-rw----
anon_upload_enable=YES  //允许匿名用户上传文件
anon_mkdir_write_enable=YES  //允许匿名用户建立目录
anon_other_write_enable=YES  //允许匿名用户具有建立目录,上传之外的权限,如重命名,删除
dirmessage_enable=YES  //当使用者转换目录,则会显示该目录下的.message信息
xferlog_enable=YES   //记录使用者所有上传下载信息
xferlog_file=/var/log/vsftpd.log  //将上传下载信息记录到/var/log/vsftpd.log中
xferlog_std_format=YES   //日志使用标准xferlog格式
idle_session_timeout=600  //客户端超过600S没有动作就自动被服务器踢出
data_connection_timeout=120  //数据传输时超过120S没有动作被服务器踢出
chown_uploads=YES
chown_username=daemon  //上传文件的属主
ftpd_banner=Welcome to d-1701.com FTP service.  //FTP欢迎信息
anon_max_rate=80000  //这是匿名用户的下载速度为80KBytes/s
check_shell=NO  //不检测SHELL

现在再测试,先kill掉再启动FTP程序
# ./kill-ano
# /usr/local/sbin/vsftpd-ano /etc/vsftpd-ano.conf &
上传一个文件测试一下,怎么样?OK了吧,下载刚上传的那个文件,恩?不行,提示
550 Failed to open file.
传输已失败!
传输队列已完成
1 个文件传输失败

没有关系,你记得咱们设置了anon_umask=077了吗?所以你下载不了,如果你到服务器上touch 一个文件(644),测试一下,是可以被下载下来的,好了,匿名服务器就说到这里了。


2、本地用户形式实现
# cd /home/xuchen/vsftpd-2.0.3  //进入vsftpd-2.0.3的源代码目录
# make clean  //清除编译环境
# vi builddefs.h  \\\\继续编辑builddefs.h 文件,文件内容如下:
#ifndef VSF_BUILDDEFS_H

#define VSF_BUILDDEFS_H
#define VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#define VSF_BUILD_SSL

#endif /* VSF_BUILDDEFS_H */
将以上define VSF_BUILD_PAM行的define改为undef,支持tcp_wrappers,不支持PAM认证方式,支持SSL,记住啊,如果支持了PAM认证方式,你本地用户是不能登陆的。

# make  //直接在vsftpd-2.0.3里用make编译
# ls -l vsftpd
-rwxr-xr-x  1 root root 84712 Jun  6 18:56 vsftpd  //可执行程序已被编译成功

创建必要的帐号,目录:
# useradd nobody  //可能你的系统已经存在此帐号,那就不用建立
# mkdir /usr/share/empty  //可能你的系统已经存在此目录,那就不用建立
# mkdir /var/ftp  //可能你的系统已经存在此目录,那就不用建立
# useradd -d /var/ftp ftp  //可能你的系统已经存在此帐号,那就不用建立
# chown root:root /var/ftp
# chmod og-w /var/ftp
请记住,如果你不想让用户在本地登陆,那么你需要把他的登陆SHELL设置成/sbin/nologin,比如以上的nobody和ftp我就设置成/sbin/nologin

安装vsftp配置文件,可执行程序,man等:
# install -m 755 vsftpd /usr/local/sbin/vsftpd-loc
# install -m 644 vsftpd.8 /usr/share/man/man8
# install -m 644 vsftpd.conf.5 /usr/share/man/man5
# install -m 644 vsftpd.conf /etc/vsftpd-loc.conf
这样就安装完成了,那么我们开始进行简单的配置

# vi /etc/vsftpd-loc.conf ,将如下三行加入文件
listen=YES
listen_port=21
tcp_wrappers=YES //支持tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny)
listen=YES的意思是使用standalone启动vsftpd,而不是super daemon(xinetd)控制它 (vsftpd推荐使用standalone方式),注意事项请参看匿名用户的配置。
anonymous_enable=NO
local_enable=YES  //这两项配置说不允许匿名用户登陆,允许本地用户登陆
# /usr/local/sbin/vsftpd-loc /etc/vsftpd-loc.conf &   //以后台方式启动vsftpd

测试搭建好的匿名用户方式,先测试root用户吧 :)
# ftp 127.0.0.1
Connected to 127.0.0.1.
220 (vsFTPd 2.0.3)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): root
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 \"/root\"
ftp> quit
221 Goodbye.
我们看到root用户可以登陆到ftp,他的登陆目录就是自己的主目录。
再测试一个系统用户,那我们先建立一个用户名叫xuchen的
# useradd xuchen
# passwd xuchen
Changing password for user xuchen.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
建立好了,让我们开始测试吧!!
# ftp 127.0.0.1
Connected to 127.0.0.1.
220 (vsFTPd 2.0.3)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): xuchen
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 \"/home/xuchen\"
ftp> quit
221 Goodbye.
我们看到xuchen用户可以登陆到ftp,他的登陆目录也是自己的主目录。哈哈,又完成了!
高级配置
细心的朋友可能已经看出来如果我们不支持PAM认证方式,那么本地用户就可以登陆,而默认编译的vsftpd支持PAM认证方式,所以是不支持本地用户登陆的。恩,从这点说,这也是vsftp安全的一个表现----禁止本地用户登陆。
我们登陆后进行测试,传一个文件上去,得,失败了,那下载个文件下来吧,恩,这是成功的(见图2),而且我们发现我们可以进入到系统根目录(见图3),这样很危险。



那么改配置文件吧,为了测试方便,我们先建立一个名为kill-loc的脚本,也是为了杀掉FTP程序的
#!/bin/bash
$1}\'`   a=`/bin/ps -A | grep vsftpd-loc | awk \'{print 
$a   kill -9 

现在提供我的本地用户验证服务器配置文件吧(在匿名里写过的注释我就不在这里写了)
listen=YES
listen_port=21
tcp_wrappers=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022  //本地用户文件上传后的权限是-rw-r-r
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
connect_from_port_20=YES
chroot_local_user=YES //限制用户在自己的主目录
#local_root=/ftp  //你可以指定所有本地用户登陆后的目录,如果不设置此项,用户都会登陆于自己的主目录,就跟咱们前面测试的结果是一样的
local_max_rate=500000  //本地用户的下载速度为500KBytes/s
idle_session_timeout=600
data_connection_timeout=120
nopriv_user= nobody   //设定服务执行者为nobody,vsftpd推荐使用一个权限很低的用户,最好是没有家目录(/dev/null),没有登陆shell(/sbin/nologin),系统会更安全
ftpd_banner=Welcome to d-1701.com FTP service.
check_shell=NO

userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd.denyuser
以上三条设定不允许登陆的用户,用户列表存放在/etc/vsftpd.denyuser中,一行一个帐号如果我把xuchen这个用户加到vsftpd.denyuser里,那么登陆时会出现如下错误:
# ftp 127.0.0.1
Connected to 127.0.0.1.
220 Welcome to d-1701.com FTP service.
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): xuchen
530 Permission denied.
Login failed.
呵呵,有意思吧,自己测试吧,本地用户登陆方式就介绍到这里吧!

 

3、虚拟用户形式实现(dbmysql形式)
# cd /home/xuchen/vsftpd-2.0.3  //
进入vsftpd-2.0.3的源代码目录
# make clean  //
清除编译环境
# vi builddefs.h  \\\\
继续编辑builddefs.h 文件,文件内容如下:
#ifndef VSF_BUILDDEFS_H

#define VSF_BUILDDEFS_H
#define VSF_BUILD_TCPWRAPPERS
#undef VSF_BUILD_PAM
#define VSF_BUILD_SSL

#endif /* VSF_BUILDDEFS_H */
将以上define VSF_BUILD_PAM行的undef改为define,支持tcp_wrappers,支持PAM认证方式,支持SSL,和匿名用户形式是一样的。

# make  //
直接在vsftpd-2.0.3里用make编译
# ls -l vsftpd
-rwxr-xr-x  1 root root 86088 Jun  6 22:26 vsftpd  //
可执行程序已被编译成功

创建必要的帐号,目录:
# useradd nobody  //
可能你的系统已经存在此帐号,那就不用建立
# mkdir /usr/share/empty  //
可能你的系统已经存在此目录,那就不用建立
# mkdir /var/ftp  //
可能你的系统已经存在此目录,那就不用建立
# useradd -d /var/ftp ftp  //
可能你的系统已经存在此帐号,那就不用建立
# chown root:root /var/ftp
# chmod og-w /var/ftp
请记住,如果你不想让用户在本地登陆,那么你需要把他的登陆SHELL设置成/sbin/nologin,比如以上的nobodyftp我就设置成/sbin/nologin

安装vsftp配置文件,可执行程序,man:
# install -m 755 vsftpd /usr/local/sbin/vsftpd-pam
# install -m 644 vsftpd.8 /usr/share/man/man8
# install -m 644 vsftpd.conf.5 /usr/share/man/man5
# install -m 644 vsftpd.conf /etc/vsftpd-pam.conf
这样就安装完成了,那么我们开始进行简单的配置

对于用DB库存储用户名及密码的方式来说:
1)查看系统是否有相应软件包

# rpm –qa | grep db4
db4-devel-4.2.52-7.1
db4-4.2.52-7.1
db4-utils-4.2.52-7.1
2)建立一个logins.txt的文件,单行为用户名,双行为密码,例如
# vi /home/logins.txt

xuchen
12345

3)建立数据库文件并设置文件属性
# db_load -T -t hash -f /home/logins.txt /etc/vsftpd_login.db
# chmod 600 /etc/vsftpd_login.db
4)建立认证文件
# vi /etc/pam.d/ftp
插入如下两行
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login
5)建立一个虚拟用户
useradd -d /home/vsftpd -s /sbin/nologin vsftpd
ls -ld /home/vsftpd
drwx------  3 vsftpd vsftpd 1024 Jun  6 22:55 /home/vsftpd/
6)编写配置文件(注意事项请参看匿名用户的配置,这里不再赘述)
# vi /etc/vsftpd-pam.conf
listen=YES
listen_port=21
tcp_wrappers=YES //
支持tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny)
listen=YES
的意思是使用standalone启动vsftpd,而不是super daemon(xinetd)控制它 (vsftpd推荐使用standalone方式)
anonymous_enable=NO
local_enable=YES  //PAM
方式此处必须为YES,如果不是将出现如下错误:
500 OOPS: vsftpd: both local and anonymous access disabled!
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES
guest_enable=YES
guest_username=vsftpd //
这两行的意思是采用虚拟用户形式
virtual_use_local_privs=YES //
虚拟用户和本地用户权限相同

pasv_enable=YES //
建立资料联机采用被动方式
pasv_min_port=30000 //
建立资料联机所可以使用port 范围的上界,0表示任意。默认值为0
pasv_max_port=30999 //
建立资料联机所可以使用port 范围的下界,0表示任意。默认值为0
7)启动程序
# /usr/local/sbin/vsftpd-pam /etc/vsftpd-pam.conf &
8)测试连通及功能
# vi /home/vsftpd/test //
建立一个文件,内容如下
1234567890
# chown vsftpd.vsftpd /home/vsftpd/test

# ftp 127.0.0.1
Connected to 127.0.0.1.
220 (vsFTPd 2.0.3)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): xuchen
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 \"/\"
ftp> size test
213 11
ftp> quit
221 Goodbye.
OK
,用户名为xuchen,密码为12345可以连接到FTP服务器,看不到文件列表,但可以下载已知文件名的文件,不能上传文件,非常安全吧!!

如果我们需要用户看到文件,怎么办?也好办,在配置文件中加入如下语句:
anon_world_readable_only=NO  //
匿名登入者不能下载可阅读的档案,默认值为YES

如果需要让用户上传文件和下载文件分开,建议如下这么做
# vi /home/logins.txt
xuchen
12345
upload
45678
//
首先建立虚拟用户upload,密码为45678
# db_load -T -t hash -f /home/logins.txt /etc/vsftpd_login.db //
更新数据文件

# mkdir /home/vsftpd/upload
# vi /etc/vsftpd-pam.conf
加入如下语句
user_config_dir=/etc/vsftpd_user_conf
# mkdir /etc/vsftpd_user_conf
# vi /etc/vsftpd_user_conf/upload
文件内容如下
local_root=/home/vsftpd/upload
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

# chmod 700 /home/vsftpd/upload
# chown vsftpd.vsftpd /home/vsftpd/upload/

这样,xuchen用户可以下载/home/vsftpd里的文件及upload里的文件,而upload用户可以上传和下载/home/vsftpd/upload文件夹的东西,但不能到/home/vsftpd里下载文件,很简单得实现了分用户上传和下载

对于用Mysql库存储用户名及密码的方式来说:
就是把用户名和密码放在mysql库里,实现起来也相当简单
1)建立一个库并设置相应权限
# mysql –p
mysql>create database ftpd;
mysql>use ftpd;
mysql>create table user(name char(20) binary,passwd char(20) binary);
mysql>insert into user (name,passwd) values (\'test1\',\'12345\');
mysql>insert into user (name,passwd) values (\'test2\',\'54321\');
mysql>grant select on ftpd.user to ftpd@localhost identified by \'123456\';
mysql>flush privileges;
刷新权限设置
mysql>quit
2)下载libpam-mysql进行安装编译
下载地址如下:
http://nchc.dl.sourceforge.net/s ... am_mysql-0.5.tar.gz

假设我们把它放在了/home/xuchen目录下
# cd /home/xuchen
# tar xzvf pam_mysql-0.5.tar.gz
# cd pam_mysql
# make
# cp pam_mysql.so /lib/security
3)建立PAM认证信息
# vi /etc/pam.d/ftp ,
内容如下
auth required /lib/security/pam_mysql.so user=ftpd passwd=123456 host=localhost db=ftpd table=user usercolumn=name passwdcolumn=passwd crypt=0

account required /lib/security/pam_mysql.so user=ftpd passwd=123456 host=localhost db=ftpd table=user usercolumn=name passwdcolumn=passwd crypt=0

注意:
crypt= n
crypt=0:
明文密码
crypt=1:
使用crpyt()函数(对应SQL数据里的encrypt()encrypt()随机产生salt)
crypt=2:
使用MYSQL中的password()函数加密
crypt=3
:表示使用md5的散列方式
4)建立本地虚拟用户
# useradd -d /home/ftpd -s /sbin/nologin ftpd

5)下面就差修改vsftpd.conf文件了,我把我的提供给大家参考吧:)
# vi /etc/vsftpd-pam1.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
chroot_local_user=YES
guest_enable=YES
guest_username=ftpd
listen=YES
listen_port=21
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30999
anon_world_readable_only=NO
virtual_use_local_privs=YES

#user_config_dir=/etc/vsftpd_user_conf
可以看出,和前面的用db库来验证没有多大区别,其实就是一个东西,一个用mysql来验证,一个用db库,我个人比较倾向于用db库来验证,在这个环境下,相对于Mysql来说,安全系数更高一点。

6# /usr/local/sbin/vsftpd-pam /etc/vsftpd-pam1.conf &   //以后台方式启动

7)测试连通
# ftp 127.0.0.1
Connected to 127.0.0.1.
220 (vsFTPd 2.0.3)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): test1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 \"/\"
ftp> quit
221 Goodbye.
看,成功了!!这样就实现了mysql的认证方式,很简单吧??

 

4、为FTP增加磁盘配额,从而避免恶意用户用垃圾数据塞满你的硬盘
我首先要说的是这个功能是系统自带的,而不 vsftp 的功能之一,千万别搞混了。好了,我们先假设我们的系统用户ftpd的主目录是/home/ftpd,它是建立在/home分区中,那么如果我们要对 ftpd用户进行磁盘限额,那我们需要修改/etc/fstab中根分区的记录,将/home分区的第4个字段改成defaults,usrquota 如下:
LABEL=/home   /home   ext3    defaults,usrquota     1 2
# reboot  //
重新启动系统使设置生效
也可以用
# mount -o remount /dev/sda6  ///dev/sda6
的挂接点就是/home,这样可以不用启动系统。
这里我还要说明一下,如果我们对一个组进行磁配额,那我们需要增加参数grpquota,例如
LABEL=/home   /home   ext3    defaults,grpquota     1 2
也可以
LABEL=/home   /home   ext3    defaults,usrquota,grpquota     1 2
你想怎么限制都可以,自己组合参数吧。
# quotacheck -avu
说明:a-自动开启挂载文件系统的配额,v-显示信息,u-启用用户配额or g-启用组配额
# edquota ftpd //
为用户ftpd设置磁盘配额
OR
# edquota -g grp  //
为组grp设置磁盘配额
系统会自动打开配额文件,如下:
Disk quotas for user ftpd (uid 502):
 Filesystem         blocks       soft       hard     inodes     soft     hard
 /dev/sda6           424          0          0         13        0        0
一列是启用了配额的文件系统的名称。第二列显示了用户当前使用的块数,单位为KB。随后的两列用来设置用户在该文件系统上的软硬块限度。inodes 列显示了用户当前使用的i节点数量。最后两列用来设置用户在该文件系统上的软硬i节点限度.硬限是用户或组群可以使用的磁盘空间的绝对最大值。达到了该限 度后,磁盘空间就不能再被用户或组群使用了。软限定义可被使用的最大磁盘空间量。和硬限不同的是,软限可以在一段时期内被超过。这段时期被称为过渡期 grace period),默认七天的超越。过渡期可以用秒钟、分钟、小时、天数、周数、或月数表示。如果以上值中的任何一个被设置为 0,那个限度就不会被设置。我设置了硬块限度为1KB,是为了测试方便。
# quotaon  -avu  //
打开磁盘配额监控进程,u是用户g是组,这里我没设置g参数
要校验用户的配额是否被设置,我们可以使用以下命令:
# quota ftpd
Disk quotas for user ftpd (uid 502):
 Filesystem  blocks   quota   limit    grace   files   quota   limit   grace
/dev/sda6     424*    0      1            13      0      0        
# edquota –t
-g)来设置过渡期(grace period //当然只针对软限制而言
和另一个 edquota 命令相似,这个命令也会在文本编辑器中打开当前的文件系统配额:
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
 Filesystem             Block grace period     Inode grace period
/dev/sda6                     7days                  7days
按你的需要修改后存盘退出
用以下命令显示磁盘配额使用状态
# repquota  -a  
repquota  /dev/sda6(用户配额)
# repquota -g -a
repquota -a /dev/sda6 (组的配额)
如果一切按照你的意思实施了,那么我们就进行测试了!如下图4

我们传了一个>1k的文件,没有成功,这样我们就成功的为用户ftpd增添了磁盘配额,要是哪一天你不想加磁盘配额了,怎么办?参看如下命令:
取消某个文件系统的配额限制
#quotaoff  -vug /dev/sda6  //
删除home分区的磁盘限额
#
删除/etc/fstab中设置配额的部分
修改软配额的最大超越时间
注意:
/
/boot/,/proc,/mnt/cdrom等不要使用配额,没用。而且磁盘配额不适合FATFAT32系统。
以后当新设置了某个用户的配额,可以使用如下命令,马上生效。
# quotacheck -auvgm       --
是不尝试重新挂载文件系统

备注:
1
vsftpd配置参数详细整理
#
接受匿名用户
anonymous_enable=YES
#
匿名用户login时不询问口令
no_anon_password=YES
#
匿名用户主目录
anon_root=(none)
#
接受本地用户
local_enable=YES
#
本地用户主目录
local_root=(none)
#
如果匿名用户需要密码,那么使用banned_email_file里面的电子邮件地址的用户不能登录
deny_email_enable=YES
#
仅在没有pam验证版本时有用,是否检查用户有一个有效的shell来登录
check_shell=YES
#
若启用此选项,userlist_deny选项才被启动
userlist_enable=YES
#
若为YES,userlist_file中的用户将不能登录,NO则只有userlist_file的用户可以登录
userlist_deny=NO
#
如果和chroot_local_user一起开启,那么用户锁定的目录来自/etc/passwd每个用户指定的目录(这个不是很清楚,很哪位熟悉的指点一下)
passwd_chroot_enable=NO
#
定义匿名登入的使用者名称。默认值为ftp
ftp_username=FTP

#################
用户权限控制###############
#
可以上传(全局控制).
write_enable=YES
#
本地用户上传文件的umask
local_umask=022
#
上传文件的权限配合umask使用
#file_open_mode=0666
#
匿名用户可以上传
anon_upload_enable=NO
#
匿名用户可以建目录
anon_mkdir_write_enable=NO
匿名用户其它的写权利(更改权限?)
anon_other_write_enable=NO
如果设为YES,匿名登入者会被允许下载可阅读的档案。默认值为YES
anon_world_readable_only=YES
#
如果开启,那么所有非匿名登陆的用户名都会被切换成guest_username指定的用户名
#guest_enable=NO
所有匿名上传的文件的所属用户将会被更改成chown_username
chown_uploads=YES
匿名上传文件所属用户名
chown_username=lightwiter
#
如果启动这项功能,则所有列在chroot_list_file之中的使用者不能更改根目录
chroot_list_enable=YES
#
允许使用\"async ABOR\"命令,一般不用,容易出问题
async_abor_enable=YES
管控是否可用ASCII 模式上传。默认值为NO
ascii_upload_enable=YES
#
管控是否可用ASCII 模式下载。默认值为NO
ascii_download_enable=YES
#
这个选项必须指定一个空的数据夹且任何登入者都不能有写入的权限,当vsftpd 不需要file system 的权限时,就会将使用者限制在此数据夹中。默认值为/usr/share/empty
secure_chroot_dir=/usr/share/empty

###################
超时设置##################
#
空闲连接超时
idle_session_timeout=600
#
数据传输超时
data_connection_timeout=120
#PAVS
请求超时
ACCEPT_TIMEOUT=60
#PROT
模式连接超时
connect_timeout=60

################
服务器功能选项###############
#
开启日记功能
xferlog_enable=YES
#
使用标准格式
xferlog_std_format=YES
#
xferlog_std_format关闭且本选项开启时,记录所有ftp请求和回复,当调试比较有用.
#log_ftp_protocol=NO
#
允许使用pasv模式
pasv_enable=YES
#
关闭安全检查,小心呀.
#pasv_promiscuous+NO
#
允许使用port模式
#port_enable=YES
#
关闭安全检查
#prot_promiscuous
#
开启tcp_wrappers支持
tcp_wrappers=YES
#
定义PAM 所使用的名称,预设为vsftpd
pam_service_name=vsftpd
#
当服务器运行于最底层时使用的用户名
nopriv_user=nobody
#
使vsftpdpasv命令回复时跳转到指定的IP地址.(服务器联接跳转?)
pasv_address=(none)

#################
服务器性能选项##############
#
是否能使用ls -R命令以防止浪费大量的服务器资源
#ls_recurse_enable=YES
#
是否使用单进程模式
#one_process_model
#
绑定到listen_port指定的端口,既然都绑定了也就是每时都开着的,就是那个什么standalone模式
listen=YES
#
当使用者登入后使用ls -al 之类的指令查询该档案的管理权时,预设会出现拥有者的UID,而不是该档案拥有者的名称。若是希望出现拥有者的名称,则将此功能开启。
text_userdb_names=NO
#
显示目录清单时是用本地时间还是GMT时间,可以通过mdtm命令来达到一样的效果
use_localtime=NO
#
测试平台优化
#use_sendfile=YES

################
信息类设置################
#login
时显示欢迎信息.如果设置了banner_file则此设置无效
ftpd_banner=
欢迎来到湖南三辰Fake-Ta FTP 网站.
#
允许为目录配置显示信息,显示每个目录下面的message_file文件的内容
dirmessage_enable=YES
#
显示会话状态信息,!
#setproctitle_enable=YES

##############
文件定义 ##################
#
定义不能更改用户主目录的文件
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
#
定义限制/允许用户登录的文件
userlist_file=/etc/vsftpd/vsftpd.user_list
#
定义登录信息文件的位置
banner_file=/etc/vsftpd/banner
#
禁止使用的匿名用户登陆时作为密码的电子邮件地址
banned_email_file=/etc/vsftpd.banned_emails
#
日志文件位置
xferlog_file=/var/log/vsftpd.log
#
目录信息文件
message_file=.message

##############
目录定义 #################
#
定义用户配置文件的目录
user_config_dir=/etc/vsftpd/userconf
#
定义本地用户登陆的根目录,注意定义根目录可以是相对路径也可以是绝对路径.相对路径是针对用户家目录来说的.
local_root=webdisk #
此项设置每个用户登陆后其根目录为/home/username/webdisk
#
匿名用户登陆后的根目录
anon_root=/var/ftp

#############
用户连接选项#################
#
可接受的最大client数目
max_clients=100
#
每个ip的最大client数目
max_per_ip=5
#
使用标准的20端口来连接ftp
connect_from_port_20=YES
#
绑定到某个IP,其它IP不能访问
listen_address=192.168.0.2
#
绑定到某个端口
#listen_port=2121
#
数据传输端口
#ftp_data_port=2020
#pasv
连接模式时可以使用port 范围的上界,0 表示任意。默认值为0
pasv_max_port=0
#pasv
连接模式时可以使用port 范围的下界,0 表示任意。默认值为0
pasv_min_port=0

##############
数据传输选项#################
#
匿名用户的传输比率(b/s)
anon_max_rate=51200
#
本地用户的传输比率(b/s)
local_max_rate=5120000

########################################
别外,如果要对每个用户进行单独的控制,只需要在user_config_dir中建立username文件,内容为数据传输和用户权利里面设置个人的合适的选项,用户自定义文件同样适合用pam支持的虚拟用户
: FTP 数字代码的意义
110
重新启动标记应答。
120
服务在多久时间内ready
125
数据链路埠开启,准备传送。
150
文件状态正常,开启数据连接端口。
200
命令执行成功。
202
命令执行失败。
211
系统状态或是系统求助响应。
212
目录的状态。
213
文件的状态。
214
求助的讯息。
215
名称系统类型。
220
新的联机服务ready
221
服务的控制连接埠关闭,可以注销。
225
数据连结开启,但无传输动作。
226
关闭数据连接端口,请求的文件操作成功。
227
进入passive mode
230
使用者登入。
250
请求的文件操作完成。
257
显示目前的路径名称。
331
用户名称正确,需要密码。
332
登入时需要账号信息。
350
请求的操作需要进一部的命令。
421
无法提供服务,关闭控制连结。
425
无法开启数据链路。
426
关闭联机,终止传输。
450
请求的操作未执行。
451
命令终止:有本地的错误。
452
未执行命令:磁盘空间不足。
500
格式错误,无法识别命令。
501
参数语法错误。
502
命令执行失败。
503
命令顺序错误。
504
命令所接的参数不正确。
530
未登入。
532
储存文件需要账户登入。
550
未执行请求的操作。
551
请求的命令终止,类型未知。
552
请求的文件终止,储存位溢出。
553
未执行请求的的命令,名称不正确。

 

Total 0.048334(s) query 3, Time now is:05-02 17:15, Gzip enabled 粤ICP备07514325号-1
Powered by PHPWind v7.3.2 Certificate Code © 2003-13 秋无痕论坛