
Ubuntu日本語フォーラム

ログインしていません。
少々板違いかもしれませんが、該当のスレッドがないのでここに投稿しました。
現在ImageMagickを使って画像の処理をしてますが、書き出した画像のオーナー(所有者)がwww-dataになってしまいます。ImageMagick/PerlMagickのPerlのファイルのオーナーは通常のシステムユーザーなのですが、そのユーザーと同様の権限として書き出してくれません。端末からのコマンドラインからは実行したユーザーと同様のオーナーになります。となるとPerlMagickに問題があるのかもわかりませんが、PerlMagickも最新のものを使用しています。かなりいろいろ調べてまわったのですが該当の情報が得られませんでした。どなたか詳しい方がいらしたらおしえてください。
現在の自分の環境は、
Ubuntu 9.04
imagemagick 7:6.4.5.dfsg1ubuntu3.1
perlmagick 7:6.4.5.dfsg1ubuntu3.1
です。よろしくお願いします。
オフライン
[追伸::]いろいろ使っているとわかってきたことなのですが、一部のスクリプトで何らかのファイルを書き出すとオーナーがwww-dataになってしまうことがわかりました。たぶんImageMagickやPerlMagickだけの問題ではなさそうな気がしてきました。今回発見したのは、Movable Typeのテンプレートを自動的にYAMLで書き出すスクリプトです。書き出されたYAMLのファイルがwww-dataになっていました。
現在主に使用しているのは、sudoの権限を持っているメインユーザーですが、その他のユーザーでも同様の結果でした。
オフライン
apache経由なcgiスクリプトからの出力であれば、www-data権限でapacheが動いている以上はwww-dataになってしまうかと。
ですので、ImageMagick等が原因ということではありません。
# 出力先ディレクトリがwww-data に書き込み権限がなければエラーになるでしょうから、パーミッションは 777 とかにされてるのかな...?
解決方法としてはファイルを書き出すディレクトリを固定しておいてcronで適当なユーザにchownするとかというのが運用上安全なのかもしれません。
もしくは/etc/sudoersの設定でwww-dataにchownだけ実行させられるようにして、スクリプト内部でファイル作成後「sudo chown (作ったユーザ) (作ったファイル)」とかをさせる方法かな...。
もちろんapacheの動作するユーザを変更してしまうという荒技もありますが、最初の方法以外はオススメはしませんです。
オフライン
n_saitoさん、いつもありがとうございます。
ImageMagickが原因ではありませんでした。(そんなわけで質問のタイトルがまったく見当違いですね(汗))しかし、何だかちょっとおかしな感じがしたのが、自動的に何らかのファイルを書き出すようなスクリプトがすべてwww-dataになってしまいました。ファイルがなかったら新規でファイルを作成してxxxxする…というような処理はオーナーがすべてwww-dataになってしまいます。
ここ最近Ubuntuにシステムを引越ししたのですが、まだまだいろいろな面でなれていなくて勉強中なのですが、あるユーザー(例えば、oosamuuy)
で作成したスクリプトは(特別なことをしない限り)当然オーナーがoosamuuyになる…と思うのですが、実行されて書き出されたファイルはapache2経由ですとすべてwww-dataになってしまうということなのでしょうか?何となく経験的になのですが、スクリプトのユーザーと同じになると思っていたのすがUbuntuの場合はwww-dataになるということなんでしょうか?
よくよく他のファイルをみてみるとすべてwww-dataになってしまっていたので、ちょっと困りました(汗)。特にMovable TypeというCMSを使ったWeb管理では、新しく生成されたファイルや画像がすべてwww-dataになってしまってFTPからダウンロードできなくなったり…と。。
たぶん、なんだかもっと常識的な問題のような気もするんですが、例えば、touchコマンドでファイルを作成した場合には、ユーザーと新規で作成(出力した)ファイルのオーナーはwww-dataではなく通常のように同様のオーナーになってくれます。しかしもうちょっと複雑なスクリプトになってくると、www-dataになってしまう…という感じです。touchコマンドもPerl経由で、
#!/usr/bin/perl
$touch = `touch new.txt`;
を実行すると新しく作成されたnew.txtはwww-dataにはならないです。
単純に、各ユーザーが実行(出力)したファイルは各ユーザーのオーナーになる…というようなことはできなのでしょうか?実行スクリプトは各ユーザーのオーナー権限になっています。
何とかよい情報をよろしくお願いします。
オフライン
[追伸]
何度もすみません。やはりある時期からこのオーナー権限の問題が発生している模様です。 7/2に実行したスクリプトでは、
スクリプトのオーナー(oosamuuy)→書き出したファイル(oosamuuy)
だったのですが、先日より、
スクリプトのオーナー(oosamuuy)→書き出したファイル(www-data)
になってしまっています。
何かシステム的に何かを再設定した…という記憶がないのですが、何かの拍子で何らかの設定が変わってしまったのでしょうか?
オフライン
[追伸2]
PHPのfopneからファイルを新しく作成してみた結果もオーナーがwww-dataになってしまいました。さすがに端末から実行したコマンドでのファイルオーナーはユーザー権限になっていますが、apache経由だとダメです。。。(泣)。
オフライン
oosamuuyというユーザが、別のオーナーをもつコマンド(例えばオーナーがbinのコマンドviとか)で作成したファイルのオーナーは、通常はそのコマンドを実行したユーザであるoosamuuyです。
同様に。
www-dataというユーザが、別のオーナを持つコマンド(実行可能なファイル。例えば上記で作成したファイル)で作成したファイルのオーナーは、通常はそのコマンドを実行したユーザであるwww-dataです。
上記の2つに何も違いはありません。そのファイルのオーナーは作成したプログラムのオーナーではなく、(通常は)そのプログラムを実行したオーナーになります。
# touchのコマンドが出力するファイルも、touchのオーナーにはなっていませんよね・・・?
このへんは、cgiを利用する上ではほぼ必ず出てくることですので、大抵はcgiの設定の時点やcgiの中で対応してあります。
・データファイルを、予めユーザのオーナで(空でもなんでも)作成しておく。すでに在るファイルを変更する分にはオーナーは変化しない為。
・cgiが生成したファイルについて、cgiから権限の変更を行う。これにより、cgiが生成したファイルに対するユーザからの参照や変更を可能にする。
オフライン
weykさんありがとうございます。
経緯としてはFC5を今まで使用していたのですが、さすがにサポートも終わってしまい使い辛くなってきたのでUbuntuに引越ししました。それまでの環境下では、ユーザー(oosamuuy)が作成したcgiのスクリプトは、apacheによって実行されていてもそのユーザー(oosamuuy)のファイル権限になっていました。weykさんのご説明の通りシステム的な意味はわかるのですが、今まで書いた膨大なスクリプトを書き換えるというのはまず無理な感じでして、今のところcronで数時間に一回だけホームディレクトリ以下のオーナーをすべてそのユーザーにchownしているという具合です。
cgiスクリプトに関しては長いことやってきたのですが、perlにしろphpにしろrubyにしろ、実行した結果の出力ファイルがすべてwww-dataになってしまうというのは初めての経験なので、ちょっと戸惑っています。
たぶん、なのですけど、例えばphpスクリプトをシステムユーザーが実行している…という風になっていないのかな…と思いました。まだ引越ししたばかりで殆どがデフォルトのままなので殆どカスタマイズしてないのですが、そういうことはありえないでしょうか?たぶん、なんですけど、phpもperlもシステムユーザーがapacheを通して実行する…というようなことになっている筈だと。。。。
何か間違っていたらご指摘ください!
オフライン
ちょっとわかってきたので追伸です。
たぶん、なのですが、apacheのphpやperlのモジュール版とCGI版といわれる機能になんらかの原因があるんじゃないかと思いました。いろいろ調べているとphpモジュール版の場合はapacheのモジュールとして実行され、CGI版の場合はシステムが実行する…みたいな記事を見つけました。どうやらモジュール版で動いているスクリプトのファイル所有権のみがwww-dataになるようです。
phpの場合は僕の環境下ではモジュール版になっていて、apache2handlerがwww-dataになっていました。たぶん、ここら辺りの設定をどこか変えれば何とかなるような気がしています。。
詳しい方がおられましたらよろしくお願いします!
オフライン
ひょっとして、Fedora Core 5の環境、suEXECが、各ユーザのpublic_htmlに対して有効になっていませんでしたか?
Ubuntuについて、同モジュールがどうなっているのかは不明なのですが・・・これを利用すれば、質問に書かれているような感じで動作するのではないかと思います。
# 「suexecの設定を変更する方法」という記事からすると、ubuntuでは無効・・・というか設定が違うっぽい。
オフライン
weykさんありがとうございます。
かなりむかしのことで設定時の時のことをすっかり忘れていました。suEXECしていました。たぶんこれが原因っぽいです。
調べてみるとApacheでは、suEXECを推奨していないみたい(当たり前ですよね。。)で、ubuntuのapache2ではデフォルトで無効になっているようです。反対にFC5ではデフォルトで有効になっている模様です。
現在は各ユーザーのグループにwww-dataを追加してしのいでいますが、またいろいろ設定しなおしてみます。
いろいろありがとうございました!!!
オフライン
たくさんのヒントを与えてくださった皆様ありがとうございます。
最初はImageMagick単体の問題かとおもい、やや板違いというところでいろいろ質問に答えて頂いてようやく解決しました。これらは一重にapacheの問題でありました。
以前のWeb環境とまったく同じにしようと思ってかなり慎重に設定したつもりだったのですが、suexecというモジュールがUbuntuではデフォルトでは設定されていない…ということでした。僕自身自分のカスタマイズした環境が普通で、www-dataが出てきた時点で異常!と思っていたのは逆でした(汗)。
suexecをインストールして設定すると以前の状態に戻りました。
オフライン