天天看點

Vsftpd完全攻略(七)利用quota對Vsftpd做磁盤配額

關于vsftpd磁盤配額,這裡強調一下,vsftpd本身不帶這個功能,是系統本身自帶的quota這個軟體,quota字面上就是限額的意思.

quota磁盤配額比較常見的作用:

1.避免惡意ftp使用者用垃圾資料塞滿寶貴的硬碟.

2.虛拟空間不同使用者的容量限制

3.郵局使用者的容量限制

4.多人多任務使用同一個硬碟,妥善配置設定系統資源

寫這篇文章之前,先來個小插曲

之前參考了别人的做法,不小心犯了一個大忌。之前自己在VM裝的as5。是預設分區,導緻我在/etc/fstab添加了LABEL=/home   /home   ext3    defaults,usrquota     1 2,重新開機檔案系統檢查失敗!是因為我沒把home獨立分區出來。

解決repair filesystem方案: 

<b>第一種情況</b>:<b>非正常關機引起的磁盤分區問題</b><b> </b><b>不能正常進入系統</b><b></b>

repair filesystem 1 #

非正常關機引起的,用fsck /dev/hdaX後shutdown –r now進入,或隻用fsck來修複,隻管y回車

<b>第二種情況</b>:<b>由于</b><b>/etc/fstab</b><b>檔案編輯錯誤</b><b> </b><b>而引起的不能正常進入系統</b><b></b>

解決方法就是修改/etc/fstab檔案成原來正常格式 删除錯誤的或者是不存在的挂載目錄

輸入root密碼登陸到修複模式,但是修複模式下(read-only system) 檔案是被保護的不能修改 運作.需要把系統檔案權限改成可讀寫(rw),如下:

(Repair filesystem) 1 # mount -o remount,rw /

使根目錄可寫.即可以修複/etc/fstab檔案,使之可寫.然後就可以vi修改了.

根據我的情況,我就直接把<b>#</b>LABEL=/home   /home   ext3    defaults,usrquota     1 2注釋掉

儲存退出 :x

(Repair filesystem) 1 #<b>shutdown –r now</b>

 挂載虛拟硬碟并格式化

上面是些局外話,接下來需要在VM上添加一塊2G虛拟硬碟

打開VMware點選<b>VM---settings—add—Hard Disk—---Create a new virtual disk—SCSI—disk size</b><b>(</b><b>GB</b><b>)</b><b>2.0-</b>---重新開機虛拟機系統

[root@viong ~]#<b> fdisk -l  </b>     

Disk /dev/sda: 8589 MB, 8589934592 bytes

255 heads, 63 sectors/track, 1044 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1          13      104391   83  Linux

/dev/sda2              14        1044     8281507+  8e  Linux LVM

<b>Disk /dev/sdb</b>: 2147 MB, 2147483648 bytes  -----------à說明已經生效了

255 heads, 63 sectors/track, 261 cylinders

先把/dev/sdb劃分為一個擴充分區,再建立一個邏輯分區,格式化為ext3分區,然後設定為重新開機自動加載。 

[root@viong ~]#<b> fdisk /dev/sdb</b>

對/dev/sdb進行分區

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel. Changes will remain in memory only,

until you decide to write them. After that, of course, the previous

content won't be recoverable. 

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help):<b> n </b> 增加一個分區

Command action

   e   extended

   p   primary partition (1-4)

<b>e</b>增加擴充分區<b></b>

Partition number (1-4): <b>1</b>

First cylinder (1-261, default 1): <b>回車</b>

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-261, default 261): <b>回車</b>

Using default value 261

Command (m for help): <b>w</b>儲存退出

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

Command (m for help): <b>n</b>

   l   logical (5 or over)

<b>l</b>增加邏輯分區<b></b>

Command (m for help):<b> w</b>

[root@viong ~]#<b> fdisk -l</b>

Disk /dev/sdb: 2147 MB, 2147483648 bytes

/dev/sdb1               1         261     2096451    5  Extended

<b>/dev/sdb5    </b>           1         261     2096419+  83  Linux

[root@viong ~]#<b> mkfs.ext3 /dev/sdb5  </b>格式化sdb5

mke2fs 1.39 (29-May-2006)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

262144 inodes, 524104 blocks

26205 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=536870912

16 block groups

32768 blocks per group, 32768 fragments per group

16384 inodes per group

Superblock backups stored on blocks:

        32768, 98304, 163840, 229376, 294912

Writing inode tables: done                           

Creating journal (8192 blocks): done

Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 25 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

[root@viong ~]# <b>mkdir /mnt/ftp </b>

建立一個目錄來挂載sdb5

[root@viong ~]# <b>mount /dev/sdb5 /mnt/ftp/</b>

挂載sdb5到/mnt/ftp/

[root@viong ~]# <b>vi /etc/fstab  </b>

添加最後一條資訊,來達到重新開機自動挂載上去

/dev/VolGroup00/LogVol00 /                       ext3    defaults        1 1

LABEL=/boot             /boot                   ext3    defaults        1 2

tmpfs                   /dev/shm                tmpfs   defaults        0 0

devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

sysfs                   /sys                    sysfs   defaults           0 0

proc                    /proc                   proc    defaults           0 0

/dev/VolGroup00/LogVol01 swap                    swap    defaults        0 0

<b>/dev/sdb5             /mnt/ftp                  ext3 defaults          0 0</b><b></b>

.

<b>最後重新開機系統看有沒有被自動挂載上</b>

[root@red-hat-5 ~]# <b>useradd -d /mnt/sdb5/hom -s /sbin/nologin hom</b>

[root@red-hat-5 ~]# <b>passwd hom</b>

Changing password for user hom.

New UNIX password:

Retype new UNIX password:

passwd: all authentication tokens updated successfully.

 [root@red-hat-5 ~]#<b> ll /mnt/ftp/</b>

總計 20

drwx------ 2 hom  hom   4096 01-10 17:15 hom

drwx------ 2 root root 16384 01-10 16:53 lost+found

 [root@red-hat-5 ~]# <b>service vsftpd start</b>

為 vsftpd 啟動 vsftpd:[确定]

剛才建立的hom使用者是在/dev/sdb5分區中,那麼如果我們要對hom使用者進行磁盤限額,那我們需要修改/etc/fstab中根分區的記錄,将/dev/sdb5分區的第4個字段改成defaults,usrquota,如下:

/dev/sdb5    /mnt/ftp   ext3   defaults,usrquota          0 0

為了不然系統重新開機才生效,利用一下指令直接生效

# <b>mount -o remount /dev/sdb5</b>  

對一個組進行磁配額,那我們需要增加參數grpquota,如下:

/dev/sdb5   /mnt/ftp    ext3    defaults,usrquota, grpquota      0  0

[root@viong /]# <b>quotacheck -avug </b>

生成每個啟動了配額的檔案系統的目前磁盤用量表

quotacheck: Scanning /dev/sdb5 [/mnt/ftp] quotacheck: Cannot stat old user quota file: 沒有那個檔案或目錄

quotacheck: Old group file not found. Usage will not be substracted.

done

quotacheck: Checked 4 directories and 6 files

quotacheck: Old file not found.

注釋:

-a   :掃瞄所有在 /etc/mtab 裡頭已經 mount 的具有 quota 支援的磁盤 

-u  :掃瞄使用者的檔案與目錄 

-v  :顯示掃瞄過程 

-g  :掃瞄群組使用的檔案與目錄 

-m :強制進行 quotacheck 

 [root@viong /]#<b> edquota -u hom</b>   

為使用者hom設定磁盤配額

系統會自動用

VI文本打開配額檔案,如下:

Disk quotas for user hom (uid 501):

  Filesystem         blocks       soft       hard     inodes     soft     hard

  /dev/sdb5           16                0       <b>  1024</b>         4        0        0

這裡為了做測試,我把硬塊限度為1024kb

  注釋:

Filesystem是啟用了配額的檔案系統的名稱

blocks顯示了使用者目前使用的塊數,機關為

KB

soft用來設定使用者在該檔案系統上的軟塊限度.使用者在寬限期間之内,他的容量可以超過 soft ,但必需要寬限時間之内将磁盤容量降低到 soft 的容量限制之下

hard用來設定使用者在該檔案系統上的硬塊限度,絕對不能超過的容量

inodes顯示了使用者目前使用的i節點數量。

最後兩列用來設定使用者在該檔案系統上的軟硬i

節點限度.不同的是軟限可以在一段時期内被超過。 soft 到 hard 之間的容量其實就是寬限的容量啦!可以達到針對使用者的警示作用!這段時期被稱為過渡期(grace period),預設七天的超越。過渡期可以用秒鐘、分鐘、小時、天數、周數、或月數表示。

如果以上值中的任何一個被設定為 0,那個限度就不會被設定。

-u  :編輯 user 的 quota 

-g  :編輯 group 的 quota 

-t  :編輯寬限時間(就是超過 quota 值後,還能使用硬碟的寬限期限) 

-p  :copy 模闆(以建立好的使用者或群組)到另一個使用者(或群組) 

[root@viong /]# quotaon  -avu 

打開磁盤配額監控程序,u是使用者g是組,這裡我沒設定g參數

-a  :全部的 quota 設定都啟動(會自動去尋找 /etc/mtab 的設定) 

-u  :使用者的 quota 啟動 

-g  :群組的 quota 設定啟動 

-v  :顯示訊息  

/dev/sdb5 [/mnt/ftp]: user quotas turned on

[root@viong /]# quota -uvs hom

要校驗使用者的配額是否被設定

     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace

      /dev/sdb5      16       0    1024               4       0       0       

-g  :顯示 group 群組 

-u  :顯示 user 

-v  :顯示 quota 的值 

-s  :選擇 inod 或 硬碟空間來顯示 

[root@viong /]# edquota –t 

設定過渡期(grace period),隻針對軟限制而言

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/sdb5                     7days                  7days

檢視使用者配額

*** Report for user quotas on device /dev/sdb5

Block grace time: 7days; Inode grace time: 7days

                        Block limits                File limits

User            used    soft    hard  grace    used  soft  hard  grace

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

root      --   35880       0       0              5     0     0      

hom       --      16       0    1024              4     0     0     

  -a   列出在/etc/fstab檔案裡,有加入quota設定的分區的使用狀況與使用者和群組

  -g   列出所有群組的磁盤空間限制

  -u   列出所有使用者的磁盤空間限制

  -v   顯示該使用者或群組的所有空間限制

測試使用者配額是否生效

下面利用FlashXP做測試,上傳一首故鄉原風景.mp3,傳輸到1M就失敗了.說明生效了

[root@viong /]# quotaoff  -vug /dev/sdb5

關閉/mnt/ftp分區的磁盤限額

/dev/sdb5 [/mnt/ftp]: user quotas turned off

-a  :全部的 quota 設定都關閉(會自動去尋找 /etc/mtab 的設定)

最後并删除/etc/fstab中設定配額的部分

<b>總結:</b>在對使用者進行磁盤限額時,需要掌握以下幾點原則:

A.由于對使用者進行檔案數量的限制不是很實用,是以通常進行磁盤配額隻限制使用者占用的磁盤容量。

B.為使用者設定的軟限制和硬限制的數值都不應該小于使用者已占用的磁盤容量或檔案數量,否則可能造成使用者無法正常登入和使用系統。 

C.設定的硬限制數量應該大于軟限制數量,否則沒有實際的意義

D././boot/./proc./mnt/cdrom 等不要使用配額

E.quota 實際在運作的時候,是針對整個分區進行限制的,例如:如果你的 /dev/sdb5 是挂載在/mnt/ftp底下,那麼在 /mnt/ftp底下的所有目錄都會受到限制!

    本文轉自viong 51CTO部落格,原文連結:http://blog.51cto.com/viong/269485,如需轉載請自行聯系原作者

繼續閱讀