vsftp配置大全

vsftp配置大全
以下文章介紹Liunx 環境下vsftpd的三種實現方法

一、前言
Vsftp(Very Secure FTP)是一種在Unix/Linux中非常安全且快速穩定的FTP服務器,目前已經被許多大型站點所採用,如ftp.redhat.com,ftp.kde.org,ftp.gnome.org.等。Vsftpd的實現有三種方式
1、匿名用戶形式:在默認安裝的情況下,系統只提供匿名用戶訪問
2、本地用戶形式:以/etc/passwd中的用戶名爲認證方式
3、虛擬用戶形式:支持將用戶名和口令保存在數據庫文件或數據庫服務器中。相對於FTP的本地用戶形式來說,虛擬用戶只是FTP服務器的專有用戶,虛擬用戶只能訪問FTP服務器所提供的資源,這大大增強系統本身的安全性。相對於匿名用戶而言,虛擬用戶需要用戶名和密碼才能獲取FTP服務器中的文件,增加了對用戶和下載的可管理性。對於需要提供下載服務,但又不希望所有人都可以匿名下載;既需要對下載用戶進行管理,又考慮到主機安全和管理方便的FTP站點來說,虛擬用戶是一種極好的解決方案。

二、獲取最新版的Vsftp程序
Vsftp官方下載: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
a=`/bin/ps -A | grep vsftpd-ano | awk '{print $1}'`
kill -9 $a

那麼現在大家看看我的匿名服務器配置文件吧
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
a=`/bin/ps -A | grep vsftpd-loc | awk '{print $1}'`
kill -9 $a

現在提供我的本地用戶驗證服務器配置文件吧(在匿名裏寫過的註釋我就不在這裏寫了)
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

charset_filter_enable=YES
charset_client=GBK
charset_server=UTF8


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、虛擬用戶形式實現(db及mysql形式)
# 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,比如以上的nobody和ftp我就設置成/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/sourceforge/pam-mysql/pam_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等不要使用配額,沒用。而且磁盤配額不適合FAT和FAT32系統。
以後當新設置了某個用戶的配額,可以使用如下命令,馬上生效。
# quotacheck -auvgm --是不嘗試重新掛載文件系統

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章