大阪大学医学部 Python会

Now is better than never.

UNIX系OSのファイルアクセス権

2020-03-17(Tue) - Posted by 小川 in 技術ブログ    tag:Unix

Contents

    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.pyusers が所有グループです。

    アクセス権は 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 はパーミッション 640test.py はパーミッション 754 です。

    アクセス権設定コマンド chmod を使い、例えば

    $ chmod 700 hogehoge.py
    

    とすれば、ファイル hogehoge.py は自分のみ読み書き実行全て可能、他人は一切アクセス不可となります。 Ubuntuなどではホームディレクトリの初期パーミッションが 755 だったりするため、気になる場合はこのように変更するのもおすすめです。

    データ共有/共同作業/共同研究がしたい

    では、共同研究などで「特定の人」にだけアクセスを許すにはどうしたらいいか?

    一つの方法は、一緒に作業したい仲間を含むグループを作り、ファイルの所有グループとアクセス権を適当に設定することです。 しかしグループを作るにはシステム管理者にその都度依頼しなければならず、あまり良い方法ではありません。

    そこで登場するのが POSIX ACL という、上記のアクセス権に詳細な例外条項を加える仕組みです。 例えば

    $ setfacl -m user:otomodachi:rwx hogehoge.py
    

    のようにすると、他人に対するパーミッションが0のファイルでも、指定したユーザ (otomodachi) にだけファイルの読み書き実行、全てを許可することができます。 ディレクトリに対して設定することもできます。これで共同作業や共同研究も自由自在です。

    おしまい。