これがここにあるのか、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
答えは信じられないほど馬鹿げていて単純だと思いますが、私の理解では、シンボリックリンクは基になるファイルからアクセス許可を継承していました。
ls
は、ディレクトリエントリのみを一覧表示するため、ファイルのアクセス許可を気にしません。ただし、ls
がシンボリックリンクを逆参照する場合、リンクのコンテンツにアクセスしています。したがって、リンクのアクセス許可は考慮されます。ここでは、dba
グループに属していない限り、libodm10.dylib
のターゲットが何であるかを読み取る権限がありません。
シンボリックリンクの権限も変更する必要があります。ここでは、リンクを誰でも読めるようにしない理由はありません。
一部のユニスは、シンボリックリンクのアクセス許可を単にサポートしていないことに注意してください。 OSXはそうします。
ファイルの親ディレクトリの実行ビットがユーザーまたはグループに対してオンになっていない場合、そのディレクトリを「検索」することはできません。