第4回 ユーザーとパーミッションにみるLinuxの設計思想

関野史朗
2001/10/2

ファイルのパーミッション

ここがポイント
・OS別ファイルアクセス権の違い
・きめ細かいWindows 2000
・Linuxのアクセス権の設定方法

 ユーザーやその権限と切っても切れない関係にあるのが、ファイルのパーミッションです。Windows 9x+FATにはまったく存在しない概念ですが……。

多彩かつ活用されていないWindows 2000

Windows 2000のアクセス権設定画面(NTFS使用時のみ)。サブフォルダ以下に対して設定を継承させることもできる

 Windows NT/2000は、NTFSを使えばかなり細かくファイルに対するセキュリティを設定できます。グループごとに、

  • フルコントロール
  • 変更
  • 読み取りと実行
  • フォルダの内容の一覧表示
  • 読み取り
  • 書き込み

の6種類のアクセス許可を個々に設定できます。できますが、これを活用しているというユーザーにはお目にかかったことがありません。企業の基幹業務で使うため、ガチガチに開発されたシステムならいざ知らず、パーソナル用途では大げさにすぎるのも確かです。

シンプルかつ必要十分なLinux

 Linuxにおけるパーミッションはシンプルで、読み取り(r)、書き込み(w)、実行(x)の3種類です。これを、

  • ファイルの所有者
  • ファイルの所有者が所属するグループ
  • そのほか

の3グループに対して別々に設定できます。

$ ls -l

を実行すると出てくる文字の並び(-rwxr--r--など)の左から2番目以降(rwxr--r--など)がパーミッションの状態を表しています。左から順に所有者グループそのほかで、それぞれ上記3種類の属性を持っているので9文字となります。rwxr--r--を例にすると、所有者は読み・書き・実行ができて(rwx)、グループとそのほかは読み出すだけ(r--)、ということになります。

 パーミッションを変更するには、chmodコマンドを使います。引数としては、変更するパーミッションの指定とファイル名を必要とします。また、パーミッションの指定には2通りあります。

 まずシンボリックに行うには、

  1. 対象者をu(所有者)、g(グループ)、o(そのほか)、a(すべて)で指定
  2. +で追加、-で削除、=で「そのアクセス権だけ」を指定
  3. rで読み取り、wで書き込み、xで実行を指定

とするのが基本です。具体例を挙げると、

$ chmod o+r .bashrc

でそのほかに対して読み出しを許可します。

$ chmod go-rwx .bashrc

とすれば、所有者以外に対して読み・書き・実行を禁止します。ただし、ユーザー本人が読み・書き・実行できるかどうかの設定を行っているわけではないので注意が必要です。

 もう1つ、数値で指定する方法もあります。rwxをフラグとすれば、3bitあれば表現できます。これを8進法で表記すればいいわけです。例えば、

$ chmod 700 .bashrc

とすると、ls -lで表示したときrwx------になります。所有者には読み・書き・実行を許可し、それ以外には禁止しています。グループに対して読み出しを許可するなら、

$ chmod 740 .bashrc

とします(rwxr-----になる)。

 言い換えると、r=4w=2x=1として足し算した結果(0〜7)が指定すべき数字です。もちろん、所有者、グループ、そのほかをすべて一度に指定するので、3けたの数字になります。

 ここで「ディレクトリに対してxのパーミッションは何の意味を持つのか」と疑問に思った方もいると思います。もちろん、ディレクトリを実行できるわけではありません。これは、そのディレクトリ以下に対するアクセス権を設定しています。これを禁止すると、そのディレクトリ以下がまとめて読み出せなくなります。

 なお、グループの設定は/etc/groupの内容を書き換えることで行います。現在自分が所属しているグループを表示するには、groupsコマンドを使います。1人のユーザーが複数のグループに所属できるので、目的に応じてグループを分けておくといいでしょう。例えば、データのバックアップを取るためにテープデバイスにアクセスできるグループとを作っておくと、システムをバックアップするつもりでリストアしてしまうといったミスが防げます。

気を付けたいset-user-id

 もう1つ、便利な指定として「sパーミッション」があります。普通はあるコマンドを実行すると、そのプロセスは実行したユーザーのものになります。たいていはこれで問題ないのですが、たまにroot権限の必要なデバイスにアクセスするコマンドがあります(サウンド関係でよく見かけます)。こんなときにsパーミッションを指定しておくと、コマンドを実行したユーザーではなく、ファイルの所有者のプロセスとして起動します。コマンドをrootがインストールしてsパーミッションを設定しておけば、/dev/mixerなども自在にアクセスできるというわけです。

 ただし、これはもろ刃の剣です。特に、だれが実行してもroot権限で動作するコマンドにセキュリティホールがあると深刻です。これを利用することで、第三者が簡単にroot権限を入手できるからです。セキュリティのことを考えると、root権限で動作するコマンドはなるべく少なくしておくべきです。例に挙げたサウンド関係なら、/dev/mixerはaudioグループに対して読み書きを許可しています。従って、サウンドを使うユーザーはaudioグループに追加しておけばいいわけです。こうすれば、サウンド関係のコマンドにsパーミッションを設定する必要がなくなります。

2/2

Index
Windowsユーザーに教えるLinuxの常識
  OSの出自によって異なる「ユーザー」という概念
  ユーザーの持つ「権限」
ファイルのパーミッション

連載 Windowsユーザーに教える Linuxの常識


 Linux Squareフォーラム Linux/システム学習関連記事
連載:Windowsユーザーに教えるLinuxの常識(全12回)
Windowsのセオリーが通用しないLinux。Linux初心者向けに、LinuxというOSの考え方/常識をゼロから伝授!
連載:LFSで作って学ぶLinuxの仕組み(全4回)
管理者(root)は、何をしなければならないのか? 管理に際して検討すべきことは? 管理のための技術とは? など、駆け出し管理者のための考え方や方法論を検討する
連載:Linux管理者への道(全8回)
「Linux From Scratch」というシンプルなLinuxをインストール&環境構築する作業を通して、LinuxがOSとして機能するための仕組みや設定を見直そう
Linux Squareフォーラム全記事インデックス

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します

TechTargetジャパン

Linux Square フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ



- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH