- ベストアンサー
perlで書かれたwebminのファイルマネージャーを利用する方法
- perlで書かれたwebminにあるファイルマネージャーを利用すると、システムの所有権関係なく、ファイルの編集ができるようです。
- open関数やnet::sftp::foreignのputではできない操作が可能で、リモートとローカルが同一のマシンでしかやり取りできず、端末を変えるとエラーになる問題も回避できます。
- レンタルサーバー向けのファイルマネージャーとして開発されており、アカウント生成時にファイル編集スクリプトを追加することで手間を省けます。
- みんなの回答 (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方式がよさそうですよ。
補足
リモートとローカルではなく、サーバー上とクライアントマシンでした。 このサーバーとクライアントが同一マシンだった場合のデバッグ作業ではできたのですが、異なるマシンでの作業ですとエラー(エラー文は用意してない)が出てsftpコマンドを使ったアップロードやダウンロードができなかったのです。