ディレクトリの権限は正しいのに、mvを使用するとアクセス許可が拒否されるのはなぜですか?


13

ディレクトリの所有者が自分のユーザーに設定されており、ユーザーの権限が7に設定されMusicているにmvもかかわらず、フォルダを移動しようとすると、権限が拒否されます。

(私はsudoを使用できることを知っていますが、何が問題なのかを知りたいのです。何かが怪しい臭いがします)。Ps:私はMac OS X El Capitanを使用しています。

端末のスクリーンショット


1
誰もが同じエラーに出くわします、それはあなたが開いているファイルをmvしようとしているためかもしれません。OPのケースではありませんが、役立つかもしれないと言っているだけです。
aderchox

回答:


20

フォルダーaに移動bしているときに、に移動するとc、のフォルダーのアクセス許可aによって、実行できる操作が決まります。

この場合、の権限.が最も重要になります。

権限は単純なものよりも複雑であることを確認してくださいrwx。あなたのmusicフォルダがあり@最後に、.フォルダがあり+最後に。

  • xattr -h@記号の複雑な権限を判別するために使用します。
  • getfacl+記号のACLを判別するために使用します。

「複雑な権限」と呼ぶリソースはありますか?
user1717828

man xattr良い出発点かもしれません。
Konerak

1
いいえ、手動で入力する必要はありません。他の人が詳細を知りたい場合は、Googleで別の名前を見つけることができました。拡張属性です。
user1717828

4
またはを使用しますls -la@e。最も可能性が高いのは、deny delete名前の変更を防ぐACL があったことです。
ステファンChazelas

1
@Timo、これらのACLは、これらのディレクトリの削除または名前変更を防ぎます。おそらく、いくつかのアプリケーションがそれらがそこにあることに依存していて、そうでなければ失敗するような理由で、それらはそこに置かれました。
ステファンChazelas

18

LinuxにはWindowsサブシステムを使用していました。別のbashインスタンスでディレクトリを開いていました。それを閉じると、ディレクトリが移動します。


3
WSLでリモートを使用するVS Codeでは、そのVS Codeプロジェクトの外部でWSLへのエディターを閉じてターミナルを開く必要がありました。
ビョルン

9

そのディレクトリのどこかに少なくとも1つのファイルがあり、適切な権限がありませんでした。

だから、私がしたことは:

sudo chown -R valmar ./Music
sudo chmod -R 755 ./Music

今では動作します。


17
問題が何であれ、音楽ファイルに実行権限を与えることは解決策であってはなりません。
ステファンChazelas

3
また、ディレクトリのオブジェクトそのディレクトリの名前を変更する機能を妨害する可能性は低いと思われます。
スコット

私はそれが奇妙だと知っていますが、それはトリックをしました ディレクトリ自体にchmodとchownを使用しても効果はありませんでした。
Timo

chmod 755Musicフォルダーの特別な「@」権限を削除した可能性はありますか?
HorusKol、2015年

@HorusKol、またはchown。OPの症状は、削除拒否 ACL を持つディレクトリと一致しますが、少なくともヨセミテでは、chownまたはchmod 755を実行しても、そのACLは削除されません。あなたはそれが必要でしょうchmod -a 'everyone deny delete' Music。El Capitanでは異なる場合があります。
ステファンChazelas

4

ここでの問題は、Musicフォルダーのアクセス制御リスト(ACL)に関係している可能性があります。ACLは、通常でリストされる通常のPOSIXのものとは別の権限システムls -lです。ホームフォルダーおよび他の場所にある他のいくつかのディレクトリにもACLがあります。

ホームディレクトリ内のACLを表示するには、次を使用します。

/bin/ls -le ~

0: group:everyone deny deleteMusicディレクトリのようなルールが表示されるはずです。お気づきのように、で問題を上書きできますsudo。それをしたくない場合(またはできない場合)、ファイルの所有者であれば、他のオプションがあります。インデックス(上記の例では0)に基づいて、MusicディレクトリのACLから問題のエントリを削除できます。

/bin/chmod -a# 0 Music

または、ACLのすべてのエントリを削除できます。

/bin/chmod -N Music

これで、ディレクトリを移動できます(通常のPOSIX権限が必要です)。移動後にACLを元に戻す場合は、次を使用できます。

/bin/chmod +a "group:everyone deny delete" Music_tmp

/bin/ls -leもう一度使用して、ACLが希望どおりであることを確認します。詳細については、のACLの例man chmodをご覧ください。特に、このイントロは役に立ちます:

各ファイルには1つのACLがあり、エントリの順序付きリストが含まれています。各エントリはユーザーまたはグループを参照し、一連の権限を付与または拒否します。ユーザーとグループが同じ名前で存在する場合、名前のタイプを指定するために、ユーザー/グループ名の前に「user:」または「group:」を付けることができます。

ACLの順序

manページは順序付けに関する規則を説明しているとは思わないが、このページはACLの順序規則を明確に説明している。特に、明示的denyルールは明示的ルールの前に適用されallowます。したがって、group:everyone deny deleteエントリが配置されている限り、allowルールを使用して削除する権限をユーザーに与えることはできません。これは、everyoneあなたを含むグループへのアクセスが拒否され、そのルールが最初に適用されるためです。


2
なぜこれが反対票だったのかはわかりません。everyone deny deletemacOSのデフォルトのホームディレクトリのACLエントリは、ディレクトリを移動または削除できない実際の理由です。(また、OSがいつでも再作成する可能性があることに注意してください。)
Diti

1
この答えは揺れた!!! なんてこった、これらの新しいACLは巨大なピタです。
ディーンヒラー

3

削除しようとしたディレクトリで一連のプログラムが実行されていると、この問題が発生しました。ディレクトリを移動するには、まずそのディレクトリから実行中のすべてのプログラムを強制終了する必要がありました。

次のコマンドでは、プログラムの名前の選択方法に十分注意してください。参考のために、次のコマンドを使用しました。

ps aux | grep -i [NAME_OF_ANNOYING_PROGRAM] | grep -v grep
# make sure that you are only about to kill the programs you want to kill

ps aux | grep -i [NAME_OF_ANNOYING_PROGRAM] | grep -v grep | awk '{print $2}' | sudo xargs kill -9
sudo mv /usr/local/[DIR_FOR_ANNOYING_PROGRAM] /usr/local/[DIR_FOR_ANNOYING_PROGRAM]2

一般的な手順は次のとおりです。

  1. 問題のディレクトリから実行中のすべてのプログラムを殺す
  2. ディレクトリの名前を変更しようとする
  3. それが失敗した場合は、ディレクトリからすべてのプログラムを強制終了します(十分な注意kill -9必要)。
  4. ディレクトリの名前を変更しようとする
  5. それが失敗した場合、プログラムが再度実行されているかどうか、つまり、別のディレクトリから実行されているデーモンプログラムによって再起動されているかどうかを確認します。
  6. 迷惑なプログラムを再起動するデーモンプログラムを強制終了します
  7. 迷惑なプログラムを強制終了する
  8. ディレクトリの名前を変更
  9. 利益

1
OPが〜/ Musicディレクトリから実行されているプログラムを持っている可能性は低いと思います。とにかく彼はsudoを使いたくないと言ったが、この答えはそうだ。
スピンアップ

私が言っているのは、私がそのような状況にあったことだけです。OPには役立ちませんでしたが、誰かに役立つ場合があります。
WattsInABox

それは確かに誰かにとって役立つかもしれません-それが私が反対投票しなかった理由です。しかし、StackExchangeの意図は、投稿された回答が実際に尋ねられた質問に答えることであると思います。
スピンアップ

1
この回答が初心者にとって一般的に役立つ意味である場合、もう1つの潜在的な問題:最初に非常に慎重に検索語句を選択して確認することについて警告を提供しませんgrep。最初に何を入れよgrepうとも、実行中のすべてのプログラムのプールから選択し、killそれをルート特権で...
スピンアップ

1
ニース、@ワッツ、それは大きな改善だと思う
スピンアップ

0

これは、内部のファイルの1つが書き込み保護されている場合にも発生する可能性があります。今日、access.logApacheに対して書き込み保護されていたエッジケースがありましたが、Apacheはすでに停止されていました。このファイルを削除したので、さらに親ディレクトリを移動することができました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.