UNIXコマンドをPerl(CGI)で動かそうとする

Tags: ,
  2009/11/13 03:22

外部からはSSHが通せないサーバーのスクリプトを動かしたいというのがテーマ。
crontabとかではなくて、任意のタイミングで。

まず、PerlでUNIXコマンドを動かすには方法がいくつかある。

  • バッククォート(=backtrick) を使って動かす。
    print `ls -al`;
    

    出力はコマンドの実行結果。

  • system()やexec()などの関数を使う
    system "ls -al";
    

    出力はコマンドの返値、正否。1とか0とか。詳しくは調べて。

別にどっちを使っても構わないと思う。

次に問題になるのはログインするユーザー。

  • CGIによるアクセス => nobody
  • 通常のSSHアクセス => rootとか登録されたユーザーとか

ファイルを触りたい場合、suするかsudoを使うしかない。

  1. suする場合
    対話型のコマンドなのでパスワードが必要なユーザーには基本的にはsuできないが、expectを使えばいける。
    詳しくは調べてー。インストール必要。
  2. sudoする場合
    サーバー管理者に設定してもらう必要がある。
    セキュリティーホールを広げるものなのでー、これは基本的に非推奨だよね。

どちらにせよ、こういうことをするのはセキュリティーを下げてリスクを上げるので良くなさそう。
できそうな感じにはなったけどね。
参考までに。