每创建一个新的用户,就应当创建一个相应的 lnode,并设置其限制和特权。只有创建了 lnode,用户才能登录。在使用 Solaris Resource Manager 时,管理员应当在维护常规的 Solaris 口令数据库的同时,也对限制数据库进行维护。命令:
# limreport \ !flag.real - uid lname |
可以用来打印出没有对应 lnode 的用户的 UID 和登录名称列表。
在本版本中,用于创建和删除帐户的系统命令并不自动创建和删除 lnode。要由管理员来进行这些操作。但是,用户登录时,可以根据要求自动创建 lnode,请参阅 "PAM 子系统",了解更多的细节。
同理,就在从口令映射中删除某一用户帐户之前,应当从限制数据库删除其对应的 lnode,方法是使用 limadm(1MSRM)命令。
如果某个用户的 UID 被更改,则应当将其 lnode 的内容复制到一个与新的数字相对应的新的 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。请参阅 "创建和删除 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 设置为清空;
所有其它标志设置为继承;
所有的限制和利用率属性设置为零。
新的 lnode 的调度组设置为 limadm 的调用者,条件是该用户是一个分管理员;否则(如果调用者是根或者其 uselimadm 标志得到设置),则设置为用户其它,条件是该用户帐户否则设置为根 lnode。
limadm 调用者需要足够的管理特权才能进行所指定的更改。其必须是超级用户,有一个得到设置的 uselimadm 标志,或者是分管理员,且只是要更改其调度组成员的属性。分管理员使用 limadm 时受到限制:
其无法更改其自身的属性值,除非其拥有 selfadmin 条件(例如,cpu.myshares 属性)。
用户的 sgroup 属性只能指派给身为调用者调度组成员的组头目,或者调用者自己。
其无法更改其调度组之外的用户的属性。
其无法更改任何用于存储 usages 的属性的值。如果缺少这一限制,则分管理员有可能通过减少其子节点的利用率,减少组的利用率,从而逾越组限制。
如果其所拥有的一个标志的值与该标志的默认值相反,则其无法为其组成员更改该标志的值,除非是将该标志设置为相同的相反的值。这就确保那些特权明确遭到拒绝的分管理员无法将这些特权赋予任何受其影响的用户。
limadm 命令使得管理员可以删除某一 lnode,而不删除口令映射中相对应的用户帐户。如要使用 limadm,调用者必须是超级用户,有一个设置过的 uselimadm 标志,或者有一个设置过的 admin 标志。如果调用者有一个设置过的 admin 标志,则其只能删除其为组头目的用户的 lnode。