ある日、NISのデータベースをいじって、古いアカウントの整理をしたり、さまざまな管理用のグループを作ったりしていたら、急に、FreeBSDマシンへログインできなくなってしまいました。
sshでログインしようとすると、ログインできたかできないかの瞬間に、sshが終了してしまいます。/var/log/messagesをみると
Jun 5 21:40:41 freebsd sshd[34246]: fatal: initgroups: nhh: Invalid argument
というようなログが残ります。
じゃあ、ためしにtelnetでログインしようとすると、やっぱりtelnetが終了してしまいます。
Jun 5 21:49:32 freebsd login: initgroups(nhh,10085): Invalid argument
Jun 5 21:49:32 freebsd login: setusercontext() failed - exiting
initgroupsって何?って思って、man initgroupsしてみて、簡単なサンプルプログラムを作って確認してみました。
#include <unistd.h>
#include <stdio.h>int
main( int argc, char* argv[] )
{
const char* name = "nhhtest";
gid_t basegid = 10085;
int r = initgroups( name, basegid );
if ( r != 0 ) {
perror("initgroups");
}return 0;
}
nhhtestというアカウントを作成し、かつ、/etc/groupを書き換えて、nhhtestをたくさん(~16個ほど)のグループに所属させておきます。
プログラムを実行すると(root権限じゃないとダメみたいです)、おお~、r == -1になって、確かに「Invalid argument」というエラーです。
そういえば、以前、FreeBSDのメーリングリストか何かで、「1つのユーザーアカウントは、最大で16くらいまでしかグループに所属できない」という制限がある、と聞いたことがあります。おおっ、それかぁ~!
groupsというコマンドで、所属しているグループ一覧が表示されますが、ログインできたときの最大は、こんな感じ。
> groups
nhhtest wheel operator www group1 group2 group3 group4 group5 group6 group7 group8 group9 group10 group11
所属しているグループは15個。これ以上、所属グループを増やすと、ログインできなくなります。
というわけで、15個までしかグループに所属できないってことでしょうか。
(お仕事の)プロジェクトごとに、グループを作って、ファイルのアクセス制限を設定したりすることは、よくやるんじゃないかと思うのですが、所属できるのは15個まで、ってことなので、終わっちゃったプロジェクトのgroupは、さっさと消さないとダメよ!ってことですね。
・・・でも、15個を超えるとログインできなくなっちゃうって、バグといってもいいような気がしませんか?
0 件のコメント:
コメントを投稿