Linuxは複数のユーザが同時にアクセスできるOSです。そのため、セキュリティを考慮した適切なアクセス制御を付与する必要があります。閲覧のみができるユーザ、書き込みができるユーザ、実行が可能なユーザなど、各ディレクトリやファイルに細かく設定を施すのが堅牢なシステムを構築するコツとなります。
パーミッション(アクセス権)とは
パーミッションとは、ディレクトリやファイルを閲覧、編集、実行可否を設定する権限のことです。Linuxは特にサーバー用OSとして利用されることが多いので、パーミッションをちゃんと設定することが大切です。
この設定を怠ると、外部の悪意あるユーザがアクセスしてファイルを操作したり、そうでなくとも一般ユーザが不意の誤操作を招いてしまう恐れもあります。
では、実際のパーミッションを見てみましょう。
「ls」コマンドとオプションの「-l」を実行することにより、ディレクトリ及びファイルのパーミッションを表示させることができます。
ここでは「ls」コマンドで「test.sh」というファイルのパーミッションを表示させます。
1 2 3 |
[root@CentOS7 ~]# ls -l -rwxrw-r--. 1 user group 100 Dec 23 13:14 test.sh [root@CentOS7 ~]# |

ここの「-rwxrw-r--」(①②③④)は4つの領域に区分けできます。
パーミッション情報
① :ファイルのタイプを表記する領域です。
「ディレクトリか(d)」「リンクファイルか(l)」「通常ファイルか(-)」を判別するためのフラグが表示されます。今回はスクリプトファイルですので、「-」が表示されています。
② :そのファイルの所有ユーザの権限が表示されます。
ここでいう所有ユーザ名は「user」となります。
③ :グループに所属しているユーザの権限が表示されます。
ここでいう所属グループ名は「group」となります。
④ :②、③以外のその他ユーザの権限が表示されます。
ココがポイント
r :読み込み許可 ファイルを開くときなどに必要な権限です。
w:書き込み許可 ファイルを編集変更する場合に必要な権限です。
x :実行許可 このフラグが設定されていると、ファイルに実行権限が与えられ実行可能となります。
すなわち、②所有ユーザは読みこみ、書き込み、実行のすべてが許可されています。
③グループに所属しているユーザは、読みこみ、書き込みは許可されていますが、実行は許可されていません。
④その他ユーザは、読みこみのみ許可となります。
リンク数、サブディレクトリ数
⑤ ファイルの場合はリンク数、ディレクトリの場合は、サブディレクトリ数が表示されます。
今回はスクリプトファイルですので、「1」が表示されています。
所有者、グループ
⑥ 所有者情報が表示されます。
今回の例では、ユーザー「user」がファイル所有者になります。
⑦ グループ情報が表示されます。
今回の例では、グループ「group」が所属グループになります。
パーミッションマスク値の設定「umask」
ファイルやディレクトリを作成する際、mkdirコマンドと-mオプションの指定でパーミッションを指定することができます。
「777」や「666」のように3桁の数値を指定します。1文字目が所有者、2文字目がグループ、3文字目がその他ユーザの設定となります。
ココがポイント
r :読み込みを可能にするには「4」
w:書き込みを可能にするには「2」
x :実行を可能にするには「1」
所有者 :「r(4)」+「w(2)」+「x(1)」≒「7」
グループ:「r(4)」+「w(2)」≒「6」
その他 :「x(1)」≒「1」
パーミッション値:「761」≒「-rwxrw-r--」
実行を可能にするには「1」、書き込みを可能にするには「2」、読み込みを可能にするには「4」でその数字を合算した値で指定します。
すなわち、「777」は全ユーザにすべての権限を付与し、「666」は全ユーザに実行以外の権限を付与するということになります。
以上を前提とし、umaskコマンドは初期設定のパーミッションを制限することが可能です。
Linuxの初期設定は、ファイル作成時は「666」(rw-rw-rw-)ディレクトリ作成時は「777」(rwxrwxrwx)となっていますが、これらをマスクし制限を厳しくすることができます。
# umask 022
上記を実行すると、グループ、その他ユーザから「書き込みを可能にする」権限をはく奪し、「書き込み不可」とすることができます。
umask制限の例
ファイル:「666(rw-rw-rw-)」-「022」=「644(rw-r--r--)」
ディレクトリ:「777(rwxrwxrwx)」-「022」=「755(rwxr-xr-x)」
以上のように、パーミッションの引き算する値を決めるコマンドが、umaskとなります。
アクセス権を変更する「chmod」
chmodコマンドを使用することで、ファイルのパーミッションを変更することができます。
コマンドの書式
chmod [オプション] モード ファイル1 ファイル2 ファイル3……
コマンドの主なオプション
- -R(--recursive):ファイルとディレクトリを再帰的に変更する
- -v(--verbose):処理した内容を出力する
- -c(--changes):変更が行われた場合のみ処理内容を出力する
# chmod 777 test.sh
1 2 3 4 |
[root@CentOS7 ~]# chmod 777 test.sh [root@CentOS7 ~]# ls -l -rwxrwxrwx. 1 user group 0 4月 6 12:52 test.sh [root@CentOS7 ~]# |
上記コマンドを実行することにより、test.shに全ユーザに対し、全ての権限を付与させることになります。(rwxrwxrwx)
オーナーを変更する「chown」
chownコマンドを使用することで、ファイルの所有者を変更することができます。
ココがポイント
chown [オプション] 新しい所有者 ファイル1 ファイル2……
コマンドの主なオプション
- -R(--recursive):ファイルとディレクトリを再帰的に変更する
- -v(--verbose):処理した内容を出力する
- -c(--changes):変更が行われた場合のみ処理内容を出力する
所有者が「user」になっている「test.sh」を「change」に変更する場合、下記のコマンドを実行します。
# chown change test.sh
1 2 3 4 |
[root@CentOS7 ~]# chown change test.sh [root@CentOS7 ~]# ls -l -rwxrw-r--. 1 change group 100 Dec 24 18:27 test.sh [root@CentOS7 ~]# |
「# ls -l」コマンドを実行することにより、所有者が「change」になっていることが確認できます。
まとめ
この記事では、ファイルやディレクトリへ適切なパーミッションを付与する方法について解説しました。方法はもちろんですが、パーミッションを設計するのはシステムを構築するうえで非常に大切ですので、ぜひLinux技術者を目指す方は意識してみてください。
Linux基礎知識(全12記事)
├─Linuxとは何か? Linuxの基本概要を理解しよう!
├─Linuxをインストールし、ログインしてみよう!
├─起動の仕組みとカーネルについて!
├─ディレクトリ構造とファイルシステムについて!
├─ユーザー環境(ユーザー、グループ、パスワード)の設定について!
├─ディレクトリ操作について!
├─ファイル操作について!
├─テキスト操作について!
├─Linuxの基本コマンドを覚えよう!
├─適切なアクセス制御を付与してみよう!
├─リンクとiノードについて理解を深めよう!
└─LVMとは?LVMを理解しよう?