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

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

初歩的な質問で恐縮ですが、ご教示いただけますと幸いです。

起動しているサービスを確認するために以下の2つのコマンドを打ってみるのですが、結果(出て来るサービス名)が違います。
このコマンドの違いについてご教示いただけますでしょうか。

(1)service --status-all
(2)chkconfig --list

Aベストアンサー

(1)service --status-all

サービスの現在のステータスを調べるコマンド

(2)chkconfig --list

OSのブート時に自動起動するサービスを調べるコマンド

違いが出るのは、
・ブート後に手動あるいは他のコマンドから起動したサービス
・ブート後に手動あるいは他のコマンドから、あるいはエラーで停止したサービス
・ブート後に実行はされるがすぐに停止して常駐しないサービス (ntpdate とか)

あるいは、(1)ではサービス名が表示されない物もあるので、どのサービスがどんなステータス出力をするのか知っておく必要もありますね。(service network statusとか)

Qpingでポートの指定

pingでIPアドレスを指定して、通信できるかどうかというのは
よく使いますが、pingでポートを指定して応答するかどうかは調べられるのでしょうか?

よろしくお願いします

Aベストアンサー

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含むICMP)ではできません。

FTPの疎通確認であれば、クライアントからサーバに対するTCP/21通信(FTP-CMD)が可能であること(サーバからクライアントへのTCP/21からの応答を含む)+サーバからクライアントに対するTCP/20通信(FTP-DATA)が可能であること(クライアントからサーバへのTCP/21からの応答を含む)が必要でしょう。

監視ソフトによるものであれば、
・クライアントからサーバへのログイン(TCP/21)
・クライアントからサーバへのlsの結果(TCP/20)
で確認すればよいでしょう。

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含む...続きを読む

Qレッドハットのバージョン確認方法

自分のサーバで使用しているREDHATのバージョン確認はどうすればいいのでしょうか?

more /etc/issue
とやっても英文しか出てきませんでした。

uname -all
でもカーネルのバージョンは出るのですが、REDHATのバージョンは出ませんでした。

Aベストアンサー

> more /etc/issue
> とやっても英文しか出てきませんでした。

その英文にはRedHatのバージョンは書いてなかったのですか?
書いていなかったとしたら、管理者により編集されている可能性
がありますね。

cat /etc/redhat-release

ではいかがでしょう?
やっぱり英文ですけど。

rpm -q redhat-release

でもいいかも

Qgrepで検索文字列が完全一致した行だけ取り出す方法

grepの文字列検索で検索文字列が単語として、完全一致した行だけ取り出す方法はないでしょうか?

通常は
grep hoge hoge.txt

と打つと、hogeが含まれる行が出力されますが、今回は含まれる行ではなくて完全に文字列が一致した行だけ取り出したいのです。

例えばhoge.txtの中に
cc ghoge
kkl hogem
jjll hoge
という3行があったとしたら最後の行でhogeという文字が空白で区切られた行だけ取り出したいのです。

何かよい方法があれば教えてください

Aベストアンサー

-w オプションじゃだめですか?

参考URL:http://www.linux.or.jp/JM/html/GNU_grep/man1/grep.1.html

Qsqlplusで表示が変なので、出力を整形したい。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------

上記のように意味不明な形式で出てきます。

例えばこんな風に

select カラム1,カラム2,カラム3 from hoge;

カラム1 1の値
---------------------------
カラム2 2の値
---------------------------
カラム3 3の値

等のように分かりやすく表示できないでしょうか?

ちなみにOracle9iR2を使用しています。
sqlに関するツールは使用できないルールでして、あくまでsqlplusのコマンド上でみやすくしなければなりません。

分かりづらくですいませんが、皆さま、ご教授お願いします。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
-----------------------...続きを読む

Aベストアンサー

SQLPLUSを起動して、

SQL>set linesize 列数

でどうだ。

SQL>show linesize

で確認ができる。

Qapt-get install ****** でinstallしたものをuninstallするには?

御世話になります。
vncserverだけをinstallするつもりが
誤って
apt-get install vncとうってしまいました。
これをuninstallしたいのですが
どのようにすればよろしいでしょうか?

教えて下さい。

Aベストアンサー

# apt-get remove パッケージ名
では、設定ファイルは削除されずに残ります。

完全に削除するときは、
# apt-get --purge remove パッケージ名
です。

Qテーブルの最後(最新)のレコードを抽出したい

宜しくお願いします。
PHP MYSQL の組み合わせで使っています

以下のようにして、最後のレコードを取り出したいのですが
まったく違う事をしているのかもしれません。

$sql =" select * from テーブル where フィールド='max' " ;

フィールドはauto_incrementで番号を振っています。
これで最大のつもりなのですが・・・。

他にも、レコードを入れた時間も記録したフィールドがあるのですが
どうしてよいか?判りません。

テーブルの最新のレコードを出したいのです。
**その中の一つのフィールドを取り出すのですが、
  それはうまくいっているみたいです 
  (max の所に数字を入れると表示します)

お手数かけますが、どなたかご教授お願いいたします。

Aベストアンサー

#2回答者です。

MySQL 4.1以前(サブクエリを使えない)なら、以下のような方法が考えられます。

select * from 表名
order by 列名 desc limit 1

QNTPで同期が始まらない

こんにちは。
度々すみません、NTPの設定をしましたがどうも同期が始まりません。

「ntpdate 130.69.251.23」と手動同期は成功します。
しかしntpデーモンを起動し1時間以上放置しても同期されません。
※外部タイムサーバー参照としてます

ntp.confは下記のとおりです。
---------------------------------------------------
server 133.100.9.2 # clock.nc.fukuoka-u.ac.jp
server 130.69.251.23
driftfile /var/lib/ntp/drift
---------------------------------------------------

でntpq -pの結果は下記となります。

remote refid st t when poll reach delay offset jitter
==============================================================================
133.100.9.2 .INIT. 16 u - 64 0 0.000 0.000 4000.00
130.69.251.23 .GPS. 1 u 27 64 377 8.015 -99970. 17262.6

同期ができれば「remote」列に「*」が表示されると思っています。
何か設定が足りないでしょうか?。
尚、「/vat/log/message」をtailしてますが特にエラーは無さそうです。

よろしくお願いします。

こんにちは。
度々すみません、NTPの設定をしましたがどうも同期が始まりません。

「ntpdate 130.69.251.23」と手動同期は成功します。
しかしntpデーモンを起動し1時間以上放置しても同期されません。
※外部タイムサーバー参照としてます

ntp.confは下記のとおりです。
---------------------------------------------------
server 133.100.9.2 # clock.nc.fukuoka-u.ac.jp
server 130.69.251.23
driftfile /var/lib/ntp/drift
---------------------------------------------------

でntp...続きを読む

Aベストアンサー

#4のqaaqです。

○ntp.conf 関連
server 行に "iburst" を付けておきましょう。
server ntp.nict.jp iburst <--こんな感じになります。

ntp サーバ起動時の時刻調整の収束時間が早くなります。
http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=ntp.conf&dir=jpman-5.4.0%2Fman&sect=0

○ntpdate での時刻調整
ntpdate -b -u [サーバ名] を複数回実行して、"offset の値が0.1以下"になるまで、強制的に時刻調整して下さい。

○ハードウエアclockの修正
hwclock -w コマンドでハードウエアclockを合わせます。
http://www.linux.or.jp/JM/html/util-linux/man8/hwclock.8.html

○ntpdの動作
ntpによる時刻調整は、調整幅が通常128mSと小さいので、1時間は様子をましょう。
2時間程度経過しても、時刻修正の兆候が見られない場合ハードウェアの不良も考えられます。

時刻調整の兆候としては、
・logファイルに 一時間毎に調整したメッセージが書かれる。
Jan 7 21:57:40 ntpd[91145]: offset 0.000994 sec freq -190.802 ppm error 0.000076 poll 8
・ntpq -p の出力の最初の桁に"*,+"が付く。また、reach が377になる。
% ntpq -np
remote refid st t when poll reach delay offset jitter
+192.168.0.102 GPS_NMEA(0) 2 u 3 32 377 0.926 -0.330 0.023
*192.168.0.192 GPS_NMEA(1) 2 u 10 32 377 0.747 -0.336 0.023
192.168.0.9 PPS(1) 2 u 3 32 377 0.757 6.559 0.161


○その他
・PC起動時には、システムクロックを計測してその後の動作の基準にしていますが、
CMOSバッテリ不足やハードウェアに何らかの異常があるととんでもない時刻を示すことがあります。(要修理です)
・BIOSの時計も起動時の初期時刻として使われてしまうので、ある程度合わせておいた方がいいです。

#4のqaaqです。

○ntp.conf 関連
server 行に "iburst" を付けておきましょう。
server ntp.nict.jp iburst <--こんな感じになります。

ntp サーバ起動時の時刻調整の収束時間が早くなります。
http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=ntp.conf&dir=jpman-5.4.0%2Fman&sect=0

○ntpdate での時刻調整
ntpdate -b -u [サーバ名] を複数回実行して、"offset の値が0.1以下"になるまで、強制的に時刻調整して下さい。

○ハードウエアclockの修正
hwclock -w コマンドでハ...続きを読む

Qシンボリックリンクからの被参照を調べたい

サーバー上の要らなくなったディレクトリを削除しようと思っています。
ただ、その配下の階層のどこかに、他からシンボリックリンクで参照されているファイルやフォルダがあるかもしれません。
そういう状況の有無を手軽に調べる方法はあるのでしょうか。

Aベストアンサー

どのシンボリックリンクが参照しているか分からなくても良いなら、
こんな感じでできます。
find / -type l -exec readlink {} \; | grep -cFx <検索対象のファイル>

→参照されている数を表示します。

どのシンボリックリンクが参照しているか分かる必要があるなら、
こんな感じでできます。

find / -type l | while read LINK; do
readlink "$LINK" | grep -Fx <検索対象のファイル> >/dev/null && echo "$LINK"
done

Qapacheユーザの実行権限設定はどうすれば良い?

■環境
・Cent OS

■状況
・所有者hogeのディレクトリxに対して、スクリプト経由(apacheユーザ権限)でchmodしようとすると、エラーになります
・スクリプト経由(apacheユーザ権限)でディレクトリ作成しようとしても、エラーになります

■質問
・どうすれば良いでしょうか?
・所有者hogeのグループにapacheユーザを入れたら効果あるでしょうか?

・ディレクトリ所有者がhogeであることが問題? apache所有にした方が良い?
・それとも、スクリプト実行を、apacheユーザ権限ではなく、所有者hogeにした方が良い? どうやって?

・そもそもapacheユーザ権限は、一般的にどう設定するものなのでしょうか? rootみたいに最強にする?

Aベストアンサー

> 所有者hogeのグループにapacheユーザを入れたら効果あるでしょうか?

基本的にはそれでOKですが、それだけではapacheユーザが作成した
ファイルをhogeユーザが変更できなくなってしまうかもしれません。

user=hoge,group=hoge
user=apache,group=apache,groups=hoge

groupは一次グループ、groups2は二次グループです。umask002 (新
規作成されたファイルのパーミッションが775 ) に設定されている
とします。

hogeユーザが作成したファイルはhoge/hoge なので、hogeグループ
に属するapacheユーザは編集可能です。しかし、apacheユーザが新
規作成したファイルはapache/apache になるので、apacheグループ
に属さないhogeユーザは編集できません。

そこで、ディレクトリをhogeユーザで作成し、ディレクトリにsgid
ビットを立てます。

$ chmod 2775 dir
$ ls -l dir
drwxrwsr-x 2 hoge hoge 4096 4月 7 13:35 dir

これで、apacheユーザがdir上に作成したファイルはapache/apache
ではなく、apache/hoge になるので、hogeユーザも編集できるよう
になります。

> 所有者hogeのグループにapacheユーザを入れたら効果あるでしょうか?

基本的にはそれでOKですが、それだけではapacheユーザが作成した
ファイルをhogeユーザが変更できなくなってしまうかもしれません。

user=hoge,group=hoge
user=apache,group=apache,groups=hoge

groupは一次グループ、groups2は二次グループです。umask002 (新
規作成されたファイルのパーミッションが775 ) に設定されている
とします。

hogeユーザが作成したファイルはhoge/hoge なので、hogeグループ
に属するapacheユーザは編集可能...続きを読む


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

人気Q&Aランキング