• ベストアンサー

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

ブラウザからコマンド実行しようとするとエラーになります。 シンボリックリンクは関係ないかもしれません。 ・下記で何かおかしいことはあるでしょうか? ・「本体ファイル」と「シンボリックリンク」の「所有者」が異なっているのはマズいでしょうか? ・「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

  • re97
  • お礼率80% (601/744)

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

  • ベストアンサー
回答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

  • シンボリックリンクを貼る=PATHを通す?

    リンク先で、ビルドした後、該当ディレクトリにPATHを通している(と思う)のですが、 どうしてこれでPATHが通るのでしょうか? ・シンボリックリンクって、ショートカットぐらいの認識しかないのですが、PATHが通っているディレクトリにシンボリックリンクを貼ると、PATHが通ることになるのでしょうか? ・$ export PATHと何が違うのでしょうか? ・同じ? >PATHの通ったディレクトリにphantomjsへのリンクを作成します。 >$ sudo ln -s ~/phantomjs/bin/phantomjs /usr/local/bin/phantomjs http://www.atmarkit.co.jp/ait/articles/1210/10/news012.html

  • シンボリックリンクの貼り方

    CentOSでPXEサーバーを立てて、WinPEを組み込む作業をしております。参考サイトで、PXEクライアント(=WinPEを起動するPC)からTFTPでリクエストされるパス名やファイル名と異なるのでCentOS側でシンボリックリンクを貼るように説明がありました。 実際に行ったコマンドは以下のとおりです。 ln -s winpe/x86/boot/bcd \Boot\BCD 実際にシンボリックリンクがうまく作成されているかls -l コマンドで見ると下記のとおりです。 BootBCD -> winpe/x86/boot/bcd 参考サイトの説明では \Boot\BCD -> winpe/x86/boot/bcd となっています。 BootBCD -> winpe/x86/boot/bcd の状態でクライアントPCからネットワークブートさせるとFile: \Boot\BCD が読み込みできないとエラーが出ました。シンボリックリンクの貼り方がまずかったのかと思うのですが、どうすればよいでしょうか。 下記内容は参考サイトの例です。 pxeserver ~]# ls -l /tftpboot/ total 100 lrwxrwxrwx 1 root root 18 2008-06-17 11:17 \Boot\BCD -> winpe/x86/boot/bcd lrwxrwxrwx 1 root root 23 2008-06-17 11:17 \boot\boot.sdi -> winpe/x86/boot/boot.sdi lrwxrwxrwx 1 root root 35 2008-06-17 11:21 \Boot\en-US\bootmgr.EXE.MUI -> winpe/x86/pxe/en-US/bootmgr.exe.mui lrwxrwxrwx 1 root root 33 2008-06-17 11:18 \Boot\Fonts\jpn_boot.ttf -> winpe/x86/boot/fonts/jpn_boot.ttf lrwxrwxrwx 1 root root 34 2008-06-17 11:18 \Boot\Fonts\wgl4_boot.ttf -> winpe/x86/boot/fonts/wgl4_boot.ttf lrwxrwxrwx 1 root root 35 2008-06-17 11:20 \Boot\ja-JP\bootmgr.EXE.MUI -> winpe/x86/pxe/ja-JP/bootmgr.exe.mui lrwxrwxrwx 1 root root 25 2008-06-17 11:21 bootmgr.exe -> winpe/x86/pxe/bootmgr.exe lrwxrwxrwx 1 root root 19 2008-06-17 11:22 \sources\boot.wim -> winpe/x86/winpe.wim drwxr-xr-x 3 root root 4096 2008-06-17 11:15 winpe

  • 複数ファイルのシンボリックリンク

    例えば、「/usr/local/hogehoge/bin/」 の中にある実行ファイル全てへのシンボリックリンクを「/usr/local/bin」の中に生成したいとき、何かいい方法はないでしょうか。 「/usr/local/bin」には他にもファイルが入っているので、これ自体はディレクトリのままでお願いします。 イメージとしては、 $ cd /usr/local/bin $ ln -s /usr/local/hogehoge/bin/* というようなことをやりたいです。 (できませんでしたが・・)

  • Linux  CentOS shellスクリプト内でユーザーをスイッチする方法教えて下さい。

    困っています。ご存知の方教えて下さい。 一般ユーザーでshellスクリプトを実行して、root権限にスイッチして、root権限のみに許されたコマンドを実行してから、 一般ユーザーに戻る方法がわかりません。 ターミナルで sudo su コマンドを実行すると、対話式でパスワードを入力できますが、スクリプト内で対話式のパスワードを入力してrootに ユーザーをスイッチする方法がわかりません。 ------------ !#/bin/sh mkdir /home/user1/tmp ←一般ユーザーで実行したいコマンド sudo su ←ここでパスーワード入力して rootに権限スイッチ mkdir /var/log/aaa   ←root権限で実行したいコマンド su user1 touch /home/user1/bbb ← 一般ユーザーに戻ってコマンド実行 ------------ 環境:CentOS5 お願いします。

  • lnコマンドについて(シンボリックリンクの変更)

    lnコマンドについて、 シンボリックリンクのリンク先を変更しようと思いましたが、変更がうまく出来ませんでした。 実行したコマンド:ln -s logs /export/home/log/s001/logs (現状 )/var/log/s001/logs ↓ (変更先)/export/home/log/s001/logs 何が原因でしょうか? またエラーが発生しなかったのですが、どこかおかしく設定変更されてしまっている可能性はありますか? よろしくお願いいたします。 # ls -l lrwxrwxrwx 1 root other 27 4月 5日 2005年 logs -> /var/log/s001/logs # # # ln -s logs /export/home/log/s001/logs # # # ls -l lrwxrwxrwx 1 root other 27 4月 5日 2005年 logs -> /var/log/s001/logs # #

  • LinuxのPHPのパス

    Linuxのレンタルサーバーで、PHPのパスを調べたのですが、以下のように2つ出てきました。 # whereis php php: /usr/local/bin/php /usr/local/php /usr/local/bin/phpは /usr/local/php5/bin/php-cli-5.2.9につながっていました。 /usr/local/phpの中身はこんなかんじでした。 drwxr-xr-x 2 root root 4096 Jul 2 16:29 bin drwxr-xr-x 2 root root 4096 Jun 25 12:13 etc drwxr-xr-x 3 root root 4096 Mar 17 10:28 include drwxr-xr-x 3 root root 4096 Jul 2 16:34 lib drwxr-xr-x 3 root root 4096 Mar 17 10:29 man drwxr-xr-x 3 root root 4096 Nov 15 2007 php PHPのパスはどちらですか?

    • ベストアンサー
    • PHP
  • postfix インストール時のエラー

    Sol10にpostfixをインストールしようとしています。 makeも終わって、make installしようとすると、 > Killed > /usr/local/etc/postfix/post-install: Error: no /usr/local/sbin/postconf command found. というエラーが出ます。 /usr/local/sbinにpostconfってのがないってことだな、と思ってみてみると、 > root# ls -l /usr/local/sbin > 合計 9248 > -rwxr-xr-x 1 root root 501908 6月 24日 23:07 postalias > -rwxr-xr-x 1 root root 339932 6月 24日 23:07 postcat > -rwxr-xr-x 1 root root 573064 6月 24日 23:07 postconf > -rwxr-sr-x 1 root postdrop 539416 6月 24日 23:07 postdrop > -rwxr-xr-x 1 root root 303108 6月 24日 23:07 postfix > -rwxr-xr-x 1 root root 337452 6月 24日 23:07 postkick > -rwxr-xr-x 1 root root 330140 6月 24日 23:07 postlock > -rwxr-xr-x 1 root root 307524 6月 24日 23:07 postlog > -rwxr-xr-x 1 root root 473420 6月 24日 23:07 postmap > -rwxr-sr-x 1 root postdrop 534724 6月 24日 23:07 postqueue > -rwxr-xr-x 1 root root 355132 6月 24日 23:07 postsuper 問題なくあるようです。 何が原因でしょうか。 以下参考です。パスと、作成したユーザとグループです。 > root# echo $PATH > /usr/sbin:/usr/bin:/usr/sfw/bin:/usr/ccs/bin:/usr/local/sbin > root# more /etc/passwd > (中略) > postfix:x:101:100::/home/postfix:/bin/sh > root# more /etc/group > (中略) > postfix::100: > postdrop::101: よろしくお願いいたします。

  • sudoでシェルスクリプトを実行させたい

    /usr/bin/sudo を使って、xxx.shを実行させたいので、設定でxxx.shを許可しました。 その後Apacheで動くCGI(perlスクリプト)から、``を使って実行させようと考えています。 このときにこのxxx.shがうまく動きません。多分シェルにアクセスできないのだと思いますが、どうしたらこのスクリプトをroot権限で動かす事ができるようになるのでしょうか。関係あるかどうかわかりませんが、xxx.shの中身はディレクトリ作成コマンドなどです。ネットで検索したら、シェルスクリプトだけ許可にすればよいとあったのですが・・。セキュリティ的には/bin/shを許可するのはまずそうな気がするのですが、こちらを許可してもよいものでしょうか。 環境等 xxx.sh 755 所有者(user1) Apache実行ユーザ (apache) CGIの実行ユーザ(apache?) 挑戦したコマンド(とアパッチのログ) `/usr/bin/sudo sh ./xxx.sh`; ->パスワード求められます (/bin/shの権限がない?) `/usr/bin/sudo ./xxx.sh`; ->/usr/bin/sudo: unable to exec ファイルのパス No such file or directory (xxx.shのファイルの場所はあってます) `/usr/bin/sudo フルパス/xxx.sh`; ->/usr/bin/sudo: unable to exec ファイルのパス No such file or directory (xxx.shのファイルの場所はあってます) 不足の点などあればご指摘ください。

  • qmail Part2

    /var/qmail/rc の中身を ./Maildir に変更しました。 #/var/qmail/bin/maildirmake /etc/skel/Maildir を実行して #useradd user00 を作成し中身を確認すると /home/user00/Maildir /home/user00/.qmail は正常に作成されておりました。 #/var/qmail/rc & を実行すると 「1」 685 #PATH=/var/qmail/bin:/bin:/sbin:/usr/bin:/var/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin/X11:/usr/X11R6/bin と出ます。(これって動いていないんですよね?) BINDは動作している様子です。

  • vine linux に vncserver をインストールし、windowsからリモートコントロールしたいのですが

    VNCについての質問です。 realVNC(vnc-4_1_2-x86_linux) をvinelinux 4.1にインストールし、windows vistaからリモートコントロールしようとしています。 ================下記のコマンドで、インストールしました。=================== [root@localhost vnc-4_1_2-x86_linux]# ./vncinstall /usr/local/bin Can't install manual pages to /usr/local/man/man1 Copying Xvnc to /usr/local/bin Copying vncviewer to /usr/local/bin Copying vncpasswd to /usr/local/bin Copying vncconfig to /usr/local/bin Copying vncserver to /usr/local/bin Copying x0vncserver to /usr/local/bin ================起動を行います。=========================================== [root@localhost vnc-4_1_2-x86_linux]# vncserver You will require a password to access your desktops. ================パスワードを設定=========================================== Password: Verify: New ' (root)' desktop is localhost.localdomain:1 Creating default startup script /root/.vnc/xstartup Starting applications specified in /root/.vnc/xstartup Log file is /root/.vnc/localhost.localdomain:1.log このようになり、正常に起動したと思っているのですが、いざwindowsからVNC Viewer 4 で起動しようとすると、 下記のエラーになってしまいます。 ucable to connect to host: Connection timed out (10060) サーバのポートも開いていて、hosts.allowにもクライアントのIPアドレスを記入しましたが、 同様です。 ブラウザからのアクセスもできませんでした。 初心者なので、情報不足などあるかもしれませんが、どなたか原因や解決方法などご教授いただけませんでしょうか?