/ usr / binで権限を変更した後に一部のアプリケーションが機能しなくなるのはなぜですか?

/ usr / binで権限を変更した後に一部のアプリケーションが機能しなくなるのはなぜですか?

OS Xでは、私の友人が/usr/binすべての人に書き込みアクセスを許可するためにFinderの権限を繰り返し変更しました。

これは以下のように達成される。

Finderにアクセスして、/usr/bin情報ウィンドウの下部にある権限を変更します。

Finder 変更権限

その後はもう実行できませんTerminal.app。ただし、ターミナルがなくてもディスクユーティリティを実行して修復できます。

この場合に発生するエラーは次のとおりです。

Last login: Fri Jul  4 15:39:24 on ttys001
login(27006,0x7fff78115310) malloc: *** error for object 0x7fceb3412cc0: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug

幸い、この問題に言及する質問をすぐに見つけました。ここ

私の最初の考えは、これがハードウェアの問題(おそらくハードドライブ/ RAM /などの任意の損傷)でした。

このエラーは、誤った権限とどのような関係がありますか/usr/bin

明確な違いのリストを得るために破損したシステムで作業しようとすると、次のような結果が得られました。

$ sudo -s
sudo: effective uid is not 0, is sudo installed setuid root?

結果は次のとおりですdiskutil verifyPermissions(しかし問題は解決しました)。

(あまりカーソルはここに投稿できません)

各行の形式は次のとおりです。

Permissions differ on "usr/bin/sudo"; should be -r-s--x--x ; they are -rwxr-xrwx

しかし、ファイル名、ファイルが持っている必要がある権限、現在の権限だけが残りました。

http://pastie.org/9358204

Permissions differ on "usr/bin/login"; should be -r-sr-xr-x ; they are -rwxr-xrwx

ベストアンサー1

問題は、実際にFinderが権限を変更する方法が想像できるインジケータビット以上の影響を与えることです。何らかの理由でファイルモードの最初のオクテットをクリアし、実行可能ビットを変更しないでください。その結果、いくつかの重要なプログラムがsetuid/setgidそしてsticky削除されたビットは役に立たないか誤動作します。

/usr/bin/Windowsの一部のプログラムは通常のプログラムより低いレベルでシステムと対話する必要があるため、setuidビットが必要です。たとえば、、、sudoまたははpasswd一般ユーザー権限以上の権限が必要なためnewgrplogin実行するにはパスワードが必要です。対応する setuid ビットが削除されると、その操作を実行できなくなり、早期に終了したりクラッシュしたりする可能性があります。

たとえば、正しい権限/usr/bin/login4555またはで-r-sr-xr-x、友人の仕事の後は0757またはです-rwxr-xrwx。これターミナルプログラム/usr/bin/loginユーザーをtty呼び出しに関連付けます(参照:man stty)setuidビットが欠落して失敗します。割り当てられていないポインタを解放することは、それに関連するバグかもしれません。 OS X 10.6.8ではこのポインタエラーは発生しませんが、ターミナルプログラム開始するとすぐに終了しましたが、似たようなlogin[6647]: pam_open_session(): system error項目が見つかりました/var/log/system.log

編集する。Antoine Lecailleがコメントで述べたように、Terminal.appを正しく機能させないようにする簡単な方法は$ sudo chmod -s /usr/bin/loginログイン呼び出しに依存しているため、後で新しいウィンドウを開くこともできないことに注意してください。元に戻すには、を実行します$ sudo chmod +s /usr/bin/login


以下のように、Finderが権限に与える影響をテストしました。

$ # create a directory with the same permissions as /usr/bin
$ mkdir -m 755 test
$ sudo chown root:wheel test
$ ls -l | grep test
drwxr-xr-x 2 root     wheel    68 Jul  6 15:01 test
$ # create 4096 empty files with all possible permissions
$ cd test
$ sudo touch file_{0..7}{0..7}{0..7}{0..7}
$ for perms in {0..7}{0..7}{0..7}{0..7}; do sudo chmod $perms file_$perms; done

速度が遅いため、ループをfor完了するのに1分かかることがありますchmod。その後、フォルダにfile_wxyz権限を持つファイルがあります。例えばwxyztest

$ ls -l file_4555
-r-sr-xr-x 1 root wheel 0 Jul  6 15:02 file_4555

$ open .友だちのスタントをコピーし、Finder:とCmd+を使用してフォルダとすべてのコンテンツの権限を変更し、投稿の説明に従ってI実行できます。私はグループホイールの読み取り権限とすべての人に読み取り+書き込み権限を付与することにしました。

それでは、ファイルに何が起こるのかを見てみましょう。次のパイプラインはディレクトリを一覧表示し、権限を含む列を読み取り、それらを並べ替え、重複行を抑制します。

$ ls -l | awk '{print $1}' | sort -u
-rw-r--rw-
-rw-r--rwx
-rw-r-xrw-
-rw-r-xrwx
-rwxr--rw-
-rwxr--rwx
-rwxr-xrw-
-rwxr-xrwx
total
$ ls -l file_4555
-rwxr-xrwx 1 root wheel 0 Jul  6 15:02 file_4555

ご覧のとおり、setuid/setgid/sticky ビットは設定されなくなりました。すべてのファイルは同じ読み取りおよび書き込み権限を持ち、実行ビットでのみ権限が異なります(8つの可能な組み合わせがあります)。

おすすめ記事