試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

GNU/Linux上でユーザやグループごとのアクセス権を設定する機能を使用するための覚え書き

(NT系)Windowsでは、ファイルやディレクトリに関するアクセス権を、ユーザやグループごとに設定できる。
GNU/Linuxでは、カーネルのバージョン2.6からこの機能が導入された。名前はWindowsと同じくACL(Access Control List/アクセス制御リスト)といい、POSIXに準拠している。
複数人で使用している場合には役立つが、個人で使用している場合にはむしろ余計な機能と言えるので、切ってしまってもよい。*1

カーネル設定

ファイルシステムごとにACLのサポート項目があり、有効にするか無効にするかを選択する。ext4についても同様の項目があるが、実験的なファイルシステムのため省略。
ファイルシステムサポート自体はモジュールにできるが、拡張属性とACLのサポートは、有効/無効の切り替えのみ。

File systems  --->
 <*> Second extended fs support              [CONFIG_EXT2_FS]
 [*]  Ext2 extended attributes               [CONFIG_EXT2_FS_XATTR]
 [*]   Ext2 POSIX Access Control Lists       [CONFIG_EXT2_FS_POSIX_ACL]
 <*> Ext3 journalling file system support    [CONFIG_EXT3_FS]
 [*]   Ext3 extended attributes              [CONFIG_EXT3_FS_XATTR]
 [*]    Ext3 POSIX Access Control Lists      [CONFIG_EXT3_FS_POSIX_ACL]
 <*> Reiserfs support                        [CONFIG_REISERFS_FS]
 [*]  ReiserFS extended attributes           [CONFIG_REISERFS_FS_XATTR]
 [*]   ReiserFS POSIX Access Control Lists   [CONFIG_REISERFS_FS_POSIX_ACL]
 <*> JFS filesystem support                  [CONFIG_JFS_FS]
 [*]  JFS POSIX Access Control Lists         [CONFIG_JFS_POSIX_ACL]
 <*> XFS filesystem support                  [CONFIG_XFS_FS]
 [*]  XFS POSIX ACL support                  [CONFIG_XFS_POSIX_ACL]
 Pseudo filesystems  --->
  [*] Virtual memory file system support (former shm fs)
                                             [CONFIG_TMPFS]
  [*]  Tmpfs POSIX Access Control Lists      [CONFIG_TMPFS_POSIX_ACL]
 Network File Systems  --->
  <*> CIFS support (advanced network filesystem for Samba, Window and
      other CIFS compliant servers)          [CONFIG_CIFS]
  [*]  CIFS extended attributes              [CONFIG_CIFS_XATTR]
  [*]   CIFS POSIX Extensions                [CONFIG_CIFS_POSIX]

ディストリのカーネルでは基本的にACLは有効にされている。拡張属性(XATTR)も同様に有効にされたものがパッケージになっている。ただし、ものによっては無効になっているものもあるようだ。
Ubuntu Gutsy(7.10)のx86_64版のカーネルの設定では下のようになっていた。

# CONFIG_CIFS_XATTR is not set
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_JFS_POSIX_ACL=y
# CONFIG_NFSD_V3_ACL is not set
# CONFIG_NFS_V3_ACL is not set
CONFIG_REISERFS_FS_POSIX_ACL=y
# CONFIG_TMPFS_POSIX_ACL is not set
CONFIG_XFS_POSIX_ACL=y

ext2/ext3ファイルシステムACLを使用するには

マウントオプション「acl」が必要。/etc/fstabのオプション記述部に「acl」を書く(「[元々のオプション],acl」のようにして追加する)。その他のファイルシステムでは指定不要な場合があるが、全て確認したわけではない。
(2011/6/28)指定方法についての記述を調整

libaclとcoreutils

多くのディストリのパッケージでは、標準的なコマンド(例: ls)を含むcoreutilsパッケージを、ACLサポートライブラリ(libacl)を使用してビルドしている。Gentoo Linuxでは「USE=acl」を指定することで有効にする*2必要がある。これ以外のパッケージにも「acl」のUSEフラグ指定ができるパッケージがあり、これらも有効にする。
ACLの属性を付けてファイルをコピーするには、(libaclを使用したcoreutilsの)cpコマンドに-pオプションを付ける。
tarコマンドは、バージョン1.19の時点ではACLをサポートしないので、ACLの情報を保存したい場合、代わりに(libaclを使用した)starを使用する。

コマンドによる個別のアクセス権の操作

コマンドのみでACLを扱う場合の操作やstarによるバックアップなどについては
http://www.itmedia.co.jp/enterprise/0403/06/epn01.html
に詳しく書かれている。他にも、コマンドでの操作に関する情報は豊富にある。

  • getfacl: アクセス権を読み取る
  • setfacl: アクセス権を設定

lsコマンドで-lオプションを使用したとき、ACLの設定された項目のアクセス権部分の一番右には「+」が付く。

GUIでアクセス権を編集(NautilusとThunar)

Eicielというツールが役に立つ。ACLだけでなく、拡張属性にも対応。
ユーザ/グループ名は、下の一覧から上にドラッグ・アンド・ドロップすると追加できる。
Debian/Ubuntuではパッケージが用意されている。Gentoo Linuxの場合、公式パッケージは存在しないが、「sunrise」のOverlayに含まれている。laymanで追加した後、必要ならローカルOverlayにコピーするかリンクを張るなどしてインストールしておく(具体的な手順は省略)。
本家この記事スクリーンショットがある。
Nautilusでは、拡張機能がインストールされるため、プロパティダイアログに「Access Control List」タブが出るが、Thunarでは、アクションの設定として、下のような項目を作成する。

  • 基本
    • 名前: 詳細なアクセス権と拡張属性の設定(_A)...
    • 説明: Eicielを用いてACLと拡張属性の編集を行います
    • コマンド: eiciel %f
    • アイコン: eiciel(「Uncategorized Icons」もしくは「All Icons」の中)
  • 登場する条件
    • パターン: *
    • 選択: 全て

その後、右クリックメニューからこの項目を選択すると、Eicielが起動して編集に入れる。

KDEの場合

(2009/8/17)KDEDolphinでは標準でアクセス制御リストの操作が行えるようになっていることが分かった。
プロパティを開いて「パーミッション」タブの中央にある「詳細なパーミッション」のボタンを押すと

アクセス制御リストの編集ダイアログが出る。

最初は上の3つの項目だけが表示されていて、対象のユーザ/グループを追加するとこちらのダイアログでしか編集できなくなるが、その後、上の3つの項目以外を消すことにより元の状態に戻る。

使用したバージョン:

  • Linux 2.6.23
  • acl 2.2.45
  • Eiciel 0.9.2
  • Nautilus 2.20.0(2.20.0-r1)
  • Thunar 0.8.0(0.8.0-r3)
  • Dolphin 1.2.1

関連記事:

*1:coreutilsでのlibacl使用なども含めると、完全に切ることができるのはGentooぐらいかもしれない

*2:使用しない場合は「USE=-acl」で無効にできるが、「sys-apps/coreutils」の再ビルド前に「sys-apps/acl」を削除すると、coreutilsに含まれるコマンドが実行できなくなり、パッケージのインストールもできなくなる。そうなるとLiveCDなどから復旧しなくてはならなくなるので注意