今回はLinuxシステムにおけるパーミッションについて扱います。
Windowsでは通常のファイルにない概念ですが、簡単に言うと権限についてで、パーミッションが適切に設定されていないとファイルの実行やディレクトリの移動、ファイルの参照などができない事態になります。
よく知らずにとりあえずでLinuxシステムを触っていると一度はハマるところではないでしょうか。
パーミッション
所有者
Linuxシステムではユーザはグループに所属しており、ファイルやディレクトリはそれらの所有者情報が付与されています。
「group1」グループに所属する「wantan」ユーザがファイルやディレクトリを作成した場合、以下のように所有者情報が設定されます。
厳密に言うと、1ユーザにつき複数のグループに所属できるため、ファイルの所有者情報に表示されるのはプライマリーグループになります。
この辺は試験的にはあまりでなさそうですが、実機で試してみるとすぐに理解できるでしょう。
[wantan@localhost work]$ ll 合計 4 drwxr-xr-x. 2 wantan group1 6 8月 18 23:27 test -rw-rw-r--. 1 wantan group1 83 8月 18 23:12 test.txt
アクセス権(パーミッション)
Linuxシステム上のファイルやディレクトリはパーミッション(アクセス権)の情報が与えられています。
パーミッションは以下の形式で表されます。
-rw-rw-r--. 1 wantan group1 83 8月 18 23:12 test.txt
パーミッションは所有者、所有グループ、その他ユーザの三種に付与することができ、
パーミッション自体は読み取り権、書き込み権、実行権の三種があるので全9種を設定することになります。
「-rw-rw-r--」と表したパーミッションは一番左が所有者、真ん中が所有グループ、一番右がその他のユーザを指し、各アルファベットは以下と対応しています。
読み取り権:r
書き込み権:w
実行権:x
また、特に後述する権限変更コマンドで使用しますが権限はそれぞれ数値で表現することもできます。
r=4、w=2、x=1となるので、二進数表記と考えてOKです。
例えば「rwx=7」、「r--=4」、「r-x=5」などになります。
chmodコマンド
chmodコマンドはパーミッションを修正するコマンドです。
試験的な重要度もそれなりにあり、Linuxシステムを使用しているときの実用度も高いのでしっかりと覚えるべきところでしょう。
オプション
オプション | 内容 |
---|---|
-R | 指定したディレクトリ内を再帰的に権限変更を行う |
またコマンドを実行するときは数値表現か以下を組み合わせることで付与する権限を決めます。
ちなみに実際に私が使用するときは数値指定を多用しています。
対象 | 内容 |
---|---|
u | 所有者 |
g | グループ |
o | その他ユーザ |
a | すべてのユーザ |
操作 | 内容 |
---|---|
+ | 権限を追加 |
- | 権限を削除 |
= | 権限を設定 |
権限の種類 | 内容 |
---|---|
r | 読み取り権限 |
w | 書き込み権限 |
x | 実行権限 |
s | SUID または SGID |
t | スティッキービット |
SUIDやSGID、スティッキービットについては後述します。
試験的にはまずは権限付与の方法として、数値で指定する方法、追加削除を用いる方法、=を用いる方法は覚えておく必要があります。
■設定例1
所有者 | すべての権限 |
---|---|
グループ | 読み取り権限、実行権限 |
その他ユーザ | 読み取り権限、実行権限 |
・元ファイルの権限
-rw-r--r--. 1 wantan group1 0 8月 20 00:58 test1.txt
・権限の追加削除で
[wantan@localhost work]$ chmod a+x test1.txt [wantan@localhost work]$ ll test1.txt -rwxr-xr-x. 1 wantan group1 0 8月 20 00:58 test1.txt
・権限の設定で
[wantan@localhost work]$ chmod u=rwx,g=rx,o=rx test1.txt [wantan@localhost work]$ ll test1.txt -rwxr-xr-x. 1 wantan group1 0 8月 20 00:58 test1.txt
・数値指定で
[wantan@localhost work]$ chmod 755 test1.txt [wantan@localhost work]$ ll test1.txt -rwxr-xr-x. 1 wantan group1 0 8月 20 00:58 test1.txt
■設定例2
所有者 | 読み取り権限、書き込み権限 |
---|---|
グループ | 権限なし |
その他ユーザ | 権限なし |
・元ファイルの権限
-rw-r--r--. 1 wantan group1 0 8月 20 00:58 test1.txt
・権限の追加削除で
[wantan@localhost work]$ chmod go-r test1.txt [wantan@localhost work]$ ll test1.txt -rw-------. 1 wantan group1 0 8月 20 00:58 test1.txt
・権限の設定で
[wantan@localhost work]$ chmod go= test1.txt [wantan@localhost work]$ ll test1.txt -rw-------. 1 wantan group1 0 8月 20 00:58 test1.txt
・数値指定で
[wantan@localhost work]$ chmod 600 test1.txt [wantan@localhost work]$ ll test1.txt -rw-------. 1 wantan group1 0 8月 20 00:58 test1.txt
こんな感じで一度覚えればどんなパターンでも対応できるようになるので、まずは中途半端に覚えるよりは一回覚えきってしまうことをお勧めします。
特殊権限の付与
ここでは一旦飛ばした権限関連のものについて扱います。
権限の付与方法などについてはまとめて覚えた方が効率がよさそうです。
SUID
SUIDはファイル(プログラム)が実行されたときに、ファイルの所有者権限で実行されます。
「Set User ID」の略称らしくこちらを覚えておくと意味を見失うことがなさそうです。
所有者の実行権限部分が「x」ではなく「S」(またはsの可能性もあり)で表現されます。
■SUIDの付与
SUIDは以下の2種の方法で、chmodコマンドにより付与することができます。
・所有者権限にs権限を追加する
[wantan@localhost work]$ chmod u+s test1.txt [wantan@localhost work]$ ll test1.txt -rwS------. 1 wantan group1 0 8月 20 00:58 test1.txt
・4000を足した数値で権限を付与する
[wantan@localhost work]$ chmod 4600 test1.txt [wantan@localhost work]$ ll test1.txt -rwS------. 1 wantan group1 0 8月 20 00:58 test1.txt
SGID
SGIDはファイル(プログラム)が実行されたときに、ファイルのグループ権限で実行されます。
こちらは「Set Group ID」です。
グループの実行権限部分が「x」ではなく「S」(またはsの可能性もあり)で表現されます。
■SGIDの付与
SGIDも以下の2種の方法で、chmodコマンドにより付与することができます。
・グループ権限にs権限を追加する
[wantan@localhost work]$ chmod g+s test1.txt [wantan@localhost work]$ ll test1.txt -rw---S---. 1 wantan group1 0 8月 20 00:58 test1.txt
・2000を足した数値で権限を付与する
[wantan@localhost work]$ chmod 2600 test1.txt [wantan@localhost work]$ ll test1.txt -rw---S---. 1 wantan group1 0 8月 20 00:58 test1.txt
スティッキービット
最後にスティッキービットと呼ばれる権限について。
スティッキービットはディレクトリに付与する権限で、スティッキービットがついたディレクトリ内は許可されているユーザは誰でもファイルの作成を行うことができますが、作成されたファイルは所有者のみが削除できるという権限です。
有名なのは「/tmp」ディレクトリです。
パーミッションを確認するとどのディストリビューションでも以下のようになっていると思います。
その他のユーザの実行権限が「t」になっています。
[wantan@localhost work]$ ll -d /tmp/ drwxrwxrwt. 16 root root 4096 8月 21 01:31 /tmp/
■スティッキービットの付与
スティッキービットも以下の2種の方法で、chmodコマンドにより付与することができます。
・その他のユーザ権限にt権限を追加する
[wantan@localhost work]$ chmod o+t test [wantan@localhost work]$ ll -d test drwxr-xr-t. 2 wantan group1 6 8月 18 23:27 test
・1000を足した数値で権限を付与する
[wantan@localhost work]$ chmod 1755 test [wantan@localhost work]$ ll -d test drwxr-xr-t. 2 wantan group1 6 8月 18 23:27 test
私は「所有者、グループ、その他ユーザ」の順に権限情報が並んでいるので、二進数に当てはめれば数値表現が一致すると覚えています。
umaskコマンド
デフォルト権限のマスク
ファイルやディレクトリを作成したとき、特にパーミッションを設定しなくても一定のパーミッションで作成されます。
[wantan@localhost work]$ touch default.txt [wantan@localhost work]$ mkdir default [wantan@localhost work]$ ll | grep default drwxr-xr-x. 2 wantan group1 6 8月 21 02:38 default -rw-r--r--. 1 wantan group1 0 8月 21 02:38 default.txt
これはファイルは「666」、ディレクトリは「777」からumask値を引いた値がパーミッションとして設定されています。
umaskコマンド
umask値はumaskコマンドにより確認、設定することができます。
umaskコマンドをそのまま実行すると現在のumask値を確認することができます。
[wantan@localhost work]$ umask 0022
umask値の設定は値をつけます。
例えばその他のユーザに一切の権限をデフォルトで付与したくない場合は以下のようなものが考えられます。
[wantan@localhost work]$ umask 0027 [wantan@localhost work]$ umask 0027
この状態でファイルとディレクトリを作成すると以下のようになります。
[wantan@localhost work]$ touch um.txt [wantan@localhost work]$ mkdir umdir [wantan@localhost work]$ ll | grep um -rw-r-----. 1 wantan group1 0 8月 21 02:58 um.txt drwxr-x---. 2 wantan group1 6 8月 21 02:58 umdir
ちなみにumask値はユーザごとに設定されています。
chownコマンド
chownコマンドはファイルやディレクトリの所有者(オーナー)を変更するコマンドです。
試験的に重要なオプションは「-R」でディレクトリ内の所有者を再帰的に変更するオプションです。
[root@localhost work]# chown root test.txt [root@localhost work]# ll test.txt -rwxr-xr-x. 1 root group1 83 8月 18 23:12 test.txt
また後述するchgrpコマンドで設定するグループの設定も行うことできます。
試験的にはこちらも覚えておいた方がいいでしょう。
[root@localhost work]# chown root:root test.txt [root@localhost work]# ll test.txt -rwxr-xr-x. 1 root root 83 8月 18 23:12 test.txt
記述方法としては「.」を使用した以下もあります。
[root@localhost work]# chown root.root test.txt
あとはユーザを省略してグループのみの変更もできます。
chgrpコマンド
こちらはファイルやディレクトリのグループを変更します。
使用感はchownコマンドと同じような感じで、再帰的に処理する「-R」オプションが存在します。
[root@localhost work]# chgrp root test.txt [root@localhost work]# ll test.txt -rwxr-xr-x. 1 wantan root 83 8月 18 23:12 test.txt
ーーーーーーーーーーーーーーーー
・前回(第十六回)
www.wantanblog.com
・次回(第十八回)
www.wantanblog.com