

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

[code]

    /parent/user1
    /parent/user2
    /parent/user3
    
[/code]

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

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

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

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

[code]

    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/
    
[/code]

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

[code]

    sudo chown root:nobody parent
    Password:
    
    ll
    total 0
    0 drwxr-xr-x 3 root nobody 96 Apr 19 13:59 parent/
    
[/code]

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

[code]

    sudo chmod 1777 parent
    Password:
    
    ll
    total 0
    0 drwxrwxrwt 3 root nobody 96 Apr 19 13:59 parent/
    
[/code]

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

[code]

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

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

[code]

    rm -rf sub
    ll
    total 0
    
[/code]

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

[code]

    cd ..
    rm -rf parent
    ll
    total 0
    
[/code]

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

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

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

# HDFSの場合

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

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

よろしくお願いします。


CC BY-SA 3.0
2018-04-19T21:26:12.970
43412
2018-04-19T23:01:49.637
14631
question
linux filesystems hadoop
親ディレクトリを削除できないようにしたい（子ディレクトリは削除できる）


`parent`ディレクトリを削除できる権限は、`parent`のパーミッションやオーナーではなく、`parent`が入っているディレクトリ（`parent`の親ディレクトリ）のパーミッションやオーナーで決まるのではないでしょうか。


CC BY-SA 3.0
2018-04-19T22:44:45.693
43414
2018-04-19T23:01:49.637
2018-04-19T23:01:49.637
4010
4010
43412
answer