
まず、親ディレクトリには適切な権限があります。これで問題は解決しました。次に、問題について説明します。
ユーザーは書き込みやrmができません/mnt/file-server/reports/vendor/client/2018/02-04-02-10/
すべてのユーザーは sftpusers グループのメンバーです。すべてのディレクトリは02-04-02-10
同じ権限を持ちます。ファイル/ディレクトリがディレクトリ内にある場合を除き、すべてのユーザーはすべてのディレクトリ内のファイル/ディレクトリに対して書き込み/削除を実行できます02-04-02-10
。
$tree -Rpg /mnt/file-server
/mnt/file-server/
├── [drwsrws--- sftpuser] reports
│ ├── [drwsrws--- sftpuser] vendor
│ │ ├── [drwsrws--- sftpuser] client
│ │ │ └── [drwsrws--- sftpuser] 2018
│ │ │ ├── [drwsrws--- sftpuser] 02-04-02-10
│ │ │ │ ├── [-rw-rw---- sftpuser] Fast_Track_Instock.csv
│ │ │ │ ├── [-rw-rw---- sftpuser] Forecast_and_Inventory_Planning.csv
│ │ │ │ ├── [-rw-rw---- sftpuser] parent_asi.csv
│ │ │ │ ├── [-rw-rw---- sftpuser] Sales_and_Inventory_Product_Details_Manufacturer.csv
│ │ │ │ ├── [-rw-rw---- sftpuser] Sales_and_Inventory_Product_Details_Sourcing.csv
│ │ │ │ ├── [-rw-rw---- sftpuser] Sales_Diagnostic_Ordered_Revenue.csv
│ │ │ │ ├── [-rw-rw---- sftpuser] Sales_Diagnostic_Shipped_Cogs.csv
│ │ │ │ └── [-rw-rw---- sftpuser] Sales_Diagnostic_Shipped_Revenue.csv
$lsattr /mnt/file-server/reports/vendor/client/2018/ | grep 02-04
-------------e-- ./02-04-02-10
$stat /mnt/file-server/reports/vendor/client/2018/02-04-02-10/
File: ‘02-04-02-10/‘
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 97eh/2430d Inode: 15335547 Links: 2
Access: (2770/drwsrws---) Uid: ( 2001/ fps) Gid: ( 1006/sftpusers)
Access: 2018-03-19 10:03:34.657116835 -0600
Modify: 2018-03-19 10:03:43.743147764 -0600
Change: 2018-03-19 17:40:03.574287737 -0600
Birth: -
ルート権限でファイルの書き込み/削除ができます。問題ありません。
以下は、ユーザーとファイルへのタッチ試行の例です。
id -a uid=3009(seanhadmin) gid=3009(seanhadmin) groups=3009(seanhadmin),1006(sftpusers)
touch /mnt/file-server/reports/vendor/client/2018/02-04-02-10/foo touch: cannot touch ‘/mnt/file-server/reports/vendor/client/2018/02-04-02-10/foo’: Permission denied
$df -h | grep file-server
/dev/md126 4.0T 1.3T 2.6T 33% /mnt/file-server
いったい何が足りないのでしょうか? 絶望のあまりサーバーを再起動してみたこともあります (もちろん、問題は解決しませんでした)。
アップデート
そこで、ACL に何か問題があることに気付きました。
適切な ACL は次のようになります。
$getfacl 01-07-01-13/
file: 01-07-01-13/
owner: fps
group: sftpusers
flags: ss-
user::rwx
group::rwx
other::---
default:user::rwx
default:group::rwx
default:group:sftpusers:rwx
default:mask::rwx
default:other::---
こちらは02-04-02-10
getfacl 02-04-02-10/
file: 02-04-02-10/
owner: fps
group: sftpusers
flags: -s-
user::rwx
group::r-x
group:2000:rwx
mask::rwx
other::---
default:user::rwx
default:group::r-x
default:group:sftpusers:rwx
default:mask::rwx
default:other::---
何を試しても、正しく更新できませんでした。回避策として、ディレクトリを別のファイルシステムに移動してから元に戻し、権限/所有権を再度修正しました。
ACL が更新されない理由について解決策をお持ちの方がいらっしゃいましたら、ぜひお聞かせください。
答え1
回避策としては、問題のあるディレクトリの親ディレクトリを別のファイルシステムにコピーし、それを元の場所にコピーして、権限/所有権を修正します。
問題のあるディレクトリが rm されていたため、setfacl の問題をトラブルシューティングできませんでした。
ご興味があれば、私が実行したコマンドは次のとおりです。
$setfacl -Rd --set u:fps:rwx 02-04-02-10 $setfacl -Rd --set g:sftpusers:rwx 02-04-02-10 $setfacl -Rdm o::0 02-04-02-10