/ usr / localの所有権がmy-usernameからrootに変更される原因を突き止める方法


13

homebrew特定のWeb開発アプリのパッケージマネージャーとして使用します。brew最新の状態を維持するためにupdate brew、数日ごとに実行し、を実行しbrew doctorます。通常、これは大丈夫でありbrew、醸造する準備ができていることを教えてくれます。

ただし、ときどき、次のエラーが表示されます。

警告:/ usr / local / etcは書き込み可能ではありません。

これは、Homebrewによって管理されていないソフトウェアを「sudo make install」する場合に発生する可能性があります。数式がこのディレクトリにファイルを書き込もうとすると、リンク手順中にインストールが失敗します。

おそらくchown/ usr / local / etc

警告:/ usr / localディレクトリは書き込み可能ではありません。Homebrewのインストール時にこのディレクトリが書き込み可能であったとしても、他のソフトウェアがこのディレクトリの権限を変更する場合があります。Airfoilの「InstantOn」コンポーネントの一部のバージョンは、これを行うことが知られています。

/ usr / localの所有権とアクセス権をユーザーアカウントに戻す必要があります。

権限をリセットしてユーザー名に戻すのは簡単です。その後brewは問題ないようです。

しかし、これは何が起こっているのですか?

アクセス許可の変更の原因を示すログはありますか?


3
ログはありませんが、/ usr / localがroodによって所有されていることはUnixの標準であるため、そこにビルドすると期待されます。解決策は、ディレクトリをパッケージマネージャー(Homebrew)と標準のUnixコンパイルの両方と混在させないことです
-user151019

3
パッケージマネージャーが使用するのと同じ場所にソフトウェアを追加することはお勧めできません/usr/local。しかし、あなたが主張するなら、自分でインストールするパッケージにmake install使用せずにできsudoます。
fd0

1
OS Xをアップグレードすると、通常、/ usr / localの所有権と権限がリセットされます。
mspasov

1
@その他ah私は質問ではなく、Homebrewからの引用を読みました
-user151019

1
デフォルトでインストールするように設定されたMacに(手動または他のパッケージマネージャーを介して)他に/usr/local何をインストールしましたか?
ダン

回答:


13

私はこれとまったく同じ問題を抱えていましたが、ソフォスの自動更新のせいでした。私はこれを実行することで理解しました:sudo fs_usage | grep "usr/local"

しばらく時間がかかりましたが、最終的にはソフォスの「Installation」デーモンという名前が/ usr / localの許可をいじっていることに気付きました。

私はまだ、この動作に対する適切な回避策を見つけようとしています。

編集:ソフォスはこの問題を修正したと思います。この回答のコメントのリンクをご覧ください。少なくとも私には修正されているようです!


4
ここに議論があります:community.sophos.com/products/free-antivirus-tools-for-desktops/…これは2015
JoeZuntz

@JoeZuntz素敵な発見!彼らが実際に修正を進めているのは素晴らしい。
その他

この情報を@othersに感謝します。10.11.1にアップグレードした後、すべてを修正してhomebrewを再び動作させることができましたが、多くの場合、brewのアップグレードを行うたびに権限が再び変更されました。どのソフトウェアが/ usr / localのパーマを変更し続けているのか、私を悩ませていました。
ティムX

@TimXうん、ちょっと...幸いなことに、ソフォスは来週の終わり、11月20日にパッチを当てているようです。
その他

4

Filewaveが犯人であることが判明しました。Filewaveは、学校がソフトウェアの更新をプッシュするために使用するシステム管理ソフトウェアです。入力いただきありがとうございます。


2

許可泥棒を取得する方法の大まかなアイデアがあります。これは問題の解決策ではありませんが、何らかの回避策があります。

この特定のフォルダーを監視するために、AutomatorまたはHazel(フォルダーアクション)でウォッチドッグを作成するのはどうでしょうか。ただし、Scaleイメージなどの機能を追加する代わりに、いくつかのシェルコマンドを実行するシェルスクリプトを使用します。

  • フォルダーが何らかの方法で変更された場合は、アクセス許可と現在アクセスしているプロセスIDのスナップショットを作成しfuser <foldername>ます。
  • 次に、プロセステーブルでプロセスID(ps auxwwwwww | grep <process id>)を検索し、最後に
  • 収集したこれらの情報を自分宛にメールで送信します

残念ながら、私はAutomator sadhuではありませんが、Googleには、このような同様の問題に対する多くの解決策があることがわかりました。


0

Time Machineを使用している場合はBackups.backupdb、ターミナルで調べることにより、アクセス許可が変更されたおおよその時間を見つけることができます。ls -ldタイムスタンプ付きフォルダーで使用

ls -ld /Volumes/Backup/Backups.backupdb/Mac/2015-12-25-120000/Macintosh\ HD/usr/local 

所有者とグループの情報が表示されます。

変更が行われた日付を取得したら、システムで他に何が変更された可能性があるかを調べます。簡単な方法は、Finderのファイル› Last modified date基準を検索して追加することです。他の良いツールがあるfindmdfindターミナルで。


-1

これは、システムを更新する副作用です。OS Xは、おそらく/ usr / localがルート所有フォルダーにネストされているため、更新プロセス中に全面的な許可「修復」を行います。


AFAICT、エルキャピタンへのアップグレードが問題の原因でした
ジュゼッペ

-3

あなたは、使用しているDisk Utility]を選択Macintosh HDして実行Verify Disk Permissionして、Repair Disk Permission必要に応じてではなく、手動でそれをやって?

これで問題は解決しませんが、home-brewが許可を変更する時期を確認するための良い「既知の」出発点です。運が良ければ、根本的な問題が明らかになる可能性があります。

またnew update -v、より詳細な出力については、さらに、homebrew logの場所~/Library/Logs/Homebrewに従って古いログがあります。


2
Disk Utility/usr/localこのディレクトリはYosemiteの新規インストールには存在しないため、権限の確認や修復は行われません。
ダン

私は新しい仮説/usr/localを自分で作成して実行することにより、ヨセミテでこの仮説を完全にチェックしましたDU。ログ/usr/local内には何もありませんDU。そして/usr/localまだ私に属しています。
ダン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.