プロセスが特定のグループで実行されると、Linux権限はどのように機能しますか?

プロセスが特定のグループで実行されると、Linux権限はどのように機能しますか?

これは私が多くの情報を見つけることができないものなので、助けてくれてありがとう。

私の理解はこれである。次のファイルをインポートします。

-rw-r-----  1 root        adm   69524 May 21 17:31 debug.1

ユーザーはphilこのファイルにアクセスできません。

phil@server:/var/log$ head -n 1 debug.1
cat: debug.1: Permission denied

グループphilに追加すると、次のことが可能になります。adm

root@server:~# adduser phil adm
Adding user `phil' to group `adm' ...
Adding user phil to group adm
Done.
phil@server:/var/log$ head -n 1 debug.1
May 21 11:23:15 server kernel: [    0.000000] DMI: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.7.5.1-0-g8936dbb-20141113_115728-nilsson.home.kraxel.org 04/01/2014

ただし、明示的に設定された状態でプロセスが開始されると、ファイルを読み取ることはできませんuser:groupphil:philプロセスは次のように始まります。

nice -n 19 chroot --userspec phil:phil / sh -c "process"

プロセスが次から始まる場合phil:adm:

nice -n 19 chroot --userspec phil:adm / sh -c "process"

だから質問は実際には次のようになります。

プロセスがそのユーザーのセカンダリグループが所有するファイルにアクセスするのを防ぐ特定のユーザー/グループの組み合わせでプロセスを実行する際の特別な点は何ですか。この問題を解決する方法はありますか?

ベストアンサー1

プロセスはuidとgidを使用して実行されます。どちらも権限が割り当てられています。ユーザーとグループのカスタマイズを使用してchrootを呼び出すことはできますが、ユーザーは実際にはグループに属していません。その後、ユーザー uid と指定されたグループ gid を使用してプロセスが実行されます。

例を見てみましょう。名前がユーザーuserで、その人がグループに属していますstudent

root@host:~$ id user
uid=10298(user) gid=20002(student) groups=20002(student)

次のファイルがあります。

root@host:~$ ls -l file
-rw-r----- 1 root root 9 Mai 29 13:39 file

彼は読むことができません:

user@host:~$ cat file
cat: file: Permission denied 

これでcat、ユーザーとグループのコンテキストでプロセスを実行できるようになります。 catプロセスには必要な権限があります。userroot

root@host:~$ chroot --userspec user:root / sh -c "cat file"
file contents

上記の内容を見るのは面白いですid

root@host:~$ chroot --userspec user:root / sh -c "id"
uid=10298(user) gid=0(root) groups=20002(student),0(root)

はい、しかし、ユーザーはuserグループ(root)に属していません。id情報はどこで入手できますか?パラメータなしで呼び出すと、idシステムコールが使用されます。getuid()getgid()そしてgetgroups()。したがって、独自のプロセスコンテキストidが印刷されます。私たちはこのコンテキストを変更しました--userspec

引数を使用して呼び出すと、idユーザーのグループ割り当てのみが決まります。

root@host:~$ chroot --userspec user:root / sh -c "id user"
uid=10298(user) gid=20002(student) groups=20002(student)

あなたの質問について:

プロセスがそのユーザーのセカンダリグループが所有するファイルにアクセスするのを防ぐ特定のユーザー/グループの組み合わせでプロセスを実行する際の特別な点は何ですか。この問題を解決する方法はありますか?

プロセスが実行する必要がある操作を解決するために必要なセキュリティプロセスコンテキストを設定できます。すべてプロセスには、実行するように設定されたuidとgidがあります。通常、プロセスは、呼び出すユーザー uid と gid を対応するコンテキストとして「取る」。 「取る」とは、カーネルがこれを行うということです。それ以外の場合はセキュリティの問題になります。

したがって、実際にファイルを読み取る権限がないのは、ユーザーではなくプロセス(cat)の権限です。ただし、プロセスは呼び出し側ユーザーのuid / gidとして実行されます。

したがって、uid とグループの gid を使用してプロセスを実行するために特定のグループに属する必要はありません。

おすすめ記事