新しいユーザーを作成したら、対応する l ノードを作成し、その制限値と特権を設定する必要があります。Solaris Resource Manager を使用する場合には、管理者がリミットデータベースと通常の Solaris パスワードマップを並行して保守する必要があります。次のコマンドを実行すると、対応する l ノードがないユーザーのユーザー ID とログイン名が表示されます。
# limreport \ !flag.real - uid lname |
l ノードの作成や削除は、アカウントの作成や削除に使うシステムコマンドで自動的には行われません。
これらのアクションを行うかどうかは、管理者次第です。しかし、ユーザーがログインするときに要求すれば、l ノードを自動的に作成できます。詳細は、PAM サブシステムを参照してください。
同様に、パスワードマップからユーザーアカウントを削除する場合は、その前に limadm(1MSRM) コマンドを使って、対応する l ノードをリミットデータベースから削除する必要があります。
サブツリーを削除する場合には、一番下の l ノードから順番に削除する必要があります。削除するサブツリーの一番上から始めると、親を削除された子は「親のない」状態になるため、削除した l ノードの子を制御できなくなります。
ユーザーのユーザー ID を変更する場合は、その l ノードの内容を、新しいユーザー ID に対応する新しい l ノードにコピーし、元の l ノードを削除します。l ノードのコピーと削除を参照してください。
子 l ノードがある場合は、新しく作成した l ノードか、他の適切な親 l ノードに接続します。次のコマンドを実行すると、ユーザー ID が X のスケジューリンググループ親を持つすべての l ノードを見つけ、それをユーザー ID が Y の l ノードの子にできます。
# limreport 'sgroup==X' '%u\tsgroup=Y\n' uid | limadm set -u -f - |
l ノードのユーザー ID を X から Y に変更するには、次の手順に従います。
ユーザー ID を変更する l ノードの状態を保存します。
# limreport 'uid==X' - lname preserve > /var/tmp/savelnode.X |
ユーザーのパスワードマップエントリのユーザー ID を古い値 (X) から新しい値 (Y) に変更します。
新しいユーザー ID の l ノードを作成し、前に保存した状態を復元します。
# limadm set -f /var/tmp/savelnode.X |
変更する l ノード (ユーザー ID X) のすべての子 l ノードに対し、スケジューリンググループを新しい l ノード (ユーザー ID Y) に変更します。
# limreport 'sgroup==X' '%u\tsgroup=Y\n' uid | limadm set -u -f - |
古い l ノードに接続されているプロセスがないか確認します。
chown(2) コマンドを使って、元のユーザー ID が所有するすべてのファイルの所有者を新しいユーザー ID に変更します。たとえば、次のように入力します。
# find / -user X -print | xargs chown Y |
古い l ノードを削除します。
# limadm delete X |
管理者は、ユーザーの l ノードを保守するツールとして主に limadm コマンドを使用します。このコマンドでは、指定する一連のユーザーアカウントに対し Solaris Resource Manager の属性値を変更します。これらのユーザーの l ノードが存在しない場合は、デフォルト値が設定されているブランクの l ノードが最初に作成されます。新しい l ノードのプロパティは次のように設定されます。
flag.real が set に設定される。
cpu.shares と cpu.myshares 属性が 1 に設定される。
uselimadm と admin フラグがクリアされる。
他のすべてのフラグは継承される。
すべてのリミット属性と使用量属性がゼロに設定される。
新しい l ノードのスケジューリンググループは、そのユーザーアカウントの l ノードが存在していればユーザー other (srmother) に、存在しなければ root l ノードにそれぞれ設定されます。
limadm を呼び出すには、変更を行うための管理特権が必要です。つまり、スーパーユーザーであるか、uselimadm フラグが設定されているか、自分のスケジューリンググループのメンバーの属性だけを変更できるグループ管理者である必要があります。グループ管理者が limadm を使用する場合には、次の制約があります。
グループ管理者の属性値を変更することはできません。
ユーザーの sgroup 属性は、limadm を使用するユーザーのスケジューリンググループのメンバーにしか割り当てることはできません。
グループ管理者は、スケジューリンググループ外のユーザーの属性を変更することはできません。
term usages 以外は、usages を格納するときに使用する属性値を変更することはできません。この制約がないと、グループ管理者は、いずれかの子の使用量を減らすことでグループの使用量を減らし、自分の l ノードのグループの制限値が適用されないようにできます。
フラグのデフォルト値以外の値に評価されるフラグがある場合には、グループ管理者は、このデフォルト値以外の、同じ値に変更するのであれば、グループのメンバーに対しこのフラグの値を変更できます
そのため、グループ管理者は、明示的に否定された特権を自分の影響下にあるユーザーに与えることはできません。
管理者は、limadm コマンドを使って l ノードを削除できます。このとき、対応するユーザーアカントはパスワードマップから削除されません。limadm を使用するには、スーパーユーザーであるか、uselimadm フラグが設定されている必要があります。admin フラグだけが設定されている場合には、自らがグループヘッダーであるスケジューリンググループのユーザーの l ノードしか変更できません。