UNIX系OSのファイルアクセス権
Python会が管理する医学科学生用計算サーバ (以下、医学科計算サーバ) が本格的に使える状態に (ほぼ) なりました。 OS は Ubuntu 18.04 LTS です。
計算サーバのようにUNIX系OSをマルチユーザで使う場合、ファイルの所有権/アクセス権の理解が必須です。 本稿ではその基本と、その拡張であるACL (Access Control List) をとても雑に説明します。
Ubuntu 18.04を念頭に置きますが、他のLinuxでもほぼ同じです。 macOSでのACL操作は方法が少し異なりますが、基本の仕組みは全て同じです。
ファイルの所有者とアクセス権
医学科計算サーバでは、一人ひとりに独立のアカウントを発行します。 このような環境では、自分のデータは自分だけが読み書きできるようにしたりできます。 以下がその仕組みです。
各ファイルやディレクトリには「所有者」「所有グループ」「アクセス権 (パーミッション) 」の情報がそれぞれ記録されています。 所有者は、自分だけが操作できるか、他人にも読み書きを許すかなどを、「アクセス権」の設定によってファイル毎に自由に決められます。
これらの情報は ls -l で確認できます。
$ ls -l
-rw-r----- 1 ogawa ogawa 4462 3 16 22:38 202003-ACL.md
-rwxr-xr-- 1 ogawa users 32 1 10 14:43 test.py
冒頭の -rw-r--r-- などがアクセス権設定、ogawa が所有者。
202003-ACL.md は所有グループも同名の ogawa (ubuntuではこれが普通)、test.py は users が所有グループです。
アクセス権は rwx の3文字が1セットで、これが3セット並びます。
1セット目が所有者、2セット目が所有グループ、3セット目がそれ以外に対するアクセス権を表します。
rwxは読み取り (r) 、書き込み (w) 、実行 (x) です。
- に変わっている操作はできません。
(左端の - にはディレクトリの場合に d が入る。)
上の例の場合、202003-ACL.md は、
- 所有者は読み取りと書き込みが可能。 (実行はできない)
- 所有グループ(に属する所有者以外のユーザ)は読み取りが可能。 (書き込みと実行は不可)
- その他のユーザはファイル内容への一切のアクセスが不可。
test.py は
- 所有者は読み取り・書き込み・実行すべて可能。
- 所有グループ (に属する所有者以外のユーザ) は読み取りと実行が可能。 (書き込みは不可)
- その他のユーザは読み取りのみ可能。 (書き込みと実行は不可)
またこれらはしばしば、r=4、w=2、x=1 の足し算による3桁の8進数で表します。
202003-ALC.md はパーミッション 640、test.py はパーミッション 754 です。
アクセス権設定コマンド chmod を使い、例えば
$ chmod 700 hogehoge.py
とすれば、ファイル hogehoge.py は自分のみ読み書き実行全て可能、他人は一切アクセス不可となります。
Ubuntuなどではホームディレクトリの初期パーミッションが 755 だったりするため、気になる場合はこのように変更するのもおすすめです。
データ共有/共同作業/共同研究がしたい
では、共同研究などで「特定の人」にだけアクセスを許すにはどうしたらいいか?
一つの方法は、一緒に作業したい仲間を含むグループを作り、ファイルの所有グループとアクセス権を適当に設定することです。 しかしグループを作るにはシステム管理者にその都度依頼しなければならず、あまり良い方法ではありません。
そこで登場するのが POSIX ACL という、上記のアクセス権に詳細な例外条項を加える仕組みです。 例えば
$ setfacl -m user:otomodachi:rwx hogehoge.py
のようにすると、他人に対するパーミッションが0のファイルでも、指定したユーザ (otomodachi) にだけファイルの読み書き実行、全てを許可することができます。
ディレクトリに対して設定することもできます。これで共同作業や共同研究も自由自在です。
おしまい。
- 前の記事 : シェルコマンドに触れてみよう
- 次の記事 : ICA(独立成分分析)について
- 関連記事 :
