
環境:
- オペレーティングシステム:中央オペレーティングシステム8(一般/centos8 徒歩旅行者箱)
- 仮想化: VMware-Workstation 16.1.0 ビルド-17198959
再現段階:
- 新しいデバイスポリシーの作成
cd /sys/fs/cgroup/devices
mkdir custom_poc
- ttyとして使用されているデバイスを確認します(複数の方法):
ttyを使用してください:
root@centos8# tty /dev/pts/0
プロセスSTDINのインポート:
ls -l /proc/$$/fd/{0,1,2} lrwx------. 1 root root 64 Mar 5 11:25 /proc/2446/fd/0 -> /dev/pts/0 lrwx------. 1 root root 64 Mar 5 11:25 /proc/2446/fd/1 -> /dev/pts/0 lrwx------. 1 root root 64 Mar 5 11:25 /proc/2446/fd/2 -> /dev/pts/0
- 次にttyデバイスを追加します
devices.deny
。
デバイスのメジャー番号とマイナー番号を確認してください。
ls -l /dev/pts/0 crw--w----. 1 vagrant tty 136, 0 Mar 5 11:28 /dev/pts/0
アクセス不可:
root@centos8# echo 'c 136:0 w' > /sys/fs/cgroup/devices/custom_poc/devices.deny root@centos8# echo $$ > tasks root@centos8# echo 'a' > /dev/pts/0 -bash: /dev/pts/0: Operation not permitted
ただし、STDINデバイスへのアクセスを削除した後でも、Bash端末は正常に動作します。以下は単純なwhoamiの出力です。
root@centos8# whoami root
答え1
~からカーネル文書:
トレースと実行のためのcgroupの実装開いているデバイスファイルの mknod 制限。
これらの制限は以下にのみ適用されます。開くデバイスファイル。これは、標準のUnix権限など、他のほとんどのアクセス制御権限と同じです。
読み取り+書き込みモードでファイルを開いた後、そのファイルを読み書きできます。アクセス制御はすべてのread()
合計に適用されないため、write()
オーバーヘッドが多すぎるため、アプリケーションで非常に驚くべき動作が発生する可能性があります。mmap
たとえば、ファイルがメモリ内で ped() されている場合にも適用することは困難です。
あなたの場合、制限が適用される前に/dev/pts/0
開かれました(おそらく親の1つ、ターミナルエミュレータ、おそらくgetty
... sshd
、シェルがファイル記述子を継承した可能性があります)。
同様に、実行するプロセスをフォークすると、子プロセスはfdを継承し、これらのfdはwhoami
実行中に保持され、デバイスファイルを開かずにaのみ実行されます。whoami
whoami
write(1, "root\n", 5)
ただし、echo a > /dev/pts/0
シェルはリダイレクトを実行するためにファイルを開こうとしますが、今はそれを実行できないようにブロックされています。