お世話になっています。質問は2段階でお尋ねします。次のようなディレクトリ構造があるとします。

/parent/user1
/parent/user2
/parent/user3

各ユーザは自分のディレクトリやその中のファイルは削除しても構いませんが、parentディレクトリは削除させたくありません。以前、スクリプトのバグで削除するパスが /parent/ /user1のようにスペースが入った状態で実行されたことがありました。この結果、/parent以下全てのディレクトリが削除されてしまいました。そこで適切なパーミッション、スティッキービット、あるいはACLの設定を探しています。

Lunux/Mac OS XなどUNIX系のファイルシステムについて

実はこの話はHDFSで起きたことですが、HDFSのパーミッションやACLはLinuxのファイルシステムに準ずるとのことですので、まずLinuxやMacについてお尋ねします。

実験で次のようなコマンドを実行しました(Mac OS X 10.13.4)。

mkdir parent
cd parent
mkdir sub

ll
total 0
0 drwxr-xr-x 2 keisuke staff 64 Apr 19 13:59 sub/

cd ..
ll
total 0
0 drwxr-xr-x 3 keisuke staff 96 Apr 19 13:59 parent/

ここでparentを別ユーザのものに設定します。

sudo chown root:nobody parent
Password:

ll
total 0
0 drwxr-xr-x 3 root nobody 96 Apr 19 13:59 parent/

さらにスティッキービットを設定します。

sudo chmod 1777 parent
Password:

ll
total 0
0 drwxrwxrwt 3 root nobody 96 Apr 19 13:59 parent/

スティッキービットを設定しつつ、権限は全開放したつもりです。

cd parent
ll
total 0
0 drwxr-xr-x 2 keisuke staff 64 Apr 19 13:59 sub/

サブディレクトリは私の所有です。

rm -rf sub
ll
total 0

当然ですが削除できます。

cd ..
rm -rf parent
ll
total 0

rootが所有するフォルダを私の権限で削除できてしまいました。

Wikipediaによるとスティッキービットは「ディレクトリ配下のファイルのファイル名変更や削除はそのファイルの所有者、ディレクトリの所有者、スーパーユーザーのいずれかしかできなくなる」とあります。このとおりだとすると次の点が困ります。

  • スティッキービットが立っているのにparentが削除できてしまった
  • 配下のファイルやディレクトリにはparentの設定を反映させたくない

HDFSの場合

前述のとおり、実際に問題に対処したいのはHDFS (Hadoopのファイルシステム)です。多くの人がこのファイルシステム上で作業をしています。スクリプトのバグでhdfs dfs -rm -r /parent/ /myfiles/.../...を誤って実行してしまったことがあります(スペースが空いていたので、全員のファイルを消してしまった)。再発防止を図りたいと思い、HDFSのパーミッション、スティッキービット、ACLについて調べているところです。もちろんスクリプトにも改修を加えて、削除などを実行する前にはパスを確認するようにしましたが、改修漏れがあるかも知れませんので抜本的な対策を考えています。

HDFSは社内の多くの人がこの上で作業をしています。事故を防ぐためのベストプラクティスをご存知でしたらご教示下さると幸いです。

よろしくお願いします。