kazama140206
2014年12月5日 18時50分
お世話になります。
パーミッション444としたファイルに rootユーザで
アクセスした場合一般のlinuxだとファイル内容変更できないと
思うのですが、atmark-dist の場合
変更が受け付けられます。
これをrootでも変更できないようにする事は可能でしょうか?
どこを修正すれば可能などあればご教示願います。
宜しく、お願いします。
コメント
kazama140206
at_yashi
# タイトル、直しました。
> atmark-dist の場合
> 変更が受け付けられます。
というのは、Atmark Distを使って作成したユーザーランドでってことですよね。
(一応確認です)
ファイルの権限を 444にすると、確かに内容の変更はできないです。
たとえアプリが書き換えようとしても、カーネルが許しません。
ただし、ファイルが削除可能かどうかは、フアイルが存在しているディレクトリの
パーミッションで決まります。
多くのエディターは、ファイルを更新するときに 1) 古いファイルの名前をバックアップファイル名に置き換え、
2) 新しい内容のファイルで作成しなおす。という挙動をします。名前の変更もファイル自体の権限ではなく、
ディレクトリの権限によります。
ls
に -i
オプションをつけるとファイル名ではなく、ファイルを一意的に示す
inode番号を表示します。これをつかって確認してみてください。
$ echo hello > a $ cat a hello $ chmod 444 a $ echo world > a zsh: permission denied: a $ ls -il a 326470 -r--r--r-- 1 atmark atmark 6 Dec 17 16:44 a $ mv a b $ echo world > a $ ls -il a b 326540 -rw-r--r-- 1 atmark atmark 6 Dec 17 16:44 a 326470 -r--r--r-- 1 atmark atmark 6 Dec 17 16:44 b $ cat a world
なので、書き込み権限が無い状態であっても書き換えたように見えます。
気の利いたアプリは書き込み権限がない場合に、ユーザーに質問したりします。
at_yashi
大事な方にコメントするのを忘れてました...。
> これをrootでも変更できないようにする事は可能でしょうか?
基本的に不可能です。
root がなにもできなくなるものを作成すると、消すこともできないので、
大変なことになります。
そういう場合どうするかというと、ファイル側ではなくアプリ側で
rootの権限を落とします。そうすることで、仮に変な挙動をしたとしても
甚大な被害がでないようになります。
setuid()
というシステムコールで検索すると出てくると思います。
あとは、「ふつうのLinuxプログラミング」という本にも書かれています。
y.nakamura
2014年12月5日 22時01分
中村です。
// 投稿のタイトルが「パーティション」になってますけど、
// 「パーミッション」ですね
> パーミッション444としたファイルに rootユーザで
> アクセスした場合一般のlinuxだとファイル内容変更できないと
> 思うのですが、atmark-dist の場合
> 変更が受け付けられます。
もしかて、viで"w"するときにreadonlyと怒られるとか、
そういう話でしょうか?
だとすると、それはviがやっていることで、
atmark-distのviはパーミッションチェックをしてない
ということだと思います。
外していたら、ゴメンナサイ。
--
なかむら