Linux下限制普通用户内存使用ulimit与硬盘配额quota教程

发布时间:2019-10-21编辑:脚本学堂
本文介绍了linux系统中限制普通用户内存使用ulimit,以及磁盘空间配额quota的方法,需要的朋友参考下。

一,使用ulimit限制普通用户内存

第1步,首先进到linux终端用vi编辑/etc/security/limits.conf :
 

# max memory locked : means the size of the memory which cannot be changed to swap
#@users          hard    memlock         11000000
#@users          hard    maxlogins       99
#@users          hard    data             2000000
#max virtual memory size for "users" group ::
@users           hard    as 4000000
#max memory size for "users" group  ::
@users           hard    rss             21000000

* hard core 0
* hard rss 5000
* hard nproc 20
 

这里代表除了Root的所有用户,( hard core 0) 是禁止core files“core 0”,( hard rss 5000) 是限制内存使用为5MB“rss 5000”, ( hard nproc 20 )是限制进程数为“nproc 50“。大家可以根据自己系统内存大小进行合理配置。

第2步:用vi编辑/etc/pam.d/login文件,然后加上下面这行保存退出就可以。
session required /lib/security/pam_limits.so
限制普通用户磁盘使用(基于quota程序)

磁盘配额的使用限制
仅针对整个分区:磁盘配额实际运行时,是针对“整个分区”进行限制的,例如,如果/dev/hda5载入在/home下,那么,在/home下面的所有目录都会受到限制。
 
核心必须支持磁盘配额:Linux系统核心必须支持磁盘配额模块。
 
磁盘配额的记录文件:使用的Kernel 2.6.XX的核心版本,这个核心版本支持新的磁盘配额模块,使用的默认文件(aquota.user、aquota.group)将不同于旧版本的quota.user和quota.group。旧版本的磁盘配额可以通过convertquota程序来转换
 
只对一般身份用户有效:并不是所有在Linux上的账号都可以设置磁盘配额,例如root就不能设置磁盘配额,因为他拥有整个系统所有的数据。
磁盘配额程序对硬盘配额的限制
最低限制( soft ):这是最低限制容量。用户在宽限期间之内,它的容量可以超过最低限制,但必须在宽限时间之内将磁盘容量降低到最低限制的容量限制范围之内。
 
最高限制( hard ):这是“绝对不能超过”的容量。通常最高限制会比最低限制高。 (www.jb200.com 脚本学堂)
 
宽限时间:宽限之间是指当用户使用的空间超过了最低限制,却还没有到最高限制时,在这个“宽限时间”内,就必须请用户将使用的磁盘空间降低到最低限制之下,否则则不允许在写入。反之,则宽限时间取消

实施步骤

磁盘配额从开始准备文件系统的支持,到整个设置结束的主要步骤如下:

步骤1:设置分区的文件系统支持磁盘配额参数
#vi /etc/fstab :
 
UUID=***     ext3     defaults,usrquota,grpquota     1 2
步骤2:生成磁盘配额的配置文件
quotacheck –cugm /home 生成磁盘配额的配置文件
在/home下生成aquota.user和aquota.group文档

参数:
a 检查任何起用了配额的在本地挂载的文档系统
b 在检查配额过程中显示周详的状态信息
u 检查用户磁盘配额信息
g 检查组群磁盘配额信息

这样就加入了磁盘配额的磁盘格式了。
不过,由于真正的磁盘配额在读取时时读取/etc/mtab文件,这个文件需要重启之后才能用/etc/fstab的新数据,所以这个时候可以选择 重新启动 或者
#mount -o remount /data

步骤3:打开磁盘配额
#quotaon -a

步骤4:编辑磁盘配额限制值数据
现在假设想给test用户10M的硬盘配额限制,他所拥有的最大文档数不得超过100个。
#edquota -u test       //test为用户名
进入编辑环境,将如下三行:
 

Quotas for user test:
/dev/hadx: blocks in use14,limits(soft=0, hard=0)
inodes in use: 12, limits (soft=0, hard=0)
改为:
Quotas for user test:
/dev/hdax: blocks in use: 14, limits (soft=10204, hard=10204)
inodes in use: 12, limits (soft=100, hard=100)
 

其中:blocks in use:用户已使用块的大小,单位是KB。inodes in use: 用户现有文档的大小。这两项都是系统自动给出,不必改变。

步骤5:设置一个预警期
如下所示:
# edquota -t
可以把预警期设置为1天,也可以使用分钟或秒。默认软限制是7天。

步骤6: 将已配置限额的用户设置复制到其他用户

#edquota -u test1 -p test
假如想给一批用户加上同样的限制。比方说给系统任何100个用户加上和test同样的限制。执行如下命令:
#edquota -p test ' awk -F:' $3 499 {print $1}' /etc/passwd'

步骤7:给用户组配置磁盘配额限制

#edquota -g usergroup

步骤8:设置启动时启动磁盘配额

#vi /etc/rc.d/rc.local
/sbin/quotaon -avug


步骤9:利用repquota显示更为完成的磁盘配额结果报告

例如:

#repquota /home
其他:
#repquota -a[-vug]
    #repquota -av             //查看所有具有磁盘配额文件系统的限制值
    #repquota -avu    username       //查看用户的磁盘配额限制值

基本磁盘配额命令详解:
在开始进行磁盘配额的实际练习之前,先了解一下磁盘配额使用的命令,这些命令分为两种,一种是查询功能(quota、quotacheck、quotastats、warnquota、requota),另一种则是编辑磁盘配额的内容(edquota、setquota)。

/etc/mtab
为什么要提这个文件系统实际载入的记录文件呢?要注意,当使用磁盘配额的时候,系统会去搜素:“系统上具有磁盘配额参数的分区”,所以,当要使用磁盘配额的功能时,系统文件必须要支持磁盘配额的标志。一般来说,是通过编辑/etc/fstab后,在重新载入文件系统的方法,来让系统的文件系统支持磁盘配额。

quota
这个命令仅仅用来“显示”当前某个用户或者组的磁盘配额值。
 
# quota -uvs    //这个是显示当前用户的配额值
 
-u:表示显示用户的配额
 
-g:表示显示组的配额
 
-v:显示每个文件系统的磁盘配额
 
-s:可以选择用Inode或者磁盘容量的限制值来显示
 
# quota -gvs   //显示root用户所在组的配额值
 
# quota -uvs test1   //显示test1用户的配额值
quotacheck

这个命令的主要目的是扫描某个磁盘的配额空间,它会针对分区进行扫描,并且,由于该磁盘持续运行,可能扫描过程中文件会增加,造成磁盘配额扫描错误,因此,当使用quotacheck时,该磁盘将“自动被设置为只读扇区”;扫描完毕后,扫描所得的磁盘空间结果会写入该区最顶端(aquota.user与aquota.group)
# quotacheck -cug   //扫描分区,并生成配额信息文件
-a:扫描所有在/etc/mtab内含有磁盘配额支持的文件系统,加上此参数,可以不写/mount_point
-v:显示扫描过程
-u:针对用户扫描文件与目录的使用情况,会建立quota.user
-g:针对组扫描文件及与目录的使用情况,会建立quota.group
-c :代表创建
Ps:如果提示不能quotacheck,权限不足,此时的原因是因为selinux ,关闭它就能创建了。

edquota

这个文件时编辑每一个“用户”或者“用户组”的磁盘配额数值。通常以edquota -u username或者是edquota -g groupname来编辑个人与用户组的磁盘配额值,不过这样一个一个分配很慢。也可以直接复制一个人的设置给另外一个人。用edquota -p user1 -u user2,下面介绍编辑时,里面的几个值。filesystem:代表这个磁盘是针对哪个分区。blocks:这个是当前用户在文件系统上所消耗的磁盘数量,也就是当前用户使用的空间,单位是KB。
-u:配置用户的磁盘配额
-g:配置组的磁盘配额
-p:复制磁盘配额设定,从一个用户到另一个用户
 
-t:修改宽限时间,可以针对分区
# edquota -u test1     //配置test1的磁盘配额
# edquota -p test1 -u test2   //将test1的配置服务复制到test2
# edquota -t    //修改宽限时间   可以针对每个分区
quotaon

这个命令是启动磁盘配额,不过,由于这个命令是启动aquota.group与aquota.user的,所以必须要先完成quotacheck的工作,然后执行quota -a即可启动
-u:针对用户启动磁盘配额
-g:针对用户组启动磁盘配额
-v:显示启动过程的相关信息
-a:根据/etc/mtab内的文件系统设置启动相关的磁盘配额,若不加-a的话,则后面就需要加上特定的文件系统

#quota -avug            //启动所有的磁盘配额
#quota -uv /data      //启动/data里面的用户磁盘配额设置
 

quotaoff
-a:全部文件系统的磁盘配额都关闭
-u:关闭用户的磁盘配额
-g:关闭组的磁盘配额

#quotaoff -a  //全部关闭
#quotaoff   -u /data     //关闭/data的用户磁盘配额设置值