• ベストアンサー

サーチPathに付きまして

作成したshellを作動させるために投入したディレクトリまでのpathを以下のようにして、投入しました。 export PATH=$PATH:/home/myname/cgi-bin/ 2点ほど教えていただきたいのですが、一度投入したSearch pathを解除する方法と、このパスを電源を再投入した後も効力を持たせるにはどこに書き込めば良いでしょうか。/root/.bash_profileが在りますが、ここでよろしいでしょうか。使用環境はRedHat Linux v7.1です。

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

  • ベストアンサー
noname#4147
noname#4147
回答No.2

おひさしぶりです、yostyです。 最初の質問ですが、環境変数PATHをを元に戻す方法ということでしょうか。 下の方の書かれた方法ですと、元々設定されていたPATHまで消えてしまいます。 まず、 echo $PATH としてください。すると、 /usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/myname/bin:/home/myname/cgi-bin/ のような表示が出ると思います。 この「:」で区切られたそれぞれがディレクトリですので、 最後に追加した:/home/myname/cgi-bin/だけを除いて、 export PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/myname/bin のようにしてやると、PATHが元のように指定し直されます。 なお、PATHという環境変数の存在自体を消すには、 「export PATH=」ではなく、「unset PATH」とします。 次に、起動時の自動設定は、.bash_profileが一般的でしょうが、 rootに適用するのか、mynameさんに適用するのかでファイルの場所が違います。 /root/.bash_profileでは、当然、rootとしてログインしたか、 - または -l 付きのsuでrootになった場合しか適用されません。 mynameさんに適用したい場合は、/home/myname/.bash_profileに書いてください。 redhat7.1ですと、ちょうど PATH=$PATH:$HOME/bin という行がありますので、そこを PATH=$PATH:$HOME/bin:/home/myname/cgi-bin とするといいでしょう。 細かいことですが、一般的にPATHのディレクトリ指定には最後に「/」は付けません。 以降は、補足として... 1行目に、shellと書かれていますが、 PATHを見ると、cgi-binに置かれているようです。 cgi-binはもともと、apacheのScriptAlias指示子で、 例外的にCGIが使えるディレクトリとして指定されるものです。 シェルスクリプトは、ホームディレクトリ直下に、 binというディレクトリを作ってまとめておくことが多いです。 実際、redhat7.1でも、$HOME/binにパスが通っています。 (ただし、ディレクトリ自体は作られていません) もし、shellで書かれたCGIということでしたら、 WEBから利用するだけの場合はPATHの設定の必要はありません。 なお、管理用のシェルスクリプトなどは、 rootでしか実行できないコマンドを利用することも多く、 root所有が一般的だと思います。 redhat7.1のapacheは標準でsuexecがonですが、 委譲できるアカウントのuidが100以上に固定されているため、 root権限でCGIが実行されることはありません。 (rootがアクセスしても、rootでしか実行できないコマンドは失敗します。) ソースから普通にsuexecがoffでインストールした場合、 全てのCGIはnobody権限で動きますので、さらに安全です。 また、スクリプトはsuidも立ちませんので、 一般ユーザがコマンドラインからroot権限で実行ということもできません。 したがって、apache自体がroot権限として起動するといった特殊な設定さえしなければ、 下の方が書かれているような危険性はありません。

cincinnati
質問者

お礼

Yosty様、いつも御世話になります。説明が詳細で行き届いておりまして、Linux初心者には大変わかりやすいものとなっております。どのように学習されたのかお聞きしたいものです。今後ともよろしくお願い申し上げます。有り難うございました。

その他の回答 (1)

  • ysk6406
  • ベストアンサー率40% (237/589)
回答No.1

> 一度投入したSearch pathを解除する方法 ちょっとご質問の意味がよくわからないのですが、これは単に   export PATH= で良いのではないでしょうか。 > このパスを電源を再投入した後も効力を持たせるにはどこに書き込めば良いでしょうか。 おっしゃるように .bash_profile で良いと思いますが、root 権限で CGI を動作させておられるのでしょうか? これは、極めて危険です。 CGI 実行用のアカウントを別に作って、そのユーザの権限で実行するようにしましょう。

cincinnati
質問者

お礼

ちょっとご質問の意味がよくわからないのですが、これは単に   export PATH= で良いのではないでしょうか export PATH=$PATH:/bin/xxxと言う方法でpathを設定しました。同じ設定を解除するにはexport PATH=とすれば良いと言うことでよろしいのでしょうか。 CGIの危険性に付いてコメントいただきまして有り難うございます。今後もよろしく御願いいたします。

関連するQ&A

  • パス(PATH)の設定ファイルについて

    OSはRed Hat Linux 9 を使用しております。 また、シェルはbashを使用しております。 ユーザがシステムにログインする際は、通常ですと /etc/profile ~/.bash_profile ~/.bash_login ~/.profile ファイルを読込、パス(PATH)の設定を行うと思いますが、 sshでrootユーザでシステムにログインした際は、 「echo $PATH」の結果は以下でした。 /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:/sbin su -で再度rootユーザでログインした際、もしくは、他ユーザからsu -でログインすると 「echo $PATH」の結果は以下でした。 /bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin/X11:/usr/X11R6/bin:/root/bin:/sbin ログインの仕方でパス(PATH)に違いがあります。 また、「/usr/local/bin」をパス(PATH)として設定している記述が 上記ファイルに見当たりません。 http://sakaguch.com/PastBBS/0038/B0018808.html http://oshiete1.goo.ne.jp/kotaeru.php3?q=800405 等のサイトを参考に、以下ディレクトリ配下を確認しましても /etc/profile.d /etc/rc.d/init.d /etc/rc.d/rc3.d 「/usr/local/bin」をパス(PATH)として設定している記述が 見当たりません。 ログインの仕方でパス(PATH)に何故違いがあるのか、 また「/usr/local/bin」をパス(PATH)として設定している記述がある ファイルをご存知の方ご教授頂きたく思います。 宜しくお願いします。

  • CGIファイル内の CGI呼出しのパスについて

    CGI 内からの .cgi ファイルの呼出しのパスについて質問があります。 動作環境は linux - apache - perl です perl の cgi ファイル内で次のように、同じ /cgi-bin ディレクトリ内の reset.cgi をコールしています。 ========== #!/usr/bin/perl (省略) if($form[0] =~ /reset/){ `reset.cgi`; } ========== バッククォートで実行していますが、これでは動作せず、 ./reset.cgi と ピリオド,スラッシュを前に付けると動作します。 少し調べた結果、カレントディレクトリのパスが通っていないのかと考え、 /etc/profile の PATHに下記のように ピリオド を追加してリブートしたところ、 export PATH=$PATH:. ホームディレクトリなどで作成した シェルスクリプトは ./ なしで動くようになりましたが、 /cgi-bin ディレクトリ内の前述のような呼出しは動作しませんでした。 後は httpd.conf などの編集が必要なのかもしれませんが、 良く分かりませんでした。 申し訳ありませんが、教えて頂けると助かります。 よろしく御願い致します。

    • ベストアンサー
    • CGI
  • 環境変数の設定(PATH)

    今、環境変数の設定(PATHの設定)を行っています。 OSは、RedHat9です。 スーパーユーザーのPATHは、 echo $PATHコマンドで見ると /usr/local/sbin:/usr/bin:/home/user1/test となっている。 しかし.bash_profileをみると PATHには、/usr/local/sbin:/usr/binしか 設定しておらず、 ユーザー(user1)の.bash_profileにも /home/user1/testをPATHに設定していない。 どこかでPATH設定を行っていると思いますが わかりません。 PATHの設定は、.bash_profileを設定するとは わかっているのですが、 スーパーユーザーの.bash_profileの記述と echo $PATHで見たPATHの構成がことなるのは なぜでしょうか? よろしくお願い致します。

  • JAVAの環境変数が初期化されてしまいます

    Linux初心者です。 JDK6.0をインストールして、環境変数を次のように設定しました。 export JAVA_HOME=/usr/local/jdk1.6.0 export PATH=$JAVA_HOME/bin:$PATH これで一旦はjavacやjavaコマンドが使えるようになるのですが、 bashを再起動すると、また使えなくなるので再設定しなければなりません。 調べてみた所、homeディレクトリの.bash_profileを変更すると 再設定の必要がなくなると書いていたので、 # set PATH so it includes user's private bin if it exists if [ -d ~/bin ] ; then PATH=~/bin:"${PATH}" → export JAVA_HOME=/usr/local/jdk1.6.0 → export PATH=$JAVA_HOME/bin:$PATH fi と記述してみたのですが、やはりbash再起動後のPATHに 上記のパスは含まれていません。 私の記述方法が間違っているのでしょうが、 どうすれば自動的にパスを通すように設定できるのでしょうか? ターミナルはubuntu6.10からGNOME端末を使用しています。 よろしくお願いします。

  • sshdコマンドへのpathの貼りかた

    Linuxに関して質問があります。ターミナルでsshdを入力すると、 [xyz@localhost ~]$ sshd bash: sshd: command not found と出ます。 echo $PATHをやると、 [xyz@localhost ~]$ echo $PATH /usr/lib/qt-3.3/bin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/xyz/bin:/sbin とでます。 pathが通っていないのだと思うのですが、 .bash_profileに何と追記すれば良いのでしょうか?御教示下さい。宜しくお願い致します。

  • pathの設定

    初歩的な質問かもしれませんが、教えてください。 Linux(CentOS)で最新のバージョンの、とあるtool(mpich)を入れたのですが、.bashrcや.bash_profileにpathを記述してもrootが設定した旧バージョンの方にpathが通ってしまいます。また、 $which 新しいtoolのとあるコマンド(mpirun) としても旧バージョンのpathが表示されてしまいます。このような場合どうすれば、新しくインストールした方にpathが通るのでしょうか?私は一般ユーザーでroot権限はありません。また、OSはCentOSでシェルはbashを使用しています。どなたかお分かりになる方がいらっしゃれば、よろしくお願いします。

  • rbashについて

    こんにちは。 Windowsのコマンドプロンプトから、Linuxに対して rshにてコマンドを実行させようとしています。 セキュリティの観点からrshでは問題ありと思い rbashを使用してみようと下記設定をおこないましたが 期待している動作になりません。 Linux側設定 1)シンボリックリンクを設定 # ln -s /bin/bash /bin/rbash 2) /home/ohenryに.rhostsを記述 (Windowsマシンのコンピューター名 hoge_win ) hoge_win Administrator 3) /home/ohenry/.bash_profileの属性変更 #chown root /home/ohenry/.bash_profile #chgrp root /home/ohenry/.bash_profile #chmod 755 /home/ohenry/.bash_profile 4) /etc/passwd編集 ユーザのログインシェル設定 ohenry(中略)/bin/rbash 5) /home/ohenry/.bash_profile編集 PATH=$HOME/bin export PATH 6) /home/ohenry/bin下にコマンドコピー # cp /bin/date /home/ohenry/bin/date (これでdateしか実行できないはず) Windows側 rsh hoge_linux -l ohenry ls / dateしか実行できないはずなのですが ls結果が表示されてしまいます。 rsh hoge_linux -l ohenry (password?)***** とログインしてしまったあとはrbashの期待通りに 動作します。 ログインしないコマンドラインからの実行で rbashの制限を有効にすることはできますでしょうか? だらだら書いてしまい申し訳ありませんが どなたかお助けください。

  • homebrewにパスを通す方法

    virtual boxにインストールしたubuntu20.04でHomebrewをインストールしました。 おそらくインストールは正常に成功したのですが、パスが通っていないため $brew install hello 「コマンド'brew'が見つかりません」となります。 $which brew /home/linuxbrew/.linuxbrew/bin/brew なので .bashrcに export PATH="/home/linuxbrew/.linuxbrew/bin:$PATH" と書きたし、ubuntuを再起動しました。がbrewコマンドを入力すると相変わらず「コマンド'brew'が見つかりません」となります。 ちなみに.bash_profileはありませんでした。.profileはあったので.bashrcと同様のパスを追加したのですが変化なし。(おそらくパスが間違っているので当たり前なのかもですが) 当方、バイオサイエンスのDry分野(データ解析)に興味があり独学勉強を始めたばかりのPC初心者です。「linuxの絵本」を読後程度の超初心者ですので 大変恐縮ですが嚙み砕いてご教授いただければ幸いです。よろしくお願いいたします。

  • PostgreSQLをCentOS5にインストールしました。

    閲覧有難うございます。 質問内容なのですが、Postgresqlをインストールしたのですがpostgresql.confとpg_hba.confが見つかりません。 OSはCentOS5です。 インストール方法は以下の手順で行いました。 # /usr/sbin/adduser postgres # chown postgres:postgres /usr/local/pgsql # mkdir /usr/local/src/postgres-8.2.6 # chown postgres:postgres /usr/local/src/postgresql-8.3.7 # su - postgres # cd /usr/local/src # tar xfz /usr/local/src/postgres-8.2.6.tar.gz # cd /usr/local/src/postgres-8.2.6 # ./configure # make # make install また、 [root@ ~]# su - postgres -bash:  LD_LIBRARY_PATH=/usr/local/pgsql/lib: そのようなファイルやディレクトリはありません -bash:  export: command not found -bash:  PATH=/usr/local/pgsql/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin: そのようなファイルやディレクトリはありません -bash:  export: command not found -bash:  MANPATH=/usr/local/pgsql/man:: そのようなファイルやディレクトリはありません -bash:  export: command not found -bash:  export: command not found -bash:  PATH=/usr/local/pgsql/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin: そのようなファイルやディレクトリはありません -bash:  export: command not found -bash:  MANPATH=/usr/local/pgsql/man:: そのようなファイルやディレクトリはありません -bash:  export: command not found [postgres@ ~]$ のようなエラーがはかれるようになりました。 どうか皆様のお力をお貸しください。

  • 相対パスか絶対パス??

    CGIサイト内検索を設置したいと思っていますが、相対パスか絶対パスって言う言葉が出てきます。 (例)path/にはsearch.cgiまでの相対パスか絶対パスが入ります。 相対パス・絶対パスとは何でしょう? サーバーにあるホームディレクトリのフルパスとは違うのですか? もしフルパスと同じだと言った場合・・・ 「path/にはsearch.cgiまでの相対パスか絶対パスが入ります」ではフルパスが/home/hatenaだった場合は 下記にはどのようにはいるのでしょうか? (例)<form method="GET" action="path/search.cgi"> 再投稿ですが、もうチョット具体的に書いてみました 教えてくださいお願いします。

    • 締切済み
    • CGI