グループ内のユーザーに対する権限が拒否されました(グループにはディレクトリ書き込み権限があります)。

グループ内のユーザーに対する権限が拒否されました(グループにはディレクトリ書き込み権限があります)。

グループの所有権があるディレクトリにファイルを作成/タッチしようとすると、「権限が拒否されました」というメッセージが表示されます。

/data/www/acoder.txtをタッチしてください。

[acoder@box]$ touch /data/www/acoder.txt
touch: cannot touch '/data/www/acoder.txt': Permission denied

猫/背中/グループ

webdev:x:1001:acoder

id私はwebdevグループに属していることを示しています。

[acoder@box ~]$ id
uid=1000(acoder) gid=1000(acoder) groups=1000(acoder),10(wheel),1002(webdev) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

ll -lZ /データ/

drwxr-xr-x. 3 apache webdev system_u:object_r:httpd_sys_rw_content_t:s0 4096 Mar 20 15:39 www

nami-olm/data/www

[acoder@box ~]$ namei -olm /data/www
f: /data/www
dr-xr-xr-x root   root   /
drwxr-xr-x root   root   data
drwxrwx--- apache webdev www

アコーダがグループ内にあり、インクルードディレクトリのグループ所有権(書き込み権限を含む)を持っている場合、権限webdev拒否webdevエラーを引き起こす可能性があるもう1つの要因は何ですか?

編集する

auseachへの参照を見つけてくださいtouch

時間 - > 2023年3月21日火曜日09:21:15

Node=box.example.com 型=PROCTITLE msg=audit(1679404875.375:8966252): proctitle=746F756368002F646174612F7777772F6164726961324E

node=box.example.com type=PATH msg=audit(1679404875.375:8966252): item=0 name="/data/www/" inode=128 dev=fd:0e mode=040755 ouid=48 ogid=1002 00:00 obj=system_u:object_r:httpd_sys_rw_content_t:s0 名前タイプ=親 cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0

Node=box.example.com type=CWD msg=audit(1679404875.375:8966252): cwd="/home/acoder"

Node=box.example.com タイプ=SYSCALL msg=audit(1679404875.375:8966252): arch=c000003e syscall=257 成功=終了なし=-13 a0=ffffff9c a1=7fff2ee2e64b2 pid=602594 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts25 ses=1 comm="u subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="アクセス"

ユーザーアコーダーがファイルをアップロードしようとすると、エラー/data/www/-1も受信されます。sftp

時間 - > 2023年3月21日火曜日09:30:14

Node=box.example.com type=PROCTITLE msg=audit(1679405414.563:8966285): proctitle="/usr/libexec/openssh/sftp-server"

node=box.example.com type=PATH msg=audit(1679405414.563:8966285): item=1 name="/data/www/" inode=536875051 dev=fd:0e mode=040770 ouid=48 ogi 00:00 obj=unconfined_u:object_r:httpd_sys_rw_content_t:s0 名前タイプ=親 cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0

Node=box.example.com type=PATH msg=audit(1679405414.563:8966285): item=0 name="/data/www/acoder.php" inode=626000347 dev=fd:0e mode=0100680 ou 1002 rdev=00:00 obj=unconfined_u:object_r:httpd_sys_rw_content_t:s0 nametype=normal cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0

Node=box.example.com type=CWD msg=audit(1679405414.563:8966285): cwd="/home/acoder"

Node=box.example.com タイプ=SYSCALL msg=audit(1679405414.563:8966285): arch=c000003e syscall=257 成功=終了なし=-1 a0=ffffff9c a1=561c6002f6e2 pid=602649 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=(なし) ses=3674 comm libexec/openssh/sftp-server" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="access"

Node=box.example.com タイプ=FANOTIFY msg=audit(1679405414.563:8966285): resp=2

[ルート@ボックス]#

どちらの場合も、コンテキストを次のように表示する検索が表示されます。

subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

ただし、ファイルシステムの実際のコンテキストは次のとおりです。

context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

~によるとRHELドキュメント

トピック=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

subj フィールドは SELinux コンテキストを記録します。実行時に分析されたプロセスの表示

これが実際に何を意味するのか混乱しています。 SELinuxが読んでいるコンテキストが私が見ているものとは異なりますかll -lZ

2つのausearch結果を参照してsyscall=257openatそれぞれ257個ausyscall

audit2allow関連ポリシーの変更はお勧めできません。

[root@box]# ausearch -c 'touch' --raw | audit2allow -M my-touch
Nothing to do
[root@box]# 

編集2(2023年3月24日)

私は問題を次に絞ったと信じています。ファブリサイド。このサービスを停止すると、SFTP経由でファイルを転送できます。ただし、実行している必要があるため、sftp(およびおそらくまだ知らない他のプロセス)へのアクセスを許可するように設定する方法を学ぶ必要があります。

もっとアイデアがありますか?

答え1

これは結局fapolicyd拒否された。

これがベストプラクティスと見なされるかどうかはわかりませんが、次のように問題を解決しました。

新しいルールを追加:

# fapolicyd-cli --file add /data/www/nbsprod/public_html/ --trust-file nbsprod_pub_html

更新ルールfapolicyd-cli

# fapolicyd-cli --update

fapolicyd適用モード(許可モードではない)で実行するように設定されていることを確認してください。

# vi /etc/fapolicyd/fapolicyd.conf

...
permissive = 0
...

再起動fapolicyd

# fapolicyd-cli --update

これで、エンドユーザーは上記の www ディレクトリにスクリプトをアップロードし、fapolicyd拒否モードで実行できるようになります。

関連情報