pam_group.so によって割り当てられた newgrp とグループ

pam_group.so によって割り当てられた newgrp とグループ

便宜上、このグループのディレクトリサーバーにすべてのユーザーを追加するのではなく、/etc/security/group.conf(pam_group.so)メカニズムを使用して、フロッピー、オーディオ、プラグ開発、ビデオなどの特別なグループメンバーシップを割り当てることをお勧めします。 。

これはデバイスアクセスにはうまく機能しますが、外部プログラムがgetgrentを介して特定のグループのユーザーメンバーシップを確認しようとすると問題を引き起こす傾向があります。

今私はこれらのグループの1つにnewgrpを試してみましたが、これは不可能であることに気づきました(システムはDebian squeezeです)。これはnewgrpのバグですか、それとも私のサイトの設定の問題ですか?

newgrpはUnix API側で実際に何をしますか? setgidはルート専用のシステムコールであるようです。特定のユーザーがsetgitターゲットグループのメンバーであれば、それも許可されると思いました。

私は実際にこの問題を偶然見つけました。なぜなら、mount.davfsが私がdavfs2グループのメンバーではないと言ったからです。もちろんそれは本当ですが、それはpam_group.soによって割り当てられたグループでもありました。

ベストアンサー1

newgrpすでにアクセス権があるグループにのみアクセスできます。役に立たないと思いますか?基本的にそうです。これは、プロセスが2つ以上のグループに属することができなかった頃から起こりました。パスワードで保護されたグループにアクセスすることもできますが、これは非常にまれです。

カーネルの観点から、各プロセスは1つ以上のグループに属します。setgidrootとして実行するか、setgidプログラム内で実行している場合にのみ使用できます(実(実行)グループと有効(実行)グループの間の置き換え)。カーネルはユーザーとグループのデータベースを認識しません。

ユーザーおよびグループデータベース(/etc/passwd、、/etc/groupLDAPなど)/etc/security/group.confは、ログインと特権の昇格(通常PAM経由)を管理する他のプログラムによってlogin管理されますsu。ログインすると、その他のファイルにリストされているグループに割り当てられます/etc/passwd/etc/groupプロセスpam_groupsは次のとおりです。

gid_t groups[…] = /*extra GIDs computed from /etc/group and so on*/;
setgroups(sizeof(groups)/sizeof(gid_t), groups);
setgid(gid); /*main GID read from /etc/passwd*/
setuid(uid);
execve(shell, "-sh"); /*shell read from /etc/passwd*/

つまり、root権限の放棄(つまり、ターゲットユーザーに変更)は、他のすべての権限管理の後、ユーザーシェルを呼び出す前に実行されます。プロセスがルートとして実行されなくなると、追加のグループを取得できません。

ユーザーをグループに追加した場合は、そのユーザーが次回ログインしたときに適用されます。別の端末にログインするか、SSHを介して別のセッションを開始すると、そのセッションのプロセスには、ログインしているグループに関係なくユーザーグループがあります。groupsまたは、コマンドを使用して、自分が属するidグループ(つまり、で始まった特定のプロセス)を確認できます。groups

だから私はあなたの明示的な質問に答えました(newgrpそれは私の役割を果たしており、あなたが考えたものとは異なります)。私はあなたの問題を解決したかもしれないし、解決しなかったかもしれません。これは、ユーザーとグループのデータベースを見つけるためにログインできないアプリケーションでは一般的ではありません。通常、要求されたプロセスがそのグループのメンバーであるかどうかを調べてアクセスを決定します。特定のアプリケーションについてご質問がある場合はお知らせください。

おすすめ記事