perlで書かれたwebminのファイルマネージャーを利用する方法

このQ&Aのポイント
  • perlで書かれたwebminにあるファイルマネージャーを利用すると、システムの所有権関係なく、ファイルの編集ができるようです。
  • open関数やnet::sftp::foreignのputではできない操作が可能で、リモートとローカルが同一のマシンでしかやり取りできず、端末を変えるとエラーになる問題も回避できます。
  • レンタルサーバー向けのファイルマネージャーとして開発されており、アカウント生成時にファイル編集スクリプトを追加することで手間を省けます。
回答を見る
  • ベストアンサー

ファイルマネージャー

perlで書かれたwebminにあるファイルマネージャーを利用すると、システムの所有権関係なく、ファイルの編集ができるようですが、その編集するためのソースコードがわかる方はいらっしゃいますか? 通常のopen関数ではできなかったし、net::sftp::foreignのputだとローカルとリモートのやり取りなので、リモートとローカルが同一のマシンでしかやり取りできず、端末を変えるとエラーになります。 レンタルサーバー向けのファイルマネージャーの開発になります。 裏技としてアカウント生成時にアカウント内に個別にファイル編集スクリプトをぶち込んでおいて、それを使って編集してやればやれなくはないですけど、それだと手間がかかりますので、あまりやりたくないです。 かと言って、ftpクライアントを入れるのがめんどいって方に入れていただくのも、なんと言いますか……

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

  • ベストアンサー
回答No.1

Webアプリ(CGI)特有の問題として そのWebアプリを実行しているユーザーは、 そのファイルの持ち主ではないという点に注意する必要があります。 Webサーバー上で 普通にCGIとしてperlを呼びだしたら httpdプロセスのオーナーが実行ユーザーとなります。 普通だと、apacheとかnobodyとかwww-dataといったユーザー名で 実行されるようにサーバー管理者が設置していますので このユーザーが サーバー上のファイルを読み書きしていることになります。 (dockerとかphp-fpmとかsuexecを使って実行オーナーを 切り替えるようにしていたらまた話は別ですが) つまり、普通のCGIだと apache等のユーザーが apacheでないユーザーがオーナーになったファイルをopenしにいくので、 パーミッションで許可されてないとパーミンションエラーになります。 一般公開されているCGIを自分のコンテンツに設置するときに データディレクトリのパーミッションを777か757に設定したり データファイルのパーミッションを666か646にしないといけないのは、このためですね。 今回は、他のユーザーが持ち主になっている任意のファイルを Webアクセスで起動されるCGIから読み書きしたいということのようなので dockerやsuexecを使ってperlを実行するオーナーを 各コンテンツのオーナーに切り替ておくか perlのスクリプトから、sudo付きでスクリプトをコールすることで実行ユーザーを切り替えるとか、 言われているようなperlからftp(各ユーザー名とそのパスワードを指定)を 使って読み書きするというようなことになるでしょう。 なお、perlからのftpが リモートとローカルが同一マシンでしかできないというのは誤解です。 perlからftpを実行すると、FTPクライアントとして実行されるのは ローカルでなくWebサーバー上です。 なので端末を変えるとできなくなったというのは、別の問題でしょう。 なお、suexecやsudo方式は、セキュリティーの知識がないまま設定してしまうと、 あるユーザーが、別のユーザーのファイルを書きかえるということが 簡単にできるようになってしまうので、あまりお勧めしません。 なので、ちゃんと各ユーザーごとに設定して ユーザー名とパスワードで認証する必要のある FTP方式がよさそうですよ。

humu01jp
質問者

補足

リモートとローカルではなく、サーバー上とクライアントマシンでした。 このサーバーとクライアントが同一マシンだった場合のデバッグ作業ではできたのですが、異なるマシンでの作業ですとエラー(エラー文は用意してない)が出てsftpコマンドを使ったアップロードやダウンロードができなかったのです。

関連するQ&A

  • ファイルマネージャーのソースコード

    お世話になります。 先日、Perlモジュールである、Net::SFTP::ForeignをMacのmojaveにぶち込みました。 それで、レンタルサーバサービスにあるようなファイルマネージャーをPerlで作って、ウェブブラウザ上でユーザーのローカルにあるデータを当方のサーバとで送受信をしたいのですが、ソースコードがわかりません。 最初はopenによるファイル操作でファイルを編集するスクリプトを書きましたが、所有権やアクセス権の問題で、ファイルを編集できないことに気づき、仕方ないのでsshでやり取りしたいのですが、書き方が分からず詰まっております。 目的のソースコードを書ける方、もしくは解説サイトかなにかをご存知の方、いらっしゃったらご教示願います。

  • Macについて質問です。

    「/Users/ユーザー名/Sites」内のファイルを別のユーザー名からPerlのopenを使って、ファイルマネージャーのようにファイルを編集できるようにしたいのですが、不可能なのでしょうか? なぜこれをやりたいのかと言うと、当方のサーバーでレンタルサーバーをやってるからです。 所有権とかアクセス権などで、openで無理なら、net2ftpみたいなのでSFTPサーバーに繋いで、データのやり取りをしようと思ったのですが、可能ですか? Hight sierra以前でFTPが使える時は、net2ftpで編集できてたので、SFTP接続ならできるのかな、と思っています。 そこで、当方は、Net::SFTP::Foreignを入れて、PerlからSFTP接続をできるようにしたのですが、肝心のソースコードがわからなくて困っています。 どこか、解説サイトとかご存知の方はいらっしゃいますか? それか、ソースコードを書けるって方でもいいです。 一応、当方でもググったのですが、これといったものがでてきませんでした。 よろしくお願いします。

  • perl

    net::sftp::foreignでperl上からperlスクリプトを新規作成したり編集すると、500エラーになりますが、なにが原因なんでしょうか?

    • ベストアンサー
    • Perl
  • LINUXについて質問です。

    今現在VPSにSFTPでファイルのやり取りをしているのですが VPS内をしらべてみるとVSFTPDがインストールされていないようです・・・。 しかしながらFTPソフトのサイバーダックSFTP接続できています。 これはなぜでしょうか? ひょっとしてSSHのプロトコルでSFTP接続しているのでしょうか? もしそうならVSFTPをインストールして、FTPのプロトコルでちゃんとファイルのやり取りをするためには、どのようにしたらよいのでしょうか? ためにしにVSFTPをインストールしてもどうも、VSFTPの設定が無視されてFTPせつぞくされているようです。 用はVSFTPの設定でFTP接続させないアカウントを指定しているのにFTP接続ができてしまってるような・・・。

  • NET::SFTP::FOREIGN

    perlモジュールのnet::sftp::foreignについてですが、$sftp->chmodと打っても、サーバ上のファイルのパーミッションを変えることができません。 $sftp->にchmodのコマンドは使えないのですか? また、パーミッションを変えるコマンドが他にある場合、それも教えて下さい。

  • perlでFTP

    ローカルPCからPerlで記述されたプログラムを実行し、 FTPサーバーへファイルをアップロードするPerlプログラムを教えてください。 DOS上では、 ftp open ftpサーバー名 ユーザー名 パスワード put 送信するファイル bye となるのですが、それをPerlで記述すると、どのようになるのでしょうか?

    • ベストアンサー
    • Perl
  • Perlでリモートファイルの参照方法

    Perlからリモートファイルを参照する方法がわかりません。 参照というのは、ファイルをOPENして順次読み込みをするという意味です。 リモートファイルはURLでのみ指定して参照しようとしています。 FTPは使えません。 いろいろと調べたのですが、そもそもPerlでは出来ないのか、または何か方法があるのかわかりません。 是非よきアドバイスをお願い致します。

    • ベストアンサー
    • Perl
  • ローカルネット内にてファイルをシェルで転送するには?

    初投稿させて頂きます。 パソコンが最近不安定なので、バックアップとして定時にローカルネット内の他機へファイルを転送するシェルを作りたいと考えています。 流れは、 #!/bin/bash sftp 他機のローカルアドレス ユーザー名 パスワード put file.txt こういうイメージなんですがアカウントとパスを入力するところで躓いています。検索してもUNIXのコマンド(user等)しか引っかかりませんでしたので、linuxで使える良いコマンドはありませんか。 環境はCentos5です。どうぞよろしくお願いします。

  • FTPでリモートのファイル一覧取得

    BashでFTPでリモートに接続し、リモートの対象フォルダ内のファイル一覧をローカルフォルダ内にファイルとして出力するにはどうしたらいいのでしょうか? 教えて下さい。

  • FTPのPUTコマンドについて

    例:PUT D:\FTPDIR\TEST FTPの上記のコマンドについて質問があります。 (1)ローカル側のD:\FTPDIR配下のTESTというファイルを、  リモート側にアップロードするという意味で合っていますでしょうか? (2)PUTでリモート側にアップロードしたファイルは、  特に何も指定していない場合、通常どのパスにアップロードされますか?  また、どこにアップロードされたかはログか何かで分かりますか?