環境:

環境:

環境:

再現段階:

  1. 新しいデバイスポリシーの作成
cd /sys/fs/cgroup/devices
mkdir custom_poc
  1. 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
    
  1. 次に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のみ実行されます。whoamiwhoamiwrite(1, "root\n", 5)

ただし、echo a > /dev/pts/0シェルはリダイレクトを実行するためにファイルを開こうとしますが、今はそれを実行できないようにブロックされています。

おすすめ記事