ユーザーとパーミッションにみるLinuxの設計思想:Windowsユーザーに教えるLinuxの常識(4)(2/2 ページ)
Windows 9xではないに等しいが、Windows 2000やLinuxには「ユーザー」という概念がある。しかし、両者の概念は似ているようで多くの点で異なっている。ユーザーの権限やファイルのアクセス権にも差異があり、Linuxへの移行時に戸惑うポイントの1つとなっている。
ファイルのパーミッション
ここがポイント
- OS別ファイルアクセス権の違い
- きめ細かいWindows 2000
- Linuxのアクセス権の設定方法
ユーザーやその権限と切っても切れない関係にあるのが、ファイルのパーミッションです。Windows 9x+FATにはまったく存在しない概念ですが……。
多彩かつ活用されていないWindows 2000
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通りあります。
まずシンボリックに行うには、
- 対象者をu(所有者)、g(グループ)、o(そのほか)、a(すべて)で指定
- +で追加、-で削除、=で「そのアクセス権だけ」を指定
- 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=4、w=2、x=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パーミッションを設定する必要がなくなります。
Copyright © ITmedia, Inc. All Rights Reserved.