496 文字
2 分
権限があるはずなのにfindコマンドでPermission deniedが表示される場合の対処法
findコマンドを使ったときに、対象ディレクトリの権限があるはずなのにPermission deniedと表示されて原因究明に時間がかかったため原因と対応メモです。
現象
以下のように、findコマンドを叩くとfind: Failed to restore initial working directory: /home/user/hoge: Permission deniedといったエラーが表示されてしまいます。
$ sudo -u nobody find ../fuga../fuga../fuga/piyofind: Failed to restore initial working directory: /home/user/hoge: Permission denied一応ちゃんとファイル一覧が表示されはしたので、findコマンド自体は正しく動作してそうです。
../fugaの権限を確認してみても、ちゃんとread権限はありそうです。
$ ls -l ../ | grep fugadrwxrwxrwx 1 user user 512 Jul 28 03:29 fuga一応ファイル一覧自体は取得できているので問題ないといえばないのですが、気持ち悪いので原因の調査を行いました。
原因
原因としては、findコマンドの実行ユーザはカレントディレクトリの実行権限も持っている必要がある、ということのようです。
確かに、findコマンドを叩いたディレクトリの権限を見てみると、findコマンドの実行ユーザは実行権限を持っていませんでした。
$ ls -l ../ | grep hogedrwx------ 1 user user 512 Jul 28 03:03 hogeread権限を与えてみます。
# 実行ユーザ(nobodyユーザ)でもreadできるようにする$ sudo chmod 701 ../hoge$ ls -l ../ | grep hogedrwx-----x 1 user user 512 Jul 28 03:03 hoge
# 再度nobodyユーザでfindを叩く$ sudo -u nobody find ../fuga../fuga../fuga/piyoエラーなく実行できるようになりました。
参考:
対策
カレントディレクトリにfindコマンド実行ユーザに実行権限を与えるか、権限を持っているディレクトリでfindコマンドを叩くようにしましょう。
それか、気にならないなら無視してもまぁいいんじゃないかなと思います。