我正在尝试为在 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.d
with的内容
pam-auth-update --enable setquota-home
或者,如果您像我经常那样编写脚本
DEBIAN_FRONTEND=noninteractive pam-auth-update --enable --force setquota-home
如果您有多个分区要设置配额,请pam-config
为每个分区添加并启用单独的配额,将每个分区设置fs
为每个不同分区的挂载点。
参数
bsoftlimit
是不是立即阻止写入而是在一段时间过后阻止写入的阈值。如果您设置较大的bhardlimit
,那么人们可能会在被阻止之前暂时超出其“配额”(又名bsoftlimit
)(默认情况下最多 7 天),只要他们不超过其“限制”(又名bhardlimit
) 。
bsoftlimit
并bhardlimit
以 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
设置
您说您已经设置了配额,但对于发现此并需要备忘单的其他人:
apt install -y quota
添加
usrquota
到您的安装选项中/etc/fstab
,例如/dev/disk/by-uuid/89fc4b3e-3448-42d8-944d-588b6ec4284e /home ext4 defaults,usrquota 0 0
在 Linux 上,还有两种其他类型的配额,“组”(
grpquota
) 和“项目”(prjquota
),您也可以启用它们,但它们不受 pam_setquota(8) 管理,因此如果您想了解这些配额,请阅读手册 (并使用prjquota
read聊天(1))。激活新选项:
mount -o remount /home
(要不就
reboot
)确认新选项生效:
# mount | grep home /dev/mapper/home on /home type ext4 (rw,relatime,quota,usrquota,stripe=64)
请注意,这
usrquota
也意味着quota
.用于
quotacheck
创建初始特殊/home/aquota.user
文件:quotacheck -u -m /home
这将需要一段时间,因为它将扫描整个分区来统计当前的使用情况;这就像
fsck
但为了配额。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)。