我想限制每个用户对系统的使用。由于 Systemd 对 cgroups 有本机支持,我认为使用用户切片是可行的方法。
问题是:我不知道如何设置个人限制。我可以编辑 user.slice 单元文件以设置共同适用于所有用户切片的限制,但我没有看到对这些用户切片进行模板化的方法。
我可以通过创建一个 user-(uid).slice 单元文件来覆盖单个用户的这些设置,但我更愿意默认对所有用户应用限制。
是否可以设置默认限制?
编辑:经过一番探索后,我发现用户切片的单元文件是在 /run/systemd/system/ 中创建的。
[foo@bar Downloads]$ systemctl cat user-1000.slice
# /run/systemd/system/user-1000.slice
# Transient stub
# /run/systemd/system/user-1000.slice.d/50-After-systemd-logind\x2eservice.conf
[Unit]
After=systemd-logind.service
# /run/systemd/system/user-1000.slice.d/50-After-systemd-user-sessions\x2eservice.conf
[Unit]
After=systemd-user-sessions.service
# /run/systemd/system/user-1000.slice.d/50-Description.conf
[Unit]
Description=User Slice of foo
# /run/systemd/system/user-1000.slice.d/50-TasksMax.conf
[Slice]
TasksMax=infinity
Run Code Online (Sandbox Code Playgroud)
这些文件由 systemd 中的这段代码构建:https : //github.com/systemd/systemd/blob/401e33ed56f3cd3736bbab02ca6eb31aa592cf53/src/login/logind-dbus.c#L2928-L2998
这个文件的创建似乎被硬编码到 systemd 源代码中,并且不允许使用模板。
这在Ubuntu 18.04中对我有用:
1)编辑/data/repos/mhservers/etc/pam.d/common-session并添加:
session optional pam_systemd.so
Run Code Online (Sandbox Code Playgroud)
2)编辑/etc/security/limits.d/somename.conf和设置
someuser soft nofile 1024000
someuser hard nofile 1024000
Run Code Online (Sandbox Code Playgroud)
3)使用查找UIDid -u someuser
4)执行systemctl restart user@[UID].service
验证someuser可以执行systemctl --user show somesvr.service | grep NOFILE
| 归档时间: |
|
| 查看次数: |
8806 次 |
| 最近记录: |