これは私が多くの情報を見つけることができないものなので、助けてくれてありがとう。
私の理解はこれである。次のファイルをインポートします。
-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:group
。phil: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プロセスには必要な権限があります。user
root
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 を使用してプロセスを実行するために特定のグループに属する必要はありません。