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

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

職務権限基準表を英語でなんというのでしょうか。

Aベストアンサー

tabuk1さん、こんにちは!

私の会社では Authoritiesと言っていますね。
それが表になっているのなら、
Table of authoritiesとか、
Authorities chartで良いのではないかと思いますが。

Qlprコマンド(印刷)を実行すると、lprコマンド実行ログを取るように

lprコマンド(印刷)を実行すると、lprコマンド実行ログを取るようにしたい。

osはCentOSです。このCentOS上からlprコマンドを実行すると
指定されたプリンタから印刷されます。ログも取りたいと思い、
CentOS上にて、/etc/syslog.confに、
lpr.* /var/log/lpr.log
を追記し、syslogを再起動させました。しかし、
プリンタからlprコマンドで印刷をしてもログは記録されません。
利用できるファシリティにlprはあるはずなのですが・・・。

プリンタの実行ログを作成するには何か足りない設定があるのでしょうか?

Aベストアンサー

CUPSの設定ファイル /etc/cupsd.conf に LogLevel の設定があります。
そのLogLevelの設定を LogLevel info に書き換えて、CUPSのサービスを再起動して下さい。

Q管理者権限を英語で(IT英語)

管理者権限がありません。と英語で表現するにはどういうのが適切でしょうか?

また、IT関連用語の英語を学べるサイトなど教えて頂けないでしょうか?ぜひお願いいたします。

Aベストアンサー

administrative rightも一候補ですね。
http://vine-linux.ddo.jp/windows/domainremove.php

IT用語集 で検索すれば一杯ヒットします。
英/英サイトも参考にして下さい。
http://whatis.techtarget.com/

メーカーやベンダーのサイトにも用語集があります。

参考URL:http://yougo.ascii24.com/

Qcrontabでtarを実行した際、エラーではないものは出力されずに実行できるコマンドを教えてください

crontabでシェルスクリプトを立ち上げて自動バックアップをさせているのですが、crontabのレポートメールに
tar: Removing leading `/' from member names
と出ます。
実行内容は
tar zcvf /home/__ArchiveFolder/backup_`date +%Y%m%d`.tar.gz /home/public_html
なのですが、サイレントモードで実行というのでしょうか、このメッセージのメールを送られてこないように出来るのでしょうか?

言い換えますと、path名の頭に / があると、展開時に面倒が起こるから、/を取り除いてくれていいのですが、いちいちレポートしなくてもいいので、quietモード(manにはありませんでした)のようにするにはどうしたら良いのでしょうか?

Aベストアンサー

こんにちは。

>tar: Removing leading `/' from member names

このメッセージは、tarの標準エラー出力(2)なので、リダイレクトで取り除くことができます。


● 標準出力が、/dev/null に捨てられる。

$ tar zcvf /tmp/xxx.tar.gz /home/hoge > /dev/null
tar: Removing leading `/' from member names


● 標準エラー出力(2)が、/dev/null に捨てられる。

$ tar zcvf /tmp/xxx.tar.gz /home/hoge 2> /dev/null
/home/hoge/
/home/hoge/.bashrc
/home/hoge/.bash_profile


● crontab で指定してみる。

$ crontab -l
42 * * * * tar zcvf /tmp/xxx.tar.gz /home/hoge 2> /dev/null


● 標準エラー出力の行がメールで送られない。

Message 56:
From hoge@localhost Sat Nov 18 12:42:02 2006
X-Original-To: hoge
From: root@localhost (Cron Daemon)
To: hoge@localhost
Subject: Cron <hoge@ns> tar zcvf /tmp/xxx.tar.gz /home/hoge 2> /dev/null
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/hoge>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=hoge>
Date: Sat, 18 Nov 2006 12:42:02 +0900 (JST)

/home/hoge/
/home/hoge/.bashrc
/home/hoge/.bash_profile
/home/hoge/.bash_history
/home/hoge/.ssh/
..


参考にしてください。

こんにちは。

>tar: Removing leading `/' from member names

このメッセージは、tarの標準エラー出力(2)なので、リダイレクトで取り除くことができます。


● 標準出力が、/dev/null に捨てられる。

$ tar zcvf /tmp/xxx.tar.gz /home/hoge > /dev/null
tar: Removing leading `/' from member names


● 標準エラー出力(2)が、/dev/null に捨てられる。

$ tar zcvf /tmp/xxx.tar.gz /home/hoge 2> /dev/null
/home/hoge/
/home/hoge/.bashrc
/home/hoge/.bash_profile


● crontab...続きを読む

Q管理者権限を英語で

管理者権限がありません。と英語で表現するにはどういうのが適切でしょうか?

また、IT関連用語の英語を学べるサイトなど教えて頂けないでしょうか?ぜひお願いいたします。

Aベストアンサー

You have no privilege of the administrator.

「あなたはシステム管理者の特権を有しない」

こんな感じではどうでしょうか?

Qシンボリックリンクでリンク先にcdしたい

cd
ln -s ./dir1/dir2/dir3 .
とするとdir3へのシンボリックリンクができます。(~/dir3)
しかし、
cd ~/dir3
cd ..
とすると、~/dir1/dir2 ではなくて、home ( ~ ) にcdしてしまいます。
cd ~/dir3 により ~/dir1/dir2/dir3 にcd することはできないのでしょうか?
Linux はRedHatです。以前使っていたUnixではこのようなことができたと思いますが、Linuxでうまくいかないので困っています。

Aベストアンサー

ANo1.です。ごめんなさい。逆です。
質問文に書かれた linuxの動作が、シンボリックリンクの素直な性質ではなく、シェルの機能で便利にしてあるのです。質問者様には、便利なはずの機能が逆に不便になってしまっているようですが。

その機能を抑制するには、次のいずれかです。
1. cd -P .. というように、cdコマンドにPオプションをつける。
2. bash起動時に -Pオプションをつける
3. .profileなどに set -P と書いておく。

Q「業務分掌規程」、「職務権限規程」にあたる英語は?

上記規程を英文で作成したいと考えています。
それぞれに対応する英語訳は何になるのでしょうか。
また、それぞれの事例を集めた英文サイトあるいは書籍の
情報がありましたら、教えてください。
よろしくお願いします。

Aベストアンサー

翻訳者です。

「業務分掌規程」:Policies of Dividing Duties
「職務権限規程」:Policies of Administrative Authority

でどうでしょう? 
「規程」(多くの条項で構成される)は、ほとんどの場合
"Rules and Regulations "と訳すことが多いようです。
が、
内容が限定的で条項が少ない場合は、一般的に「規程」ではなく
「規定」と書きますよね?
「業務分掌について」「職務権限について」とかなり内容が絞られて
いるようなので、これらは「規定」="policy"に近いと思います。

サイトや書籍については、すみませんが即答しかねます。

Qシェルスクリプト中でシンボリックリンクのリンク先を比較したい

シェルスクリプト中で2つのシンボリックリンクのリンク先を確実に比較する方法を考えています。
当初ls -lの出力を比較してやろうと思ったのですが、リンク先の情報はls -lの最後のカラムにあるため、
万一ユーザー名やファイル名に空白が混じっていた場合、リンク先ではない他の情報を比較してしまうのです。
そこで、リンク先を確認する専用のコマンドがシェルに用意されているかも知れないと思い、質問に参りました。
もしくはls -lでなく、もっと確実にリンク先情報を確認するための方法を編み出した方は教えてください。

Aベストアンサー

Red Hat Linux 8.0(2002年10月)が出たときには、GNU coreutils(2003年4月)はまだ存在していません。
この頃、fileutils, shellutils, textutilsというのがありましたが、その後一つとなってcoreutilsになっています。
ls、cp、mv等のファイル操作に関するコマンドは、fileutilsに入っていますが、この中にreadlinkは含まれていません。


で、readlinkが含まれるパッケージをRPM Searchで検索したらtetexというTeXのパッケージに含まれているようです。

○RPM Search
 http://rpm.pbone.net/index.php3/stat/4/idpl/2406513/com/tetex-1.0.7-57.i386.rpm.html

Q翻訳(日本語→英語)お願いいたします。

あるソフトウェアをインストールしました。
その結果をメーカーに英語で回答する必要があるのですが、
英語がまったくダメなため翻訳をお願いできればと思います。

--------------------------------
1)Administrator権限でのインストール ---> 問題なし
2)PC再起動 ---> 問題なし
3)"ソフトウェア"の起動 ---> 問題なし
4)ユーザ権限でのPC再起動 ---> 添付画像のエラー発生

エラーが表示されないようにしてください。
--------------------------------

よろしくお願いいたします。

Aベストアンサー

1. I installed the software with the administrator's permission. No problem, it worked.
2. I restarted my PC. No problem, it was successful.
3. I booted up the software. No problem. It started.
4. By right of the software user, I restarted my PC. Then the attached picture had an err.

I do not want to see the error message. How can I stop to it? Please help me.

以上でいかがでしょうか?

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

例えば、「/usr/local/hogehoge/bin/」 の中にある実行ファイル全てへのシンボリックリンクを「/usr/local/bin」の中に生成したいとき、何かいい方法はないでしょうか。

「/usr/local/bin」には他にもファイルが入っているので、これ自体はディレクトリのままでお願いします。

イメージとしては、

$ cd /usr/local/bin
$ ln -s /usr/local/hogehoge/bin/*

というようなことをやりたいです。
(できませんでしたが・・)

Aベストアンサー

>昔から気になっていたのですが、この「.」ってなんなんでしょうか?

「.」はカレントディレクトリ、つまり現在いるディレクトリを指します。
「cd /usr/local/bin」実行後だと「.」は「/usr/local/bin」という事になります。


>自分なりに思ったのですが、「.」 というのは「./」と同じですか?

同じです。
 


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

人気Q&Aランキング