ブラウザからコマンド実行しようとするとエラーになります。
シンボリックリンクは関係ないかもしれません。

・下記で何かおかしいことはあるでしょうか?
・「本体ファイル」と「シンボリックリンク」の「所有者」が異なっているのはマズいでしょうか?
・「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

このQ&Aに関連する最新のQ&A

A 回答 (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とかに。
    • good
    • 1
この回答へのお礼

回答ありがとうございました。

>apacheというユーザーにとって、/home/userの下にあるファイルは参照も実行もできないですが
>/usr/local/bin/の下の実体ファイルは実行できる

>シンボリックリンクファイルの場合は、単にファイルの場所を転送しているだけなので
>ファイルの権限としては、そのリンク先のファイルやその親ディレクトリに依存

・説明大変分かりやすかったです。


>apacheユーザーでも参照できるディレクトリの /usr/local/xxxxとか/opt

・これからどうすればよいかも分かりました

・おかげで疑問が解決しました
・大変参考になりましたー

お礼日時:2015/01/24 21:13

ブラウザからということは、実行プロセスのオーナーは、"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とか)に実体をおいて、
それをシンボリックリンクする形にする という方法でもありかと。

この回答への補足

回答ありがとうございました

・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
・何をコピーするのでしょうか?
・コマンドで実行する対象ファイルだけ?
・それとも、ライブラリ全体?
・一旦アンインストール後、再度インストール場所をやり直すということでしょうか?

補足日時:2015/01/23 20:15
    • good
    • 0

どんなエラーになるのでしょうか。


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

この回答への補足

回答ありがとうございました

>どんなエラーになるのでしょうか
・ブラウザで確認したエラーは下記です
・Error calling PhantomJS, return code 126
・検索したら、パミッションに関する指摘があったので、その関係のエラーかと思い質問しました

>httpdのログに何らかの記録があると思いますが、そちらはどうなっていますか
・下記を確認しましたが特に気になる点はありませんでした
(注意すべき点が良く分かっていないので見落としがあるかもしれませんが…
・/var/log/secure
・/var/log/secure/messages

>httpdの設定でFollowSymLinksは付いていますか
・セキュリティを高める、と聞いて、よく分からないまま下記のように設定しています
・Options -Indexes FollowSymLinks

・今改めて確認したら、
>Web コンテンツファイル、もしくはファイルまでのパスにシンボリックリンクが含まれている場合、アクセスを拒否する
・と書いてあったのですが、何か関係あるでしょうか?

補足日時:2015/01/23 19:48
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q/usr/local/bin/rubyを実行するには

OSはFedora10を使っています。
/usr/local にRubyを展開し、以下のコマンドを入力しインストールしました。

cd /usr/local/ruby
./configure
make
make test
sudo make install

/usr/local/bin にrubyの実行ファイルがあるようなのですが、bashは /usr/bin を探索し、rubyが存在しないといいます。

/usr/local/bin/ruby が実行されるようにするにはどうすれば良いか教えて頂けないでしょうか。よろしくお願いします。

Aベストアンサー

env | grep PATH
というコマンドの結果に「/usr/local/bin」が入ってないようでしたら、実行するユーザのホームディレクトリに「.bash_profile」というファイルがありますので、そこに下記2行を追加してください。

PATH=$PATH:/usr/local/bin
export PATH

保存した後に下記のコマンドを打てば反映されます。

source ~/.bash_profile

再度最初のコマンドを打って、結果に「/usr/local/bin」が入っていることを確認します。
(でも最初から入ってないのかな?)

Q「/usr/bin/ld」の問題について質問させていただきます。

「/usr/bin/ld」の問題について質問させていただきます。

初めて質問を投稿させていただきますので、カテゴリが違うかもしれません。申し訳ありません。

問題の発端は、間違って「/usr/bin/ld」を消去したことにあります。
このため、g++でのコンパイル時(g++ -o hello hello.cpp)の結果は、
「collect2: cannot find 'ld'」というエラーが出ます。

問題解決のためにwebを調べましたが、リンカー(ld)自体を消去し、それの問題を解決したサイトが見つけることができませんでした。

動作環境は、
OS; Red Hat Enterprise Linux Server release 5.5 (Tikanga)
g++ version: g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-48)
です。

もしこの問題を回避する方法や「/usr/bin/ld」ファイルを再度入手する方法をご存知でしたら、ご教授をお願いします。

よろしくお願いします。

Aベストアンサー

「何かのパッケージ」にあると思うよ.
GNU 純正なら binutils だけど, RedHat でどのようにパッケージングされてるかは知らない.

Qテキストにabcを含むファイルを/usr/local/以下で探す

テキストにabcを含むファイルを/usr/local/以下で探し、
そのパスを列挙するLinuxコマンドを教えてください。

Aベストアンサー

「テキストファイル」のみとなると難しいのですが、「/usr/local/ 以下の
すべてのファイルから探す」ということであれば、以下のコマンドで
検索できると思います。

find /usr/local -type f | xargs grep -l 'abc'

Q/usr/local

mv でファイルを移動していた所、/usr/local/www/dataの下に、どうやら/usr/local/以下にshareというディレクトリができており、その中に/usr/local内のディレクトリやファイルが移動していました。

とりあえず、すべて/usr/localに戻して解るやつだけ移動したのですが、以下の分がどうしてもわかりません。

/usr/local
---------------------------
analog
apache2
autoconf
bin
cvsup
ddclient
dict
doc
emacs
empty
etc
examples
ezm3
gettext
include
info
java
lib
libdata
libexec
libtool13
libtool15
locale
man
misc
nls
openssl
private
sbin
sgml
share
skel
swat
www
xml
zsh
---------------------------
どのディレクトリが本来どこに無いといけないのかわかりません。
わかる方いましたら、よろしくお願いします。

mv でファイルを移動していた所、/usr/local/www/dataの下に、どうやら/usr/local/以下にshareというディレクトリができており、その中に/usr/local内のディレクトリやファイルが移動していました。

とりあえず、すべて/usr/localに戻して解るやつだけ移動したのですが、以下の分がどうしてもわかりません。

/usr/local
---------------------------
analog
apache2
autoconf
bin
cvsup
ddclient
dict
doc
emacs
empty
etc
examples
ezm3
gettext
include
info
java
lib
libdata
libex...続きを読む

Aベストアンサー

私のBSDのサンプルです・・・参考になれば(^^;)
サーバを立て直す方がいいと思いますけれど

$ ls /usr/local/
bin include lib libexec openssl sbin var
etc info libdata man sav share www

$ ls /usr/local/share/
aclocal courier-imap ezm3 libtool15 nmap spamassassin
aclocal15 cvsup fonts locale openldap t1lib
autoconf213 dict gettext misc pdflib vim
autoconf253 doc groff mysql ri xml
automake15 emacs java netpbm sgml zsh
bison examples libtool13 nls skel

私のBSDのサンプルです・・・参考になれば(^^;)
サーバを立て直す方がいいと思いますけれど

$ ls /usr/local/
bin include lib libexec openssl sbin var
etc info libdata man sav share www

$ ls /usr/local/share/
aclocal courier-imap ezm3 libtool15 nmap spamassassin
aclocal15 cvsup fonts locale openldap t1lib
autoconf213 dict gettext misc ...続きを読む

Qmanページの文字化け(PAGER /usr/bin/lv)

LINUX初心者です。manページの文字化けで困っています。

以下確認した設定です。
・「/etc/man.config」で「PAGER /usr/bin/lv」になっている。
・「rpm -qa」で「lv-4.51-3.1」がインストールされていることを確認した。
・「/etc/sysconfig/i18n」で「LANG="ja_JP.eucJP" SUPPORTED="ja_JP.eucJP=ja_JP=ja"になっていることを確認した。
・「/etc/profile」で「MANPAGER=lv」になっていることを確認した。

konは利用できますが、konからではなくmanページを直接文字化けなしで
開きたいと思っています。

よろしくご指導をお願いします。

Aベストアンサー

通常のテキストコンソールでは
日本語フォントを持っていないので、
日本語表示はできません。
(vga textモード)

従って、
・日本語フォントを自前で持ち
・日本語の文字コードを理解し、
・vga graphicsモード(cf. vesa)で日本語フォントを図形描画してくれる
kon,jfbterm 等の仮想コンソールプログラムが必要になります。

その他、Linuxカーネル自身にパッチを当てて、
jfbtermと同様の方式により
起動直後から日本語表示を可能をする方法もあります。
しかし、お勧めできる方法ではありません。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報