Armadilloフォーラム

atmark-distのパーミッションについて

kazama140206

2014年12月5日 18時50分

お世話になります。
パーミッション444としたファイルに rootユーザで
アクセスした場合一般のlinuxだとファイル内容変更できないと
思うのですが、atmark-dist の場合
変更が受け付けられます。
これをrootでも変更できないようにする事は可能でしょうか?

どこを修正すれば可能などあればご教示願います。
宜しく、お願いします。

コメント

中村です。

// 投稿のタイトルが「パーティション」になってますけど、
// 「パーミッション」ですね

> パーミッション444としたファイルに rootユーザで
> アクセスした場合一般のlinuxだとファイル内容変更できないと
> 思うのですが、atmark-dist の場合
> 変更が受け付けられます。

もしかて、viで"w"するときにreadonlyと怒られるとか、
そういう話でしょうか?
だとすると、それはviがやっていることで、
atmark-distのviはパーミッションチェックをしてない
ということだと思います。

外していたら、ゴメンナサイ。

--
なかむら

> // 投稿のタイトルが「パーティション」になってますけど、
> // 「パーミッション」ですね
間違えました、パーミッションです。
失礼しました。

> もしかて、viで"w"するときにreadonlyと怒られるとか、
> そういう話でしょうか?
そうです、試してみたのは vi での w です。
debianではライトプロテクトされるのにatmark-dist ではスルーだったので。
OS自体ではなく、個々のソフトやコマンドがどう扱っているか
という事になる訳ですね、確かに。
その方向から調べてみます。
ありがとうございました。

# タイトル、直しました。

> 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

なので、書き込み権限が無い状態であっても書き換えたように見えます。
気の利いたアプリは書き込み権限がない場合に、ユーザーに質問したりします。

大事な方にコメントするのを忘れてました...。

> これをrootでも変更できないようにする事は可能でしょうか?

基本的に不可能です。

root がなにもできなくなるものを作成すると、消すこともできないので、
大変なことになります。

そういう場合どうするかというと、ファイル側ではなくアプリ側で
rootの権限を落とします。そうすることで、仮に変な挙動をしたとしても
甚大な被害がでないようになります。

setuid()というシステムコールで検索すると出てくると思います。
あとは、「ふつうのLinuxプログラミング」という本にも書かれています。

http://www.amazon.co.jp/dp/4797328355