pam_setquota.so

pam_setquota.so

我正在尝试为在 Debian10 服务器中创建帐户的每个新用户设置默认磁盘配额。

例如,user1 创建了一个帐户,并且在他第一次登录系统(通过 ssh 或 su 或其他方式)时,他的帐户获得了 100MB 磁盘配额硬限制,而无需服务器管理员的手动干预。

我制作了一个 perl 脚本,可以让我为用户设置磁盘配额,但它仅在 root 使用时才有效,这是有道理的,因为用户可以修改自己的配额。但是有没有办法将它与 pam 模块一起使用,以便自动设置用户配额?

是否有另一种(也许更好)的方法来为所有传入的新用户设置这些自动磁盘配额?

答案1

pam_setquota.so

您可以使用pam_setquota(8)。它正是为此而设计的。

您可能已经安装了它(在 下/usr/lib/x86_64-linux-gnu/security/pam_setquota.so),但如果没有,请先安装它:

apt install -y libpam-modules

要为新用户设置 100MB 配额,您需要编辑/etc/pam.d/common-session配置以包含此行

session required    pam_setquota.so fs=/home bsoftlimit=102400 bhardlimit=102400

在 Debian 和 Ubuntu 等衍生产品上,有一个额外的抽象层,用于协调编辑这些配置的多个包,称为pam-auth-更新(8)。所以你实际上需要做的是添加这个文件:

# /usr/share/pam-configs/setquota-home

Name: Set quotas for /home on first log in
Default: no
Priority: 120
Session-Type: Additional
Session-Interactive-Only: no
Session:
    required    pam_setquota.so fs=/home bsoftlimit=102400 bhardlimit=102400

然后重新编译/etc/pam.dwith的内容

pam-auth-update --enable setquota-home

或者,如果您像我经常那样编写脚本

DEBIAN_FRONTEND=noninteractive pam-auth-update --enable --force setquota-home

如果您有多个分区要设置配额,请pam-config为每个分区添加并启用单独的配额,将每个分区设置fs为每个不同分区的挂载点。

参数

bsoftlimit是不是立即阻止写入而是在一段时间过后阻止写入的阈值。如果您设置较大的bhardlimit,那么人们可能会在被阻止之前暂时超出其“配额”(又名bsoftlimit)(默认情况下最多 7 天),只要他们不超过其“限制”(又名bhardlimit) 。

bsoftlimitbhardlimit以 1KiB 为单位给出,因此 102400 代表 100MiB。 (如果您实际上想要 MB,而不是 MiB,则可以设置 97657)。联机帮助页说您必须同时设置两者,并且由于您只要求一个硬限制,所以我只是将它们设置为相同的值。

您还可以设置isoftlimit/ihardlimit来控制 inode 配额(大致上,允许多少个不同的文件),并且如果您设置了一个,则必须设置另一个。

如果您想为某些用户授予例外,请使用设置配额(8)提高(或降低)他们的配额 - 在这里您可以使用 K(千比字节)、M(兆比字节)、G(吉比字节)和 T(太字节)等单位,例如:

setquota hazimi 150M 2G 0 0 /home

要撤消此操作,请运行

setquota hazimi 0 0 0 0 /home

这算作删除配额,以便在下次登录时pam_setquota(8)重置配额。

如果不想允许临时异常,还有一个overwrite参数;如果你设置它像

required    pam_setquota.so fs=/home overwrite=1 bsoftlimit=102400 bhardlimit=102400

那么每个人的配额是被迫每次登录时最多 100MiB。

配额101

设置

您说您已经设置了配额,但对于发现此并需要备忘单的其他人:

  1. apt install -y quota

  2. 添加usrquota到您的安装选项中/etc/fstab,例如

    /dev/disk/by-uuid/89fc4b3e-3448-42d8-944d-588b6ec4284e /home ext4 defaults,usrquota 0 0
    

    在 Linux 上,还有两种其他类型的配额,“组”( grpquota) 和“项目”( prjquota),您也可以启用它们,但它们不受 pam_setquota(8) 管理,因此如果您想了解这些配额,请阅读手册 (并使用prjquotaread聊天(1))。

  3. 激活新选项:

    mount -o remount /home
    

    (要不就reboot

  4. 确认新选项生效:

    # mount | grep home
    /dev/mapper/home on /home type ext4 (rw,relatime,quota,usrquota,stripe=64)
    

    请注意,这usrquota也意味着quota.

  5. 用于quotacheck创建初始特殊/home/aquota.user文件:

    quotacheck -u -m /home
    

    这将需要一段时间,因为它将扫描整个分区来统计当前的使用情况;这就像fsck但为了配额。

  6. quotaon /home

    一旦启用配额,内核将/home/aquota.user有效地进行更新,而无需重新扫描整个磁盘,因为它可以跟踪所有写入,而无需重新扫描整个磁盘。

用法

如果您的用户具有 shell 访问权限,他们可以使用以下命令查看当前的配额配额(1)

$ quota -s --show-mntpoint --hide-device
Disk quotas for user hazimi (uid 1004): 
     Filesystem   space   quota   limit   grace   files   quota   limit   grace
          /home    120G*   100G   1024G   6days    344k       0       0        

作为管理员,您可以通过以下方式获取所有配额的概览代表配额(8)

相关内容