chcon: '/usr/sbin/httpd' のコンテキストを変更できませんでした。権限が拒否されました

chcon: '/usr/sbin/httpd' のコンテキストを変更できませんでした。権限が拒否されました

私はSELiunxのコンセプトを初めて知りましたが、RHEL7 > SELinux ユーザーおよび管理者ガイド > 3.2. 制限のないプロセス

監査ログ

type=IPC msg=audit(1624375715.312:4225): ouid=0 ogid=0 mode=0666 obj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
type=PROCTITLE msg=audit(1624375715.312:4225): proctitle=2F7573722F7362696E2F6874747064002D44464F524547524F554E44
type=AVC msg=audit(1624375724.580:4226): avc:  denied  { unix_read unix_write } for  pid=25626 comm="httpd" key=1392707921  scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tclass=shm permissive=0
type=SYSCALL msg=audit(1624375724.580:4226): arch=c000003e syscall=29 success=no exit=-13 a0=53030951 a1=4338 a2=1b6 a3=6b items=0 ppid=25612 pid=25626 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)

httpd をunconfind_tドメインで実行するように変更しましたが、httpd をhttpd_tドメインに戻すことができなくなりました。

httpd によってホストされる 1 つの PHP プロセスによって呼び出される関数を動作さunconfined_tせるために、httpd をドメインに設定しました。shmget

[user@rhel7 ~]$ sudo chcon -t bin_t /usr/sbin/httpd
[user@rhel7 ~]$ ls -Z /usr/sbin/httpd
-rwxr-xr-x. root root system_u:object_r:bin_t:s0       /usr/sbin/httpd
[user@rhel7 ~]$ systemctl start httpd.service

.....

[root@rhel7 user]# chcon -r system_r -t httpd_t /usr/sbin/httpd
chcon: failed to change context of ‘/usr/sbin/httpd’ to ‘system_u:system_r:httpd_t:s0’: Permission denied
[root@rhel7 user]#

答え1

restorecon -v /usr/sbin/httpd実行するだけでデフォルト値に戻すことができます。

手動で変更する場合は、httpd_exec_tファイルのタイプとして使用する必要があります。

答え2

私も同様の問題を抱えていました。RH 8.5 で root としてログインすると、ファイルを に変更できませんでしたunconfined_t。 を使用することは、問題を「修正」する正しい方法ではないことに気付きましたunconfined_t。正しい方法は、上記のユーザーが提案したように、ファイルを既存の正しいタイプの一部にしてから を使用してsemanage fcontextその変更を永続化するか、新しいタイプとセキュリティ ポリシーを定義することです。あなたの場合は、 が適合するため、新しいポリシーは必要ありませんでしたhttpd_t

新しいサービスのタイプを に変更しようとしていましたunconfined_t。ここでも、理想的には、まったく新しいタイプとポリシーを作成する必要がありますが、それは私の能力の範囲を超えていました。しかし、

chcon -t unconfined_t my_file

許可を拒否されました。

解決策を探している人のために、私がやったことは次のとおりです。

# setenforce 0
# chcon -t unconfined_t my_file
# setenforce 1
# getenforce 
Enforcing

これが正しい方法かどうかはわかりませんが、これで作業は完了しました。後で新しいポリシーを記述し、それに使用するタイプを検討します。

関連情報