ファイルの権限を変更する
MacBookは複数のメンバーでお互いのプライバシーを尊重しながら使うことができます。例えば家族で、また職場の同僚や、チームなどで1台のMacBookを共用することもできますし、複数のmacやwindowsPCを接続し、共有フォルダを設定してファイルサーバのように使うこともできます。セキュリティを確保するためにも、ファイルへのアクセス権限を正しく設定しましょう。
macOS Sequoia上のターミナルでファイルの権限を変更するには、`chmod`(change mode)コマンドを利用します。`chmod`はUNIX系システムに標準搭載されており、ファイルやディレクトリの「パーミッション(アクセス権)」を設定・変更するためのコマンドです。
ファイルやフォルダには3種類のユーザー区分があります。所有者(user: u)、グループ(group: g)、その他のユーザー(others: o)です。各区分に対して、「読み取り(read: r)」「書き込み(write: w)」「実行(execute: x)」の3種の権限を設定できるので。これらを組み合わせてファイルモードを表現します。
権限はシンボリックモード(記号モード)か数値モード(8進数モード)で指定できます。
数値モードでのコマンドの基本的な構文は次のようになります。
chmod [オプション] モード ファイル名
代表的な例として、`chmod 755 script.sh` は所有者に全権限(読み・書き・実行)、グループとその他のユーザーに読み取り・実行権限を付与します。数値モードは、3種類のユーザーに対して信号機を一つずつ取り付けたようなもので、それぞれu・g・oの順に7(rwx)、6(rw-)、5(r-x)などの数値を割り当てます。
chmodのシンボリックモードは、対象と権限を文字で指定する方式です。構文は次のようになります。
chmod [対象][演算子][権限] ファイル
対象は次の通りです。
`u`: 所有者(user)
`g`: グループ(group)
`o`: その他のユーザー(others)
`a`: 全員(all)
演算子には次の3種を使用します。
`+`: 指定した権限を追加する
`-`: 指定した権限を削除する
`=`: 指定した権限のみを設定し、他は全て削除する
権限の種類は以下の通り。
`r`: 読み取り権限(read)
`w`: 書き込み権限(write)
`x`: 実行権限(execute)
`X`: ディレクトリまたは既に実行権限があるファイルにのみxを付与
`s`: setuidまたはsetgidビットを設定
`t`: スティッキービットを設定(主にディレクトリ用)
たとえば、全てのユーザーに実行権限を追加する場合は次のように実行します。
chmod a+x program.sh
この例では、所有者・グループ・その他全員にprogram.shファイルの実行権xを与えます。
逆に、グループの実行権限を削除したい場合は次のようにします。
chmod g-x program.sh
特定の権限を完全に置き換えたい場合(=演算子)には次のように記述します。
chmod u=rw,go=r file.txt
これは、file.txtファイルの所有者には読み書き権限(rw)を与え、グループとその他には読み取り権限のみ(r)を与えるという意味です。
スティッキービットについて少し説明します。通常、ディレクトリに書き込み権限(w)と実行権限(x)があれば、その中のファイルを誰でも削除することができます。しかしスティッキービットを設定すると、所有者(またはroot権限の管理者)だけが削除・リネームできるようになります。
こうするとどんなメリットがあるかというと、複数ユーザーがアクセスする公開ディレクトリで他人のファイルが誤って削除されるのを防ぐ効果があります。
典型的な使用例が`/tmp`ディレクトリです。`/tmp`はシステムやアプリケーションが一時ファイルを作成する領域で、すべてのユーザーが書き込み可能ですが、スティッキービットが設定されているため、各ユーザーは他のユーザーが作成したファイルを削除したり変更することができなくなります。たとえば、共有ディレクトリ/sharedで他人のファイル削除を防ぐには次のように設定します。
chmod o+t /shared
対象ファイルの権限の状態は、lsコマンドに-lというオプションをつければ確認することができます。構文は次のとおりです。
ls -l ファイル名
実際にコマンドを使うイメージは以下のようになります。
1. 対象ファイルの権限を確認:
ls -l sample.sh
出力例:`-rw-r--r-- 1 user staff 2048 Oct 17 13:00 sample.sh`
2. 実行権限を追加:
chmod u+x sample.sh
3. 再確認:
ls -l sample.sh
出力例:`-rwxr--r-- 1 user staff 2048 Oct 17 13:01 sample.sh`
また、再帰的にフォルダ内全てを変更する場合はオプション`-R`を付与します。
chmod -R 755 /path/to/folder
数値モードは構成を明確に指定したい場合に、シンボリックモードは柔軟に一部変更したい場合に向いています。