ファイルのオーナーを変更する。


スポンサーリンク

FTPでアップロードしたり、プログラムからファイルを作ったりするとアップロード/作成したファイル、ディレクトリのオーナーが apach とかになったりすることがあります。

本当は、ありえないんだけど、サーバー管理者のレベルが低かったりするとよく起こります。

代表例は、le ・・・ やめとこ(笑)

まぁ、le ・・・ の場合は、サーバーコントロールパネルから所有者を変更ができるようになっていますが、
(逃げられないから、それでごまかしてるってことでしょうがww)ファイルを1本づつしていしないといけない。

こちらは、何百本もファイルをアップロードしてるのでとてもじゃないけど無理。

そこで、自作プログラムでオーナーを変更してみようと思ったわけです。

ファイルのオーナーを変更するプログラム perl 編


と、いっても perl でしかやるつもりはなかった。こういう系は パーミッションすら変更できない php では絶対無理。

で、プログラムソースです。試してみてください。

#!/usr/bin/perl —
main();
exit 0;
# ============================================================================
sub main
# ============================================================================
{
# 以下のファイルのオーナーを変更できるか試してみた。
# スーパーユーザーでないとだめっぽい。
my $fname = '相対位置で変更したいファイルを指定';
my $iam = '新しいユーザー名'; # 自分のユーザー名
# ファイル情報を取得する
my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size,
$atime, $mtime, $ctime, $blksize, $blocks) = stat $fname;
# ファイルの所有者ユーザID(数値)からユーザ名を取得する
my $uname = getpwuid $uid;
# 自身のユーザーID,グループIDを取得する
my ($name, $password, $uid, $gid, $quota, $comment, $gcos, $dir, $shell)
= getpwnam $iam;
# 肝、ファイルのオーナーID,グループIDを変更する
my @file = ($fname);
my $ret = chown $uid, $gid, @file;
# 変更後のファイルのユーザー情報を取得する
my ($ndev, $nino, $nmode, $nnlink, $nuid, $ngid, $nrdev, $nsize,
$natime, $nmtime, $nctime, $nblksize, $nblocks) = stat $fname;
# コマンドが効いていれば、ユーザー名が変わってるはず!
my $cname = getpwuid $nuid;
# 結果の表示
print "Content-type: text/html\n\n";
print <<"EOM";
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=x-sjis">
<meta http-equiv="x-ua-compatible" content="IE=8" >
<meta http-equiv="x-ua-compatible" content="IE=EmulateIE8" >
<TITLE>$htmltitle</TITLE>
</HEAD>
<body>
# 以下のファイルのオーナーを変更できるか試してみた。<br />
# スーパーユーザーでないとだめっぽい。<br />
$fname<br />
<hr />
USER NAME : $uname (変更コマンド発効前のオーナー)<br />
RETURN ST : $ret (変更コマンド実行の戻りステータス 0:失敗 1:成功)<br />
CHANGE IS : $cname (変更コマンド発効後のオーナー)<br />
<br />
name : $name<br />
uid_ : $uid<br />
gid_ : $gid<br />
quot : $quota<br />
comt : $comment<br />
gcos : $gcos<br />
dir_ : $dir<br />
shel : $shell<br />
</body>
</html>
EOM
}



ファイルのオーナーを変更する まとめ


基本的にファイルのオーナーを変更することができるのは、スーパーユーザーのみ。

知ってたさ(--

プログラムでやろうともなにしようともスーパーユーザーのみ。

それは、どこでも書いてある。


結果として、できません(笑)

でも、ファイルのユーザーとか自身の情報とかをゲットするコマンドは使えるんじゃないでしょうか?

使用の具体例として参考になれば幸いです。


期待させてすみません。 m(_ _)m


ということで、le ・・・は、データ引っ越しして、解約しようと思っています。

スポンサーリンク