每创建一个新的用户,就应当创建一个相应的 lnode,并设置其限制和特权。在使用 Solaris Resource Manager 时,管理员应当在维护常规的 Solaris 口令数据库的同时,也对限制数据库进行维护。命令:
# limreport \!flag.real - uid lname |
可以用来打印出没有对应 lnode 的任何用户的 UID 和登录名的列表。
在本版本中,用于创建和删除帐户的系统命令并不自动创建和删除 lnode。要由管理员来进行这些操作。但是,用户登录时,可以根据要求自动创建 lnode,请参阅 PAM 子系统,了解更多的细节。
类似地,在从口令图中删除一个用户帐户之前,应该使用 limadm(1MSRM) 命令从限制数据库中删除对应的 lnode。
在删除 lnode时,应确保从最底层的 lnode 向上删除子树。如果您从您正在删除的子树的顶端开始,您就可能丧失对被删除 lnode 的子节点的控制,因为当它们的父节点被删除时,它们就会孤立。
只要某个用户的 UID 被更改,就应该把该用户的 lnode 的内容复制到一个对应新的 UID 的新的 lnode上,并应该删除原始的 lnode。请参阅 复制和删除 lnode。
任何子 lnode 均应当附加到新建的 lnode,或者附加到其它合适的父 lnode。命令:
# limreport 'sgroup==X' '%u\tsgroup=Y\n' uid | limadm set -u -f - |
可以用来查找其调度组父节点的 UID 为 X 的所有 lnode,并使其成为 UID 为 Y 的 lnode 的子节点。
下面的步骤演示的是将某一 lnode 的 UID 从 X 更改为 Y。
保存所要更改 UID 的 lnode 的状态:
# limreport 'uid==X' - lname preserve > /var/tmp/savelnode.X |
将该用户的口令映射条目的 UID 从旧的值(X)更改为新的值(Y)。
为新的 UID 创建一个 lnode,恢复先前所保存的状态:
# limadm set -f /var/tmp/savelnode.X |
针对将要更改的 lnode(UID X)的所有子 lnode,将其调度组更改到新的 lnode(UID Y):
# limreport 'sgroup==X' '%u\tsgroup=Y\n' uid | limadm set -u -f - |
确保当前没有进程附加到旧的 lnode 上。
使用 chown(2) 命令把原始 UID 所拥有的所有文件的所有者更改为新的 UID。例如:
# find / -user X -print | xargs chown Y |
删除旧的 lnode:
# limadm delete X |
limadm 命令是管理员用来维护用户的 lnode 的主要工具。该命令对某一列表的用户帐户的 Solaris Resource Manager 属性值进行更改。如果有任何用户的 lnode 并不存在,则先创建一个用缺省值填充的空白 lnode。新的 lnode 创建时带有如下属性:
flag.real 得到设置;
cpu.shares 和 cpu.myshares 属性设置为 1;
标志 uselimadm 和 admin 设置为清空;
所有其它标志均被设置为 inherit;
所有的限制和利用率属性均设置为零。
新 lnode 的调度组被设置为用户“其它”(srmother)(如果存在一个针对该用户帐户的 lnode 的话)或者设置为 root lnode。
limadm 调用者需要足够的管理特权才能进行指定的更改。调用者必须是超级用户,有一个已设定的 uselimadm 标志,或者是一个只更改该调用者所属调度组成员的属性的组管理员。限制适用于组管理员对 limadm 的使用。
组管理员不能更改其自己的属性值。
某个用户的 sgroup 属性只能赋予调用者或者是该调用者的调度组的一个成员。
组管理员无法更改其调度组之外用户的属性。
他们不能改变用于保存 term 利用率之外的利用率的任何属性的值。如果没有这个限制,组管理员就能通过减少其某个子节点的利用率而绕过其自己的 lnode 中的组限制,这样就减少了组利用率。
如果组管理员有一个被赋予缺省值以外值的标志,则只有当他们在将它变成同一个非缺省值时,才可以为他们组中的另一个成员改变此标志的值。
这就确保了有被明确拒绝特权的组管理员不能把这些特权授予在其影响之下的任何用户。
limadm 命令使得管理员可以删除某一 lnode,而不删除口令映射中相对应的用户帐户。要使用 limadm,调用者必须是超级用户或有一个已设置的 uselimadm 标志。如果调用者只有一个已设置的 admin 标志,那么调用者只可以修改以其为组长的调度组中的用户的 lnode。