Linux の基礎知識

【Linuxの基礎知識】適切なアクセス制御を付与してみよう!

Linuxは複数のユーザが同時にアクセスできるOSです。そのため、セキュリティを考慮した適切なアクセス制御を付与する必要があります。閲覧のみができるユーザ、書き込みができるユーザ、実行が可能なユーザなど、各ディレクトリやファイルに細かく設定を施すのが堅牢なシステムを構築するコツとなります。

パーミッション(アクセス権)とは

パーミッションとは、ディレクトリやファイルを閲覧、編集、実行可否を設定する権限のことです。Linuxは特にサーバー用OSとして利用されることが多いので、パーミッションをちゃんと設定することが大切です。

この設定を怠ると、外部の悪意あるユーザがアクセスしてファイルを操作したり、そうでなくとも一般ユーザが不意の誤操作を招いてしまう恐れもあります。

では、実際のパーミッションを見てみましょう。

「ls」コマンドとオプションの「-l」を実行することにより、ディレクトリ及びファイルのパーミッションを表示させることができます。

ここでは「ls」コマンドで「test.sh」というファイルのパーミッションを表示させます。

ここの「-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

上記コマンドを実行することにより、test.shに全ユーザに対し、全ての権限を付与させることになります。(rwxrwxrwx)

オーナーを変更する「chown

chownコマンドを使用することで、ファイルの所有者を変更することができます。

ココがポイント

chown [オプション] 新しい所有者 ファイル1 ファイル2……

コマンドの主なオプション

  • -R(--recursive):ファイルとディレクトリを再帰的に変更する
  • -v(--verbose):処理した内容を出力する
  • -c(--changes):変更が行われた場合のみ処理内容を出力する

所有者が「user」になっている「test.sh」を「change」に変更する場合、下記のコマンドを実行します。

# chown change test.sh

「# ls -l」コマンドを実行することにより、所有者が「change」になっていることが確認できます。

まとめ

この記事では、ファイルやディレクトリへ適切なパーミッションを付与する方法について解説しました。方法はもちろんですが、パーミッションを設計するのはシステムを構築するうえで非常に大切ですので、ぜひLinux技術者を目指す方は意識してみてください。

よく読まれている記事

1

Shellとは? Shellとは、人間の理解できる言葉を機会へ伝えるプログラムです。 Linux環境でコマンドプロンプト画面を開いているとき、常にShellは起動している状態です。 「Shell」とは ...

2

Linuxは主にサーバー用として利用されるOSです。大規模な基幹システムの開発者、ロボットや家電開発等の組み込み系エンジニア、ネットワーク機器やデータベースに携わるインフラエンジニアは触れることが多い ...

3

プログラミング言語を習得しようと思った時、必ずと言っていいほど候補として挙げられるのが「Java」というプログラミング言語です。 「Java」は、現在日本で最も使われている言語であり、非常に人気のある ...

4

この記事は、Linuxについて勉強している初心者の方向けに「Shellスクリプト」について解説します。最後まで読んで頂けましたら、Shellスクリプトはどのような役割を担っているのか?を理解出来るよう ...

-Linux の基礎知識