ここのことはなかったことにするかもしれない

仕事がらみの記事を主として扱いますが、あくまで個人ブログです。2013年以前の記事は https://yellow-73.hatenablog.com/ にあります。

ZFSでACL設定の継承がある場合のmkdir()の挙動

はじめに

https://boiledorange73.hatenablog.com/entry/2014/04/21/000000 のつづきです。

SFTPのところについて、ふと、どのレベルでACL継承を保持するのか見といた方がいいかな、と思いました。

実験してみた

ソースはこんなかんじ。DIRPATH1はmkdir()のみ、DIRPATH2はmkdir()とchmod()を実行。

#include 

#define DIRPATH1 "./dx1"
#define DIRPATH2 "./dx2"

main() {
  /* DIRPATH1 */
  mkdir(DIRPATH1, 0750);
  /* DIRPATH2 */
  mkdir(DIRPATH2, 0750);
  chmod(DIRPATH2, 0700);

  return 0;
}

これをACL継承のついたディレクトリに移動して実行。

% ls -l
...
drwxr-xr-x+ 2 ... dx1/
drwx------  2 ... dx2/
...

ファイル属性(1つ目のフィールド)の末尾に"+"が付いてるのがACL設定が付いてるもの、"+"が無いのが伝統的な属性のみでなっているものです。

前エントリのSFTPに関する話とあわせると、SFTPでは、

ということをしているようです。

Sambaについてもいちおう検討

SFTPとかSambaとかアプリケーションで分けて考えなくてもだいたい想像がつくようになってきた(mkdir()でパーミッションを設定しているだろうから、ディレクトリはACL継承される)ところと思いますが、あえてやってみます(mkdir()のあとchmod()を呼んでパーミッション設定する可能性も無いことはない)。

まず、dsmbディレクトリを作り、everyoneのエントリでパーミッションなしとし、owner, group に"fd"属性を付けます。ちょうど 750 になります。

% mkdir dsmb
% setfacl -m owner@:rwxp--aARWcCos:fd:allow dsmb
% setfacl -m group@:r-x---a-R-c--s:fd:allow dsmb
% setfacl -m everyone@::fd:allow dsmb
% getfacl dsmb
...
            owner@:rwxp--aARWcCos:fd----:allow
            group@:r-x---a-R-c--s:fd----:allow
         everyone@:--------------:fd----:allow

ここに仮にフォルダを作ります。Sambaはフォルダを作る際に755になるようにしています。

(フォルダ作成は略)
% ls -ld dsmb/新しいフォルダー
drwxr-x---+ 2 ... dsmb/新しいフォルダー
% getfacl dsmb/新しいフォルダー
...
            owner@:rwxp--aARWcCos:fd----:allow
            group@:r-x---a-R-c--s:fd----:allow
         everyone@:--------------:fd----:allow
%

dsmb/新しいフォルダー は750ですから、予想通りでしたね。