鱧技術

hamo_daisukiの技術メモ

ディレクトリ内のすべての新しいファイルにアクセス許可を設定したい

DistroWatch Weekly, Issue 1062, 18 March 2024 より抜粋
Questions and Answers (by Jesse Smith)(元記事

ディレクトリ内のすべての新しいファイルにアクセス許可を設定したい

Reading-is-for-everyoneからの質問です: media/uploadディレクトリに置かれたファイルをスキャンするcronスクリプトがあります。これらのファイルのパーミッションは644でなければなりません。これらのファイルのパーミッションをすべてのファイルに自動的に設定する方法はありますか?

DistroWatchの回答: ディレクトリに置かれたファイルが特定のパーミッションを持っていることを確認する方法はいくつかあります。この場合、644パーミッションの値は、ファイルの所有者がそれらを読み、編集できることを示しています。他のユーザー(ファイルの所有者グループのメンバーとシステム上の他のユーザー)は、これらのファイルを読むことができます。6は所有者の読み取りと書き込みのパーミッションを示し、2つの4はそれぞれ他のユーザーの読み取り専用アクセスを示します。

media/uploadディレクトリにファイルをアップロード、作成、または移動する各ユーザーのユーザーアカウントをある程度制御できると仮定すると、1つのアプローチとして、新規ファイルのデフォルトパーミッションを設定することができます。これにより、システム上のユーザーによって作成またはアップロードされたすべての新規ファイルに特定のパーミッションが設定されます。デフォルトのファイルパーミッションを設定するツールは、umaskと呼ばれます。

umask ユーティリティは、新しく作成されたファイルやディレクトリに対して、特定のユーザにどのパーミッションを与えないかを設定します。umaskコマンドは、8進数のパーミッション番号(chmodコマンドと同じ形式)を受け付け、新しいファイルに指定されたパーミッションを削除させます。例えば、ほとんどのシステムでは、umaskの値は022に設定されています。これは、所有者はパーミッションを削除されない(新しいファイルに対して何でもできる)ことを意味します。しかし、ファイルのグループのメンバーやシステム上の他のユーザーは、ファイルを編集するためのアクセス権(パーミッション2)が削除さ れます。

umask値は通常、ユーザーのシェルのスタートアップ設定ファイル(/etc/bash.bashrcや~/.bashrcなど)で設定さ れます。いくつかのディストリビューション、特にDebianファミリーでは、umask値は/etc/login.defsファイルで設定さ れます。

すべてのユーザーのumask値を022にしたいケースが多いので、多くのディストリビューションでは一般的なデフォルト値にされています。

とはいえ、ユーザーのumaskがすでに022に設定されていて、彼らがファイルのパーミッションを変更している、あるいは他の何かがパーミッションを変更している、あるいはあなたがユーザーのumaskを変更するアクセス権を持っていない場合、どうすればいいでしょうか?別の方法としては、cronジョブが実行される直前にファイルのパーミッションを変更することです。rootユーザーが以下のchmodコマンドを実行し、全てのユーザーに/media/uploadディレクトリ下のファイルへの読み取り権限を与えることでこれを達成することができます:

    chmod -R a+r /media/upload/ 

上記の行を既存のスクリプトの先頭に置くか、スクリプトの起動前にルートユーザーのcrontabから実行させることで、/media/upload以下のすべてのファイルとサブディレクトリの読み取りアクセスが可能になります。