/ tmpディレクトリで奇妙な動作が発生します。ユーザーはファイルの読み取り/書き込み権限を持つグループに属していますが、それを行うことはできません。
この例では、/tmp/test.txt
userで新しいファイルを作成しますmax
。 777権限を付与し、ファイルをグループに属させましたが、root
ユーザーはroot
まだ編集できません。
su max
touch /tmp/test.txt
chmod 777 /tmp/test.txt
su root
chown max:root /tmp/test.txt
# ls -l /tmp/test.txt
-rwxrwxrwx 1 max root 0 26. Feb 12:08 test.txt
# echo "foobar" > /tmp/test.txt
bash: /tmp/test.txt: Permission denied
test.txt
別のディレクトリに移動すると、すべてが期待どおりに機能します。
/tmp
tmpfsは、次のオプションを使用してfstabを介してインストールされました。
tmpfs /tmp tmpfs nodev,nosuid,size=5G 0 0
を実行すると、ls -l /
tmpフォルダは次のようになります。
drwxrwxrwt 20 root root 640 26. Feb 12:01 tmp/
私はArch Linuxの派生バージョンであるManjaroを実行しています。
tmpfsをマウントするときに私は何か間違っていましたか?
答え1
あなたが示す動作は、次のようにfs.protected_regular
決定されるLinuxカーネルパラメータによって異なります。fs.protected_fifos
今回提出してください(私の考えではバージョン4.19に集約されています)セキュリティの脆弱性を修正します。
送信メッセージからの抜粋(強調):
namei: FIFO および一般ファイルに対して制限された O_CREAT を許可する
FIFOを開くことができません。所有者がディレクトリと同じであるか、ファイルがO_CREATフラグなしで開かれている場合を除き、ユーザーが所有していない固定ディレクトリの世界書き込み可能な汎用ファイル。目的は、データスプーフィング攻撃をさらに困難にすることです。 ...
同じコミットメッセージは、関連する共通Vulnerability and Exposures(CVE)番号のリストも報告します。
したがって、書き込みアクセス権がにuserX
付与されているか、root
他の方法で付与され、/tmp/file
この/tmp
ディレクトリが固定ビットが設定されたグローバル書き込み可能ディレクトリである場合は、次の場合にのみ書き込み用にfile
開くことができます。
userX
はい、所有者file
またはfile
ディレクトリはすべて/tmp
同じユーザーに属します。
テストではroot
書き込み権限がありますが、ファイルの所有者ではなく、(それぞれ)と同じ所有者も/tmp/test.txt
ありません。/tmp/test.txt
/tmp
max
root
/tmp
この問題はインストール方法とまったく関係がないようです。
関連文書は次の場所にあります。ドキュメント/sysctl/fs.txt:
保護されたFIFO:
この保護の目的は、プログラムが通常のファイルを生成すると予想される攻撃者が制御するFIFOへの不注意な書き込みを防ぐことです。
...
protected_general:
この保護はprotected_fifosに似ていますが、プログラムがファイルを生成すると予想される一般的な攻撃者が制御するファイルに書き込むのを防ぎます。
「0」に設定すると、通常ファイルへの書き込みは制限されません。
"1"に設定すると、O_CREATはディレクトリ所有者が所有しない限り、所有していない誰でも書き込むことができる固定ディレクトリの一般ファイルを開くことができません。
「2」に設定すると、グループ書き込み可能な固定ディレクトリでも機能します。
つまり、次のコマンドを使用して上記の保護を無効にできます。
sysctl fs.protected_regular=0
私たちの仮説を裏付けるいくつかのテスト:
$ su - root
# sysctl fs.protected_regular
fs.protected_regular = 1
# cd /
# mkdir test
# chmod 1777 test
# su - otheruser
$ echo hello >/test/somefile
$ exit
logout
# cat /test/somefile
hello
# ls -lah test/somefile
-rw-r--r-- 1 otheruser otheruser 6 Feb 26 17:21 test/somefile
# echo root >>test/somefile
-bash: test/somefile: Permission denied
# sysctl fs.protected_regular=0
fs.protected_regular = 0
# echo root >>test/somefile
# cat /test/somefile
hello
root
# sysctl fs.protected_regular=1
fs.protected_regular = 1
# echo root >>test/somefile
-bash: test/somefile: Permission denied
# chmod 0777 /test/
# echo root >>test/somefile
# cat test/somefile
hello
root
root
fs.protected_hardlinks
とは異なり、fs.protected_symlinks
デフォルトではカーネルコードでは有効になりませんfs.protected_regular
。これを有効にすることは、以前のバージョンと互換性のない変更です。fs.protected_fifos
このコメント指摘)、私が知っている限り、systemd
バージョン241で行われました。この最新コミット。