最近Linuxのサーバーの勉強をしている者です
質問なんですが、PHPやPerlで画像付BBSを利用してテストしています
画像をUPするとNobodyの所有者になるのですが、(/home/~User)FTPでつなげ
Nobodyのファイルを削除しようとしても削除できません。
Rootで入り込めればできるのですが、いろいろ不都合な点もありまして困ってます
Freeのサーバーで試験した所ちゃんと削除できるのになんで削除できなくなるかわかりません
httpd.confの設定だと思うのですが...
???
home/~User ですよね? まずnobody というのはおかしくありませんか?
home/~User の所有者は User になっていると思います。
httpd.conf というよりは所有権の設定 chmod chown 等だと思います。
> 最近Linuxのサーバーの勉強をしている者です
> 質問なんですが、PHPやPerlで画像付BBSを利用してテストしています
> 画像をUPするとNobodyの所有者になるのですが、(/home/~User)FTPでつなげ
> Nobodyのファイルを削除しようとしても削除できません。
> Rootで入り込めればできるのですが、いろいろ不都合な点もありまして困ってます
> Freeのサーバーで試験した所ちゃんと削除できるのになんで削除できなくなるかわかりません
> httpd.confの設定だと思うのですが...
>質問なんですが、PHPやPerlで画像付BBSを利用してテストしています
>画像をUPするとNobodyの所有者になるのですが、(/home/~User)FTPでつなげ
>Nobodyのファイルを削除しようとしても削除できません。
私もちょっと前に悩んだのですが、これってディレクトリを自動作成するCGIで試してるのではないですか?
ディレクトリの所有者がnobody なら FTPでの削除はできません
もしディレクトリを自動作成するCGIならCGIでプログラムを作った方が楽ですよ
httpd.confで対策しようとするのは大きな間違いで、ファイルシステムやユーザー管理を変更しなとだめです
ディレクトリの自動作成を止めて、FTP等でパーミッション(707/606等)で作成されたらいかがですか?
もし nobodyのディレクトリ ファイルを削除したい場合の参考スクリプトをPHP(4.3.4)で作りましたので
-------------------------------------------------------------------
<?php
$md = '/home/USER-ID/public_html/KOKOwoKESU'; // ここを削除したい
if(file_exists ($md)==TRUE){
dir_unlink($md);
rmdir($md);
echo "ファイル及びディレクトリを削除<br>\n";
}
else{
echo "削除ファイル/ディレクトリがありません<br>\n";
}
function dir_unlink($dir)
{
$dh = opendir($dir);
while(false !== ($filename = readdir($dh))){
$w_fname=$dir.'/'.$filename;
if(is_file($w_fname)){
$ef=unlink($w_fname);
if($ef==FALSE) return $ef;
}
}
closedir($dh);
clearstatcache();
return TRUE;
}
?>
----------------------------------------------------
ただし、phpのセーフモードでは試してないです
追記;
$md = '/home/USER-ID/public_html/KOKOwoKESU'; // ここを削除したい
ここを消したいディテクトリに変更して下さい。
例)
/home/test/public_html/bbs に CGI 本体
/home/test/public_html/bbs/thmb が 自動作成するディレクトリ
上記の場合は
md$ = '/home/test/public_html/bbs/thmb' と 記述して下さい
データベース初心者様、Ton様ありがとうございます
FTPで確認したところ、フォルダの所有者がnobodyになっていました
そこをUserと同じ所有者で実験したところ削除できるようになりました
あと、phpのプログラムで消したいところをホームページから選ぶことはできますか?
> あと、phpのプログラムで消したいところをホームページから選ぶことはできますか?
おやじ様のHPでスクリプトをお教えすると長くなりそうで迷惑がかかりますので
メールを頂ければスクリプトをお送り致します
> 最近Linuxのサーバーの勉強をしている者です
> 質問なんですが、PHPやPerlで画像付BBSを利用してテストしています
> 画像をUPするとNobodyの所有者になるのですが、(/home/~User)FTPでつなげ
> Nobodyのファイルを削除しようとしても削除できません。
> Rootで入り込めればできるのですが、いろいろ不都合な点もありまして困ってます
> Freeのサーバーで試験した所ちゃんと削除できるのになんで削除できなくなるかわかりません
> httpd.confの設定だと思うのですが...
この問題は、httpd.confの設定では解決しません。suEXEC環境でApacheを構築すれば解決します。
使われたサーバはsuEXEC環境で構築されていたのでしょう。レンタルサーバ等はセキュリティ面から
suEXEC環境になっているものが多いはずです。
SuEXEC環境なら全てそのユーザ権限で動作しますから、upした画像もそのユーザになるので、
FTPでアクセスして消すことができます。suEXEC環境を作るには、コンパイルからやり直せばできます。
但し、おやじはやっとことはないですが。セキュリティ面では、suEXEC環境のほうが優れていますが、
いくつか制約事項がでてきますので、CGIの見直し等も必要になるかもしれません。
興味のあるテーマですから、チャレンジしてみたい気はしますが。