2
1

More than 1 year has passed since last update.

rootなのに書き込めないファイルがある!カーネルパラメータfs.protected_regularの挙動

Last updated at Posted at 2023-06-02

手元のRockyLinux環境をRockyLinux8からRockyLinux9に更新した際に、カーネルパラメータfs.protected_regularがデフォルトで1となったため今までと違った挙動を示すようになった問題について紹介します。

どういう挙動になる?

/tmpの権限を確認します。通常ここはsticky bitが設定されています

$ ls -la /tmp
(略)
drwxrwxrwt.  9 root        root        4096 May 31 01:17 .
(略)

一般ユーザで/tmptestというファイルを作ります

$ touch /tmp/test

動作確認のためのPythonスクリプトを用意します

open.py
f = open("/tmp/test", "w")

一般ユーザで実行してみます(これは問題なく実行できる)

$ python open.py
$

rootで実行してみます

$ sudo python open.py
Traceback (most recent call last):
  File "/home/rocky/sticky-dir/open.py", line 1, in <module>
    f = open("/tmp/test", "w")
PermissionError: [Errno 13] Permission denied: '/tmp/test'

お!失敗しますね。
rootって万能じゃなかったんでしょうか・・?

カーネルパラメータfs.protected_regular

上記の挙動はこのカーネルパラメータが1となっているためにおきました。

$ sudo sysctl -a |grep fs.protected_regular
fs.protected_regular = 1

このフラグが設定されていると 誰でも書き込めるsticky bitのついているディレクトリ内のファイルについて、その所有者しか編集できなくなるようです。(たとえrootであっても編集できません)

このカーネルパラメータは以下で導入されています

説明によると、このパラメータは攻撃者にデータをすり替えられるのを防ぐために導入されたもののようです。

設定で0に戻すこともできますが、そもそも利用者でないユーザがファイルを変更するという動作自体を見直したほうが良いと思います。

2
1
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1