在 Debian 上为 SFTP 用户设置磁盘配额
一 准备与前置条件
- 确认 SFTP 已启用并采用 internal-sftp + Chroot 的常用安全做法,便于将配额精确作用到用户可写目录。示例思路:创建 sftpusers 组,使用 Match Group sftpusers 段,设置 ChrootDirectory %h、ForceCommand internal-sftp,并关闭转发。若尚未配置,可先按此思路完成基础 SFTP 环境与权限布局,再继续配额设置。
二 安装并启用配额工具
- 安装配额工具包:
- sudo apt update
- sudo apt install quota
- 在包含用户数据(如 /home)的文件系统上启用配额选项。编辑 /etc/fstab,在对应挂载项添加 usrquota,grpquota(按需二选一或同时启用)。例如:
- /dev/sda1 /home ext4 defaults,usrquota,grpquota 0 2
- 重新挂载使选项生效(以 /home 为例):
- sudo mount -o remount /home
- 验证挂载选项是否已包含配额:
- cat /proc/mounts | grep ’ /home’
- 初始化配额数据库并开启配额(以 /home 为例):
- sudo quotacheck -cum /home
- sudo quotaon -vug /home
- 说明:上述步骤为在 Debian 上启用文件系统级配额的标准流程,适用于 SFTP 场景中对用户或组的磁盘与 inode 限制。
三 为用户设置配额
- 交互式编辑用户配额(磁盘块与 inode 的软/硬限制):
- sudo edquota -u username
- 在编辑器中设置例如:blocks 的 soft/hard、inodes 的 soft/hard(软限制为预警阈值,硬限制为强制上限)。
- 非交互式设置示例(将用户 alice 的磁盘硬限制设为 10GB,inode 硬限制设为 100000,单位为 KB/个):
- sudo setquota -u alice 0 10485760 0 100000 /home
- 说明:blocks 通常以 1KB 为单位;inodes 限制文件数量。设置完成后,用户通过 SFTP 写入时会在达到软/硬限制时分别触发告警与拒绝。
四 验证与运维
- 查看用户配额与当前用量:
- quota -u username
- 或 repquota -u /home(汇总报告)
- 测试与排错要点:
- 从客户端连接测试上传是否受限:sftp username@your_server_ip
- 若配额不生效,复核:/etc/fstab 挂载选项是否含 usrquota/grpquota、是否已执行 quotacheck/quotaon、用户写入目录是否在已启用配额的文件系统内。
- 若采用 Chroot,请确保用户可写目录的所有权和权限正确(常见做法:Chroot 根目录属 root:root 755,可写子目录属用户;否则可能导致写入失败与配额统计异常)。