13.7 用户分级与资源配额(login.conf)

/etc/login.conf 概述

/etc/login.conf 是登录类能力数据库(最早引入自 FreeBSD 2.1.5),该文件用于控制资源配额、计量配额以及默认用户环境设置。系统中的各种程序利用它建立用户的登录环境,并执行策略、计数和管理限制。它还提供了用户认证以及可用认证类型的配置方式。

对于普通用户,其路径为 ~/.login_conf。记录 ID 为“me”的条目只能覆盖该用户部分的用户分级配置。

login.conf 在 FreeBSD 源代码中的位置为 usr.bin/login/login.conf,该文件即默认配置,默认设置实际上禁用了资源配额,以便用户开箱即用并便于进一步配置。

注意

每次修改该文件后,必须手动运行 cap_mkdb /etc/login.conf 来刷新数据库。只有在将文件编译为数据库后,修改才会生效。该数据库文件的扩展名为 .db,可以通过 cgetent(3) 调用。

默认配置文件释读

# 请注意,像 "cputime" 这样的条目会同时设置 "cputime-cur" 和 "cputime-max"。
# "default" 登录类会自动(由 login(1) 实现)应用于所有在 `/etc/master.passwd` 中未设置有效登录类的非 root 用户。
# 请注意,由于冒号 ':' 用于分隔能力条目,因此在能力的值或名称中嵌入字面冒号时必须使用 `\c` 转义序列(有关更多转义序列,请参见 getcap(3) 的 “CGETNUM AND CGETSTR SYNTAX AND SEMANTICS” 部分)。
# UID 为 0 的用户(root)如果没有有效登录类,则使用 root 记录(若有),否则使用 default。
# default 登录类

default:\
	:passwd_format=sha512:\ # 新建或更改密码将使用的加密格式。类型为字符串。有效值为 `"des"`、`"md5"`、`"blf"`、`"sha256"` 和 `"sha512"`;详细信息请参见 `crypt(3)`。使用非 FreeBSD NIS 服务器的 NIS 客户端通常应使用 `"des"`。
	:copyright=/etc/COPYRIGHT:\ # 区分操作系统版权信息与在每次用户登录时额外显示的信息。实际上不存在该文件。cp /COPYRIGHT /etc/。实际上不生效
	:welcome=/var/run/motd:\  # 登录后会看到的信息
	:setenv=BLOCKSIZE=K:\  # 由逗号分隔的环境变量及其对应值的列表。包含逗号的值必须加引号。`BLOCKSIZE=K` 即让命令以 KB 大小格式显示
	:mail=/var/mail/$:\  # 将环境变量 `$MAIL` 设置为指定的值。
	:path=/sbin /bin /usr/sbin /usr/bin /usr/local/sbin /usr/local/bin ~/bin:\  # 默认的 PATH 环境变量路径,会在其中查找可执行文件
	:nologin=/var/run/nologin:\  # 若该文件存在,将打印该文件到屏幕上,并且对应用户的登录会话将被终止。
	:cputime=unlimited:\  # 限制进程可使用的 CPU 时间量。类型为时间,默认单位为秒。时间值可以使用不同单位表示:`y` 表示年(365 天)、`w` 表示周、`d` 表示天、`h` 表示小时、`m` 表示分钟、`s` 表示秒。单位可以连写,其值会累加。例如,2 小时 40 分钟可以写作 9600s、160m 或 2h40m。
	:datasize=unlimited:\  # 限制数据段(属于静态内存分配)的最大大小。类型为数值,默认单位为字节。常用单位包括 b、k、m、g、t,分别表示 512 字节、KB、MB、GB 和 TB,大小写不敏感。多个值可以连写,其数值会累加。例如 2g512M 表示总大小为 2.5GB。
	:stacksize=unlimited:\  # 最大栈大小限制。类型为数值。
	:memorylocked=64K:\  # 最大核心锁定内存大小限制。类型为数值。
	:memoryuse=unlimited:\  # 最大核心内存使用量限制。类型为数值。
	:filesize=unlimited:\  # 限制进程可以创建的文件的最大大小。类型为数值。
	:coredumpsize=unlimited:\ # 最大 coredump 大小限制。类型为数值。
	:openfiles=unlimited:\  # 限制每个进程允许打开的最大文件数。类型为数字。数字类型可以是十六进制(`0x` 开头)或八进制(`0` 开头),每次只能指定一个值,也可以用字符串格式。数据库中所有记录必须统一使用同一表示方法。
	:maxproc=unlimited:\  # 限制最大进程数。类型为数字。
	:sbsize=unlimited:\  # 最大的套接字缓冲区大小。类型为数值。
	:vmemoryuse=unlimited:\  # 每个进程允许的最大虚拟内存使用量。类型为数值。
	:swapuse=unlimited:\  # 最大交换空间大小限制。类型为数值。
	:pseudoterminals=unlimited:\  # 最大伪终端数量。类型为数字。
	:kqueues=unlimited:\  # 每个进程可创建的 kqueue 数量。类型为数字。
	:umtxp=unlimited:\  # 最大进程间共享的 pthread 锁数量。类型为数字。
	:pipebuf=unlimited:\  # 管道缓冲区的最大大小。类型为数字。
	:priority=0:\  # 初始进程优先级等级。类型为数字。用于设置进程的初始优先级:既可使用普通 nice 范围(-20 到 20),也可映射到实时或空闲优先级;若设置特殊值 “inherit” 表示继承原有优先级,不进行重置。0 代表正常优先级。
	:umask=022:\  # 设置初始 umask。类型为数字,应以 0 开头以确保按八进制识别。特殊值 "inherit" 表示保持原有 umask 不变。022 表示文件默认权限为 644,目录默认权限为 755。
	:charset=UTF-8:\  # 指定环境变量 `$MM_CHARSET`(邮件相关程序会使用)的值。类型为字符串。
	:lang=C.UTF-8:  # 指定环境变量 `$LANG` 的值。类型为字符串。一般修改此处可实现整个操作系统的全局 i18n。

#
# 一组常见的类别名称——将它们全部转发到 'default'(login 通常也会这么做,但在这里有类别名称会抑制诊断信息)。
#
standard:\
	:tc=default:
xuser:\
	:tc=default:
staff:\
	:tc=default:

# 该 PATH 可能会被各个应用程序覆盖。特别是在默认情况下,rc(8)、service(8) 和 cron(8) 在启动服务或任务时会使用默认 PATH,而该 PATH 可能不包含 /usr/local/sbin 和 /usr/local/bin。
daemon:\
	:path=/sbin /bin /usr/sbin /usr/bin /usr/local/sbin /usr/local/bin:\
	:mail@:\
	:memorylocked=128M:\
	:tc=default:
news:\
	:tc=default:
dialer:\
	:tc=default:

#
# 让 Root 始终可以登录。
#
# 注意,对于 root 账户,login_getpwclass(3)(仅限该软件,不是全局设置)会应用此条目,而不是 'default' 中的参数。
root:\
	:ignorenologin:\  # 防止误操作,避免因 nologin 设置而阻止 root 登录
	:memorylocked=unlimited:\  # 防止误操作,避免内存配额限制导致 root 无法分配内存
	:tc=default:  # 继承或复用另一个登录类(此处是 default)的属性和能力,避免重复定义。如果子类中有与父类同名的能力条目,则子类中的值会覆盖父类的值。

#
# 为俄罗斯用户账户配置正确的环境变量
#
# russian 登录类。可使用命令 `pw usermod XXX -L russian` 指定用户 XXX 使用该登录类。
#
russian|Russian Users Accounts:\
	:charset=UTF-8:\
	:lang=ru_RU.UTF-8:\
	:tc=default: # 继承或复用另一个登录类(此处是 default)的属性和能力,避免重复定义。如果子类中有与父类同名的能力条目,则子类中的值会覆盖父类的值。


######################################################################
######################################################################
##
## 示例条目
##
######################################################################
######################################################################

## 示例默认值
## 这些设置默认由 login(1) 分配给无类别用户。请注意,像 "cputime" 这样的条目会同时设置 "cputime-cur" 和 "cputime-max"。
#
#default:\
#	:cputime=infinity:\
#	:datasize-cur=22M:\
#	:stacksize-cur=8M:\
#	:memorylocked-cur=10M:\
#	:memoryuse-cur=30M:\
#	:filesize=infinity:\
#	:coredumpsize=infinity:\
#	:maxproc-cur=64:\
#	:openfiles-cur=64:\
#	:priority=0:\
#	:requirehome@:\
#	:umask=022:\
#	:tc=auth-defaults:
#
#
##
## standard - 标准用户默认值
##
#standard:\
#	:copyright=/etc/COPYRIGHT:\
#	:welcome=/var/run/motd:\
#	:setenv=BLOCKSIZE=K:\
#	:mail=/var/mail/$:\
#	:path=~/bin /bin /usr/bin /usr/local/bin:\
#	:manpath=/usr/share/man /usr/local/man:\
#	:nologin=/var/run/nologin:\
#	:cputime=1h30m:\
#	:datasize=8M:\
#	:vmemoryuse=100M:\
#	:stacksize=2M:\
#	:memorylocked=4M:\
#	:memoryuse=8M:\
#	:filesize=8M:\
#	:coredumpsize=8M:\
#	:openfiles=24:\
#	:maxproc=32:\
#	:priority=0:\
#	:requirehome:\
#	:passwordtime=90d:\
#	:umask=002:\
#	:tc=default:
#
#
##
## X 用户(需要更多资源!)
##
#xuser:\
#	:manpath=/usr/share/man /usr/local/man:\
#	:cputime=4h:\
#	:datasize=12M:\
#	:vmemoryuse=infinity:\
#	:stacksize=4M:\
#	:filesize=8M:\
#	:memoryuse=16M:\
#	:openfiles=32:\
#	:maxproc=48:\
#	:tc=standard:
#
#
##
## Staff(工作人员)用户——限制少,可随时登录
##
#staff:\
#	:ignorenologin:\
#	:requirehome@:\
#	:accounted@:\
#	:path=~/bin /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin:\
#	:umask=022:\
#	:tc=standard:
#
#
##
## root - root 登录的备选方案
##
#root:\
#	:path=~/bin /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin:\
#	:cputime=infinity:\
#	:datasize=infinity:\
#	:stacksize=infinity:\
#	:memorylocked=infinity:\
#	:memoryuse=infinity:\
#	:filesize=infinity:\
#	:coredumpsize=infinity:\
#	:openfiles=infinity:\
#	:maxproc=infinity:\
#	:memoryuse-cur=32M:\
#	:maxproc-cur=64:\
#	:openfiles-cur=1024:\
#	:priority=0:\
#	:requirehome@:\
#	:umask=022:\
#	:tc=auth-root-defaults:
#
#
##
## /etc/rc 使用的设置
##
#daemon:\
#	:coredumpsize@:\
#	:coredumpsize-cur=0:\
#	:datasize=infinity:\
#	:datasize-cur@:\
#	:maxproc=512:\
#	:maxproc-cur@:\
#	:memoryuse-cur=64M:\
#	:memorylocked-cur=64M:\
#	:openfiles=1024:\
#	:openfiles-cur@:\
#	:stacksize=16M:\
#	:stacksize-cur@:\
#	:tc=default:
#
#
##
## news 子系统使用的设置
##
#news:\
#	:path=/usr/local/news/bin /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin:\
#	:cputime=infinity:\
#	:filesize=128M:\
#	:datasize-cur=64M:\
#	:stacksize-cur=32M:\
#	:coredumpsize-cur=0:\
#	:maxmemorysize-cur=128M:\
#	:memorylocked=32M:\
#	:maxproc=128:\
#	:openfiles=256:\
#	:tc=default:
#
#
##
## dialer 类应当用于拨号 PPP 账号
## 欢迎信息/新闻已被屏蔽
##
#dialer:\
#	:hushlogin:\
#	:requirehome@:\
#	:cputime=unlimited:\
#	:filesize=2M:\
#	:datasize=2M:\
#	:stacksize=4M:\
#	:coredumpsize=0:\
#	:memoryuse=4M:\
#	:memorylocked=1M:\
#	:maxproc=16:\
#	:openfiles=32:\
#	:tc=standard:
#
#
##
## dialer 类,应当用于拨号 PPP 账号
## 欢迎信息/新闻已被屏蔽
##
#site:\
#	:passwordtime@:\
#	:refreshtime@:\
#	:refreshperiod@:\
#	:sessionlimit@:\
#	:autodelete@:\
#	:expireperiod@:\
#	:graceexpire@:\
#	:gracetime@:\
#	:warnexpire@:\
#	:warnpassword@:\
#	:idletime@:\
#	:sessiontime@:\
#	:daytime@:\
#	:weektime@:\
#	:monthtime@:\
#	:warntime@:\
#	:accounted@:\
#	:tc=dialer:\
#	:tc=staff:
#
#
##
## 订阅等级的标准会计分录示例
##
#
#subscriber|Subscribers:\
#	:accounted:\
#	:refreshtime=180d:\
#	:refreshperiod@:\
#	:sessionlimit@:\
#	:autodelete=30d:\
#	:expireperiod=180d:\
#	:graceexpire=7d:\
#	:gracetime=10m:\
#	:warnexpire=7d:\
#	:warnpassword=7d:\
#	:idletime=30m:\
#	:sessiontime=4h:\
#	:daytime=6h:\
#	:weektime=40h:\
#	:monthtime=120h:\
#	:warntime=4h:\
#	:tc=standard:
#
#
##
## 订阅账号。这些账号的登录时间会被记录,并且会施加访问限制。
##
#subppp|PPP Subscriber Accounts:\
#	:tc=dialer:\
#	:tc=subscriber:
#
#
#subshell|Shell Subscriber Accounts:\
#	:tc=subscriber:
#
##
## 如果你希望部分账号使用传统的 UNIX DES 加密密码哈希。
##
#des_users:\
#	:passwd_format=des:\
#	:tc=default:

参考文献

最后更新于