• ベストアンサー

シンボリックリンクでパミッションエラー?

ブラウザからコマンド実行しようとするとエラーになります。 シンボリックリンクは関係ないかもしれません。 ・下記で何かおかしいことはあるでしょうか? ・「本体ファイル」と「シンボリックリンク」の「所有者」が異なっているのはマズいでしょうか? ・「x」がそれぞれ3つずつ表示されているので、実行権限に問題はない、という認識で合っているでしょうか? ■/usr/local/bin lrwxrwxrwx 1 root root phantomjs -> /home/user/phantomjs/bin/phantomjs ■/home/user/phantomjs/bin -rwxrwxr-x 1 user user phantomjs

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

> ・/home/userのパーミッションは、ご指摘の通りでした > ・drwx------ 20 user user なるほど。これではapacheというユーザーには シンボリックリンクファイルが指し示している 実体ファイルを実行することは出来ませんね。 >シンボリックリンクするのではなく、/usr/local/bin/にコピーしてしまったほうが簡単 疑問1 >・なぜコピーすると、問題が解決するのでしょうか? apacheというユーザーにとって、/home/userの下にあるファイルは参照も実行もできないですが /usr/local/bin/の下の実体ファイルは実行できるからです。 いまでも、/usr/local/bin/phantomjs にあるのだから実行できるはずと 思ってしまうかもしれませんが シンボリックリンクファイルの場合は、単にファイルの場所を転送しているだけなので ファイルの権限としては、そのリンク先のファイルやその親ディレクトリに依存します。 >・実行プロセスのオーナーは、"root"ではなく同じくapacheなので、状況は改善しないと思うのですが… >・/usr/local/bin/のパミッション >・drwxr-xr-x. 2 root root いえいえ。 上記のrwxr-x-rxのパーミッションの意味は、 root本人には rwx rootグループには、r-x それ以外には、r-x です。 apacheにとっては、ファイルを書き込む権限はないですが、 読み込む権限と、ディレクトリ下に移動できる権限はあります。 > >疑問2 >・何をコピーするのでしょうか? > ・コマンドで実行する対象ファイルだけ? >・それとも、ライブラリ全体? 基本的には、.実行したいファイルです。つまり /usr/local/bin/phantomjsとなります。 ただし、実行するコマンドが、ライブラリやconfigファイルなど、 別のファイルも読み込むということもありえます。 その場合は、そのファイルも、apacheが参照できるディレクトリにコピーして コマンド中のパス設定なり環境設定なりも変更しないけません。 (そのプログラムの仕様次第なので、どうするのがよいかは一概には言えません) もし、そのプログラムが 任意のディレクトリにまずは、インストールして /usr/local/bin/にシンボリックリンクを設置することを  標準インストール方法として推奨しているのであれば インストールするディレクトリを /usr/local/xxxあたりに変更してしまったほうが 手っ取り早いでしょう。 >・一旦アンインストール後、再度インストール場所をやり直すということでしょうか? そのほうがよいでしょうね。 /home/user下では、他のユーザーには実行さえできないので、 apacheユーザーでも参照できるディレクトリの /usr/local/xxxxとか/optとかに。

re97
質問者

お礼

回答ありがとうございました。 >apacheというユーザーにとって、/home/userの下にあるファイルは参照も実行もできないですが >/usr/local/bin/の下の実体ファイルは実行できる >シンボリックリンクファイルの場合は、単にファイルの場所を転送しているだけなので >ファイルの権限としては、そのリンク先のファイルやその親ディレクトリに依存 ・説明大変分かりやすかったです。 >apacheユーザーでも参照できるディレクトリの /usr/local/xxxxとか/opt ・これからどうすればよいかも分かりました ・おかげで疑問が解決しました ・大変参考になりましたー

その他の回答 (2)

回答No.2

ブラウザからということは、実行プロセスのオーナーは、"user"ではなく Webサーバーを実行しているプロセスのオーナー (apache等)なので /home/user/phantomjs/bin に実行特権があり、これのシンボリックリンクを実行しているとしても /home /home/user /home/user/phantomjs /home/user/phantomjs/bin の各親ディレクトリのパーミッションとして、 apache等のユーザーがディレクトリ内に潜れる特権が必要です。 多分、/home/userのパーミッションが drwxr-x---(750) とか drwx------(700)に なっていて、apache等のotherユーザーからは ディレクトリに潜れない設定に なっているのではないでしょうか? この場合ですと、 /home/userのパーミッションを変更するというのは セキュリティー的に避けたほうがよいでしょうし、 わざわざこのために sudo等で 実行するユーザーを切り替えるというのも大げさなので シンボリックリンクするのではなく、 /usr/local/bin/にコピーしてしまったほうが簡単ではと。 もし、修正するたびにコピーする手間とミスが、気になるようならば /home/user以外のotherユーザーが参照できる場所(例えば /usr/local/xxxxとか)に実体をおいて、 それをシンボリックリンクする形にする という方法でもありかと。

re97
質問者

補足

回答ありがとうございました ・apache実行権限を/home/userに付与したいけど、セキュリティーの観点から避けたい ・ここまでは分かるのですが、それ以降の内容が難しくて対策部分が理解できなかったので追加で教えてください ・/home/userのパーミッションは、ご指摘の通りでした ・drwx------ 20 user user >シンボリックリンクするのではなく、/usr/local/bin/にコピーしてしまったほうが簡単 疑問1 ・なぜコピーすると、問題が解決するのでしょうか? ・実行プロセスのオーナーは、"root"ではなく同じくapacheなので、状況は改善しないと思うのですが… ・/usr/local/bin/のパミッション ・drwxr-xr-x. 2 root root 疑問2 ・何をコピーするのでしょうか? ・コマンドで実行する対象ファイルだけ? ・それとも、ライブラリ全体? ・一旦アンインストール後、再度インストール場所をやり直すということでしょうか?

回答No.1

どんなエラーになるのでしょうか。 ブラウザからということはhttpdのログに何らかの記録があると思いますが、そちらはどうなっていますか。 httpdの設定でFollowSymLinksは付いていますか。

re97
質問者

補足

回答ありがとうございました >どんなエラーになるのでしょうか ・ブラウザで確認したエラーは下記です ・Error calling PhantomJS, return code 126 ・検索したら、パミッションに関する指摘があったので、その関係のエラーかと思い質問しました >httpdのログに何らかの記録があると思いますが、そちらはどうなっていますか ・下記を確認しましたが特に気になる点はありませんでした (注意すべき点が良く分かっていないので見落としがあるかもしれませんが… ・/var/log/secure ・/var/log/secure/messages >httpdの設定でFollowSymLinksは付いていますか ・セキュリティを高める、と聞いて、よく分からないまま下記のように設定しています ・Options -Indexes FollowSymLinks ・今改めて確認したら、 >Web コンテンツファイル、もしくはファイルまでのパスにシンボリックリンクが含まれている場合、アクセスを拒否する ・と書いてあったのですが、何か関係あるでしょうか?

関連するQ&A