web-dev-qa-db-ja.com

基になるファイルに「r」がすべてに付与されている場合、シンボリックリンクでlsを実行すると、アクセスが拒否される原因は何ですか?

これがここにあるのか、superuser.comにあるのかわからない。

Oracleダイナミックライブラリにリンクする必要のあるCプロセスを機能させることに取り組んでいます。

Oracleユーザー(Oracleがインストールされたユーザー)では正常にコンパイルおよび実行されますが、別のアカウントでは実行されません。明らかな理由は、デフォルトのOracleインストールでは、/ lib内の共有ライブラリのいずれにも読み取りまたは実行が許可されないためです。

基盤となるdylib(.soなどに相当)のすべてにr + xを付与し、Oracleユーザーで実行すると次の結果が得られます。

ls -lrt *odm* 
-rwxr-xr-x  1 Oracle  dba  9000 Mar  3  2009 libodmd10.dylib
lrwxrwx---  1 Oracle  dba    15 Jul 25 14:23 libodm10.dylib -> libodmd10.dylib

他のユーザー(実行したいユーザー)でも同じことをすると、次のようになります。

ls -lrt libodmd10.dylib
-rwxr-xr-x  1 Oracle  dba  9000 Mar  3  2009 libodmd10.dylib

ls -lrt libodm10.dylib

ls: libodm10.dylib: Permission denied
lrwxrwx---  1 Oracle  dba  15 Jul 25 14:23 libodm10.dylib

答えは信じられないほど馬鹿げていて単純だと思いますが、私の理解では、シンボリックリンクは基になるファイルからアクセス許可を継承していました。

2
JulesLt

lsは、ディレクトリエントリのみを一覧表示するため、ファイルのアクセス許可を気にしません。ただし、lsがシンボリックリンクを逆参照する場合、リンクのコンテンツにアクセスしています。したがって、リンクのアクセス許可は考慮されます。ここでは、dbaグループに属していない限り、libodm10.dylibのターゲットが何であるかを読み取る権限がありません。

シンボリックリンクの権限も変更する必要があります。ここでは、リンクを誰でも読めるようにしない理由はありません。

一部のユニスは、シンボリックリンクのアクセス許可を単にサポートしていないことに注意してください。 OSXはそうします。

ファイルの親ディレクトリの実行ビットがユーザーまたはグループに対してオンになっていない場合、そのディレクトリを「検索」することはできません。