
No.4ベストアンサー
- 回答日時:
かなり苦労しているようですが、まだゴールまでの道のりは近くは無いかもしれません。
ここで諦めるのでしたらそれっきり、しぶとく追求するのでしたらマスターまで(笑。それはさておき、
PHPの質問と言うよりはLinuxの話になってしまいますが、、、
> ウインドウズなら簡単に、この人は777、このグループは666とか、視覚的にわかるじゃないですか?
これはLinuxでも同じです。これはファイルの実行(アクセス)権限です。sudoで実行権限を与えるのはコマンドレベルです。
Linux(UNIX)では、もともと多くの人がログインしてコマンドを実行出来るように設計されています。rootでは全てのコマンドが実行出来ます。一般ユーザではcdとか、mkdir、viなどのコマンドは実行出来ますが、ユーザを追加する権限のuseraddや、サーバを再起動するコマンド実行権限はありません(一般ユーザが勝手にサービスを止めたら困りますよね)。当然、apacheにもサーバの実行権限等は与えられていないのですが、特別に与える事が出来るコマンドがsudoです。誰と誰にはこの管理権限を委譲する、と言う事が出来る訳です。
sudoの設定は、/etc/sudoers のファイルを編集する事で出来ます。当然root権限でないと編集出来ません。ここでapacheに実行権限を与えれば、与えられたコマンドが実行出来ます。
ところでなぜPHPスクリプトからサービスの再起動をしたいのですか?一般ユーザに再起動させる事は通常考えられませんが。リモートからWEB経由で管理したいと言うのでしたら、webminあたりを使ったらどうでしょうか?webminならsquidの再起動ぐらいはワンタッチですよ。
ありがとうございます。
まだまだ諦めるつもりは、毛頭ございません。
ただ、疲れているのは確かです。
LINUXは2ヶ月前から触りだしました。なんかよくわからないけど、RPMは成長するのに障害だろうと重い、tarボールのをダウンロードして、わからないなりにやってます。
今度は、DDNS使ってサーバーも公開してみようと思ってます。
ウインドウズだって最初はまったくわからなかったですもん。LINUXだって一緒ですよね。ただ・・ハードルは高すぎますが(TT
PHPのスクリプトから再起動させたい理由ですが、
会社の内部のFWにソニックウォールを使ってまして、これにはコンテンツフィルタってのがあります。
まぁ有害サイトをとめるだけなんですが、実は日本語のエロサイトは全くノーチェックなんですね。
営業マンが出張するたびにデリヘルあさりまくりみたいな。
てっきり信頼してたのに・・ってことで、コンテンツフィルタ料を払うのをやめ、ログからうち専用のフィルタリストを作ろうと。もちろん、フリーのリストも取り込みますが。
で、squidのurl_regexを使ってブロックするのですが、新しいURLを登録するとこやつを再起動しないと反映しないのです。なんで、再起動する必要があります。
ただ、WEBMINってヤツでも可能なら問題ありません。実現できることがまず第一ですから。
WEBMINやってみます。
でも・・せっかく色々と教えてもらったので、PHPスクリプトから実現できるようには頑張ります。
No.6
- 回答日時:
5番の方が書かれている通り、visudoでやらないとまずいですね(笑。
visudoはviがある程度使えないと若干苦労しそうですね。
とは言え、Linuxでサーバ管理となるとviは避けて通れないでしょうから、頑張って下さい。
ところで、webminはほとんどのディストリでデフォルトでインストールされる程、重宝する管理ツールですが、一部設定出来ないアプリもあったりします。管理者のIPアドレスが固定なら、それのみで設定出来るようにした方が良いと思います。suduでApacheに権限委譲するよりはこちらの方が安全と思います。sudoで対応させるなら、せいぜい/sbin/squidだけを有効にする程度じゃないでしょうか。
この回答への補足
お世話になります。ご報告です。
無事PHPから再起動できました。
visudo
nobody ALL=NOPASSWD:/usr/local/squid/sbin/squid -k reconfigure
php-script
system("sudo /usr/local/squid/sbin/squid -k reconfigure")
となりました。
ありがとうございました。
お世話になります。
WEBMINで再起動をかけることができました。
初めて使うツールなんですが、便利ですね。
とはいえ、私の知識は発展途上なので使用は控えます。
visudoはこれからぼちぼちと勉強していきます。
ちなみにviは使用できます。
昔ある超マイナーな言語をたしなんでいたのですが、
その言語のエディタと90%同じなんですよ。
ありがとうございました。
No.5
- 回答日時:
下の方も書かれてますが、123daaさん( (^^; )のやりたい事はsudoを使えば非常に簡単に実現出来ます。
が、私もなんでそんな事したいの?って思いますよ。
一応sudoに関する質問に答えると、rootでログインし、 visudo ってコマンドをうちます。
すると sudoを編集出来ます。
(下の方が書かれてる通り、sudoersを直接編集してもいいですが、これは敬遠されている方法です。やめた方が無難です。)
そこに下記のように、httpユーザー(nobodyと仮定します)が実行したいコマンドを羅列していきます。
nobody ALL = NOPASSWD: /usr/sbin/useradd,/usr/sbin/userdel,/bin/rm,/bin/chmod,/bin/chown,/bin/mkdir,/bin/cp,/usr/bin/pas
swd,/sbin/squid
(おお…危険な設定(笑))
こうすればブラウザから、ユーザーを追加したり、消したり出来てしまいます…
だからやめた方が無難ですけどね(^^;
皆様、本当にありがとうございます。
本番に実装するのは別として、一度やってみます。
危険なことはしないに越したことないし、WEBMINで実現できるならそれでOKですので。
月曜日以降になりますが、結果は報告いたします。
No.3
- 回答日時:
他の方も書いていますが、exec()かsystem()あたりでいけます。
但し、apacheに実行権限がなえればいけません。実行権限を与えるにはsudoを使います。
sudoを使ってApacheに実行権限を与える時注意すべきは実行しているのがapacheなのか、nobodyなのか、それ以外なのか、と言う事です。また、Apacheに実行権限を与えると言う事はかなり大きなセキュリティホールになる可能性もよく考慮して下さい。
追加ですが、cd /usr/local/squidと言うのは有効にはならないのではないかと思います。また、system関数等ではコマンドは絶対パスで記載する必要があります。
ありがとうございます。
実行権限の与え方を勉強しないと、難しいですねぇ。
まだリナックスはやり始めたばかりで、全然わかってないのです。ウィンドウズならある程度はわかるのですが・・
例えば、ひとつのフォルダにウインドウズなら簡単に、この人は777、このグループは666とか、視覚的にわかるじゃないですか?
それが、黒画面になると・・・最近吹き出物が増えましたよ。
cd /usr/local/squidと書くと、そんなんありませんって返ってくるので、フルで書くと、動かないし。
実行権限のところ、勉強します。
No.2
- 回答日時:
上手く動かないのは、/sbin/以下のコマンドにたいして、httpのユーザーが実行権を持たないからではないですか?
(まあルート専用コマンドなので当たり前ですけど(^^;)
sudo でhttpユーザー(何もしてないようでしたら多分nobody)に実行権を与えれば上手く動くと思いますよ。
ありがとうございます。
実行権限の与え方がよくわからないので、sudoで試しました。
exec("sudo ps -ax",$a);
でプロセスのリストを出すとこまでいったのですが、
exec("sudo /usr/local/squid/sbin/squid -k shutdown")
とすると、実行できませんってでます。
apache2/htdocsにtest.phpとして、ルートでログオンしてphp test.phpで駄目です。
rootでログオンして、cd / の /usr/local/squid/sbin/squid -k shutdown だと
動くのですが。
根本的なところからの知識不足なので、いろいろと調べてるのですが・・・なかなか難しいですね。
No.1
- 回答日時:
exec("再起動コマンド");
これで、phpからLinuxにコマンドを実行させるとできると思います。
参考URL:http://jp2.php.net/manual/ja/function.exec.php
ありがとうございます。
一応試したのですが、上手いこと動きません。
実際には
cd /usr/local/squid
./sbin/squid -k shutdown
./sbin/squid
とやりたいのですが、このサンプルスクリプトがある
URL等はご存知ありませんか?
お暇なときで結構ですので・・・
もちろん私も今からもっと色々試してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP eclipse pleiades phpのインストールについて 1 2023/02/03 17:15
- PHP バージョン情報の取得方法について 1 2023/03/15 11:56
- PHP WordpressのPHPを安全に編集する方法 1 2022/08/04 01:43
- Wi-Fi・無線LAN Wi-Fi初期設定教えてください 5 2022/04/27 09:35
- UNIX・Linux redmineにメールを飛ばす方法 1 2022/09/13 22:02
- ドライブ・ストレージ M.2SSDがWindowsからはアクセスできるのに、BIOSで認識されない 3 2022/09/11 16:55
- Windows 10 Windows10環境にてWindowsUpdate後の再起動を完全に抑止する方法はございますか? 10 2023/06/16 09:57
- PHP 「teratail」での回答内容がいまいちわかりません。 1 2022/09/10 05:05
- Windows 10 Windows10起動しない、エラー0xc0000185修復方法 2 2022/07/14 12:28
- PHP phpの imap_search で漢字コード 1 2022/09/06 17:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPにてC言語プログラムを呼び...
-
VBでPINGで問題・・・
-
コマンドラインの生成でParse e...
-
php実行中に実行中のphpファイ...
-
FTPコマンドでディレクトリごと...
-
PHPのif文でその処理を途中で抜...
-
libpng 24bpp rawをPNGに変換す...
-
ファイルの遷移がうまく行われ...
-
PHPで画像アップロード時にサイ...
-
PHPで`headers already sent`と...
-
SELECTの値を保持する
-
VB2008でFTPでのディ...
-
sqlで日付が一番古いデータの月...
-
.phpと.incファイルの違いはな...
-
.htaccessファイルの修正がこれ...
-
visualstudioでc#のdllができない
-
サーバーによってはmb_send_mai...
-
*.php、*.php3、*.phtmlの違い
-
PHPの変わった閉じタグの必要性...
-
「クラス関数」「メンバ関数」...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
mysql複数レコードをまとめて削...
-
シェルスクリプトをPHPで動かそ...
-
PHPでコマンドプロンプトを実行...
-
require_onceが動いていない
-
ヒアドキュメントの中で演算子...
-
PHPでサーバーにインストールさ...
-
php実行中に実行中のphpファイ...
-
社内LANで複数台のPCからApache...
-
ブラウザからexecコマンドを実...
-
PHPからバッチファイルの実行
-
Switch文における、returnとbre...
-
PHPからPostgreSQLのダンプを実行
-
正常に動作しない
-
htmlでsubmitで指定したAction...
-
PHPファイルをcronで実行す...
-
[cakePHP]外部ファイルの実行方法
-
テルネットしコマンドを自動実行
-
copy() で属性保存
-
PHP+MySQLでrollback出来ない
-
入力してからn時間(日)後、DBデ...
おすすめ情報