Linux における特殊権限と umask の管理

LinuxBeginner
オンラインで実践に進む

はじめに

この実験では、共同作業用ワークスペースのセキュリティを強化するために、Linux 環境で特殊権限と umask 設定を管理する方法を学びます。新しく作成されるファイルに割り当てられるデフォルトの権限を制御する方法や、スティッキービット(sticky bit)などの特殊権限ビットを使用して、共有ディレクトリ内のファイルが他のユーザーによって削除されないように保護する方法について学習します。

まず、新しいユーザーグループとディレクトリを作成し、適切な所有権と権限を割り当てることで、シミュレートされた共有環境を準備します。次に、umask 値を変更してより厳格なデフォルト権限を適用し、新しいファイルを作成してその効果を確認します。最後に、共有ディレクトリにスティッキービットを設定して適用状況を確認し、共有スペース内でファイルの所有者だけが自分のファイルを削除できるように設定します。

環境の準備とディレクトリへのアクセス

このステップでは、特殊なファイル権限を管理するための環境を準備します。これには、研究チーム用の共有ワークスペースをシミュレートした専用ディレクトリの作成が含まれます。新しいユーザーグループとディレクトリを作成し、適切な所有権と権限を割り当てます。すべての操作はプロジェクトディレクトリ ~/project 内で行います。

まず、research という名前の新しいグループを作成しましょう。このグループは、共有ディレクトリにアクセスできるチームメンバーを表します。グループの作成は管理タスクであるため、sudo groupadd コマンドを使用します。

sudo groupadd research

次に、~/project ディレクトリ内に RandD という名前の新しいディレクトリを作成します。これがこの実験のメイン作業ディレクトリになります。

mkdir ~/project/RandD

ここで、新しく作成した RandD ディレクトリのグループ所有権を research グループに変更します。これには chgrp コマンドを使用します。

sudo chgrp research ~/project/RandD

所有者(labex ユーザー)と research グループのメンバーだけがこのディレクトリにアクセスできるように、権限を設定します。chmod コマンドを数値コード 770 で使用します。このコードは、ユーザーとグループに読み取り、書き込み、実行の権限(rwx、つまり 4+2+1=7)を与え、その他のユーザーには権限を与えません(---、つまり 0)。

chmod 770 ~/project/RandD

ls -ld コマンドを使用して、ディレクトリの権限と所有権を確認できます。-l オプションは詳細なリスト形式を提供し、-d オプションはディレクトリの中身ではなくディレクトリ自体を表示します。

ls -ld ~/project/RandD

権限(drwxrwx---)、所有者(labex)、グループ(research)を確認できる、以下のような出力が表示されるはずです。

drwxrwx--- 2 labex research 4096 Dec 12 10:30 /home/labex/project/RandD

最後に、現在の場所を RandD ディレクトリに変更します。以降のステップのタスクはここで行います。

cd ~/project/RandD

これで作業環境のセットアップが完了しました。

umask 027 によるデフォルトのファイル権限の制限

このステップでは、umask コマンドを使用して、新しく作成されるファイルのデフォルト権限を制御する方法を学びます。ファイルを作成すると、システムはデフォルトの権限セットを割り当てます。多くの場合、これらのデフォルト設定は寛容すぎることがあり、例えば「その他(Other)」のユーザーにファイルの読み取りを許可してしまいます。RandD ディレクトリのような安全な環境では、これを制限する必要があります。

umask(ユーザーファイル作成モードマスク)コマンドは、新しいファイルやディレクトリが作成されるときに、ベースとなる権限から**差し引く(マスクする)**権限を指定します。

  • ファイルの場合、ベース権限は 666 (rw-rw-rw-) です。
  • ディレクトリの場合、ベース権限は 777 (rwxrwxrwx) です。

ここでは umask027 に設定します。この値は、システムに以下の権限を削除するように指示します。

  • ユーザー(所有者): 0 - 削除される権限なし。
  • グループ: 2 - 書き込み権限を削除。
  • その他: 7 (4+2+1) - 読み取り、書き込み、実行のすべての権限を削除。

つまり、新しく作成されるファイルは 666 - 027 = 640 (rw-r-----) の権限を持ち、新しく作成されるディレクトリは 777 - 027 = 750 (rwxr-x---) の権限を持つことになります。

まず、シェルプロンプトで umask 027 と入力して、現在のターミナルセッションのデフォルト権限を変更します。まだ ~/project/RandD ディレクトリにいることを確認してください。

umask 027

次に、コマンドを単独で入力して、umask の新しい値を確認します。

umask

コマンドを実行すると、新しい umask 値が表示されます。先頭のゼロは、特殊権限(後で学習するスティッキービットなど)がマスクに含まれていないことを示しています。

027

これで、現在のセッションのデフォルトのファイル作成権限が正常に変更されました。次のステップでは、ファイルを作成して、この新しい umask の効果を観察します。

ファイルの作成と新しい umask 権限の検証

このステップでは、ファイルを作成することで新しい umask 設定を実践します。これにより、前のステップで設定したデフォルト権限が自動的に適用され、新しいドキュメントが不正アクセスから保護される様子を確認できます。引き続き ~/project/RandD ディレクトリで作業します。

touch コマンドを使用して、schedule.odt という名前の新しい空ファイルを作成しましょう。touch コマンドは、空のファイルを作成したり、既存のファイルのタイムスタンプを更新したりするための簡単な方法です。

touch schedule.odt

ファイルが作成されたので、その権限を確認する必要があります。ls -l コマンドを使用して、schedule.odt の詳細情報を表示します。

ls -l schedule.odt

次のような出力が表示されます。最も重要な部分は、ファイルの権限を示す最初の列です。

-rw-r----- 1 labex research 0 Dec 12 10:35 schedule.odt

権限文字列 -rw-r----- を詳しく見てみましょう。

  • 最初の文字 - は、これがファイルであることを示します。
  • 次の 3 文字 rw- は、ユーザー(所有者)の権限で、読み取りと書き込みが可能です。これは数値の 6 に対応します。
  • 次の 3 文字 r-- は、グループの権限で、読み取り専用です。これは数値の 4 に対応します。
  • 最後の 3 文字 --- は、その他の権限で、権限がまったくないことを意味します。これは数値の 0 に対応します。

これらの権限(640)は、システムのデフォルトのファイル権限 666umask027 を適用した直接の結果です。意図した通り、umask によってグループの書き込み権限とその他のユーザーのすべての権限が正常に削除されました。

chmod 1771 によるディレクトリへのスティッキービットの設定

このステップでは、共有ディレクトリでよく発生する問題に対処します。現状では、research グループのメンバーであれば、他のユーザーが作成したファイルであっても、~/project/RandD ディレクトリ内の任意のファイルを削除できてしまいます。これは、ディレクトリに対する書き込み権限があれば、ファイルの作成と削除が可能になるためです。誤った削除や悪意のある削除を防ぐために、「スティッキービット(sticky bit)」と呼ばれる特殊な権限を設定します。

ディレクトリにスティッキービットを適用すると、この動作が変更されます。ディレクトリ内のファイルは、そのファイルの所有者、ディレクトリの所有者、またはルート(root)ユーザーのみが削除または名前変更できるようになります。これは、今回の RandD ディレクトリのような共同作業環境に最適です。

スティッキービットを設定するには、chmod コマンドを 4 桁の 8 進数で使用します。コマンドは chmod 1771 RandD となります。

  • 最初の桁 1 は、スティッキービットを表します。
  • 続く 3 桁 771 は、標準的な権限を設定します。ユーザーに rwx、グループに rwx、その他に --x です。

まず、RandD の権限を変更するために、その親ディレクトリに移動する必要があります。現在は ~/project/RandD にいるため、cd .. コマンドを使用して 1 つ上のレベルの ~/project に移動します。

cd ..

次に、~/project ディレクトリから RandD ディレクトリにスティッキービットを適用します。

chmod 1771 RandD

これで RandD ディレクトリにスティッキービットが設定されました。最後のステップでは、ls -l コマンドを使用して、この特殊権限がどのように表示されるかを確認し、その効果を検証します。

ls -l によるスティッキービット権限の検証

この最後のステップでは、スティッキービットが RandD ディレクトリに正しく適用されたことを確認します。ls -l コマンドは、スティッキービットのような特殊権限を視覚的に表示します。引き続き ~/project ディレクトリで作業します。

シェルプロンプトで ls -ld RandD コマンドを入力して、ディレクトリ自体の権限を表示します。

ls -ld RandD

出力を注意深く確認してください。以下のようになっているはずです。

drwxrwx--t 2 labex research 4096 Dec 12 10:45 RandD

主な変更点は、権限文字列 drwxrwx--t にあります。

  • d はディレクトリであることを示します。
  • rwx はユーザー(labex)がフル権限を持っていることを示します。
  • 2 番目の rwxresearch グループがフル権限を持っていることを示します。
  • 最後の部分 --t がスティッキービットが表示されている箇所です。通常は「その他」の実行権限(x)が表示される場所に t が表示されています。小文字の t は、スティッキービットと「その他」の実行権限の両方が設定されていることを示します。これにより、chmod 1771 コマンドが成功したことが確認できます。

おめでとうございます!umask を使用して安全なデフォルト権限を持つ共有ディレクトリを構成し、スティッキービットを設定することでコンテンツを不正な削除から保護することに成功しました。

まとめ

この実験では、ユーザーグループのために安全な共有ディレクトリを準備する方法を学びました。これには、groupadd による新しいグループの作成、ディレクトリの作成、そして chgrpchmod を使用した正しいグループ所有権と制限的な権限(770)の割り当てが含まれます。また、特定の umask 値(027)を設定することで、新しく作成されるファイルやディレクトリのデフォルト権限を操作する練習を行い、新しいファイルを作成してその権限を検査することでその効果を確認しました。

さらに、chmod 1771 コマンドを使用して共有ディレクトリにスティッキービットを適用することで、特殊権限について学習しました。スティッキービットは共同作業環境において不可欠であり、ユーザーが自分が所有するファイルのみを削除または名前変更できるようにすることで、他人の作業成果が誤って、あるいは悪意を持って削除されるのを防ぐ役割を果たすことを学びました。最後に、ls -l を使用してディレクトリの権限文字列内の t を特定し、スティッキービットが正しく適用されていることを確認しました。