- PR -

javaからのユーザ変更

1
投稿者投稿内容
kosy
会議室デビュー日: 2007/06/14
投稿数: 11
投稿日時: 2008-06-10 18:05
以下を実現したいのですが、可能でしょうか?

【やりたいこと】
 ユーザAのファイルをユーザBのディレクトリにコピーしたい。
  【制約】
   ユーザAでアプリケーションを実行する。
   shell内でのユーザ変更不可

【問題点】
 普通にjavaからコピーしてしまうとユーザBのディレクトリ内に
 ユーザAがオーナーのファイルが出来てしまう。

【課題】
 javaからユーザの変更を行い、ファイルのコピーを行いたい。

【環境】
 jdk:1.4
 OS:Red Hat Linux

いろいろと調べてみましたが、分かりませんでした。
java内でユーザの変更を行うことは可能なのでしょうか?

以下試したソースです。

Runtime rt = Runtime.getRuntime();
Process process = rt.exec("sudo - hoge");
PrintStream ps = new PrintStream(process.getOutputStream(), true);
ps.println("hogehoge\n");
ps.flush();
ps.println("copy.sh");
ps.flush();

よろしくお願いします。
Java僧
ぬし
会議室デビュー日: 2003/11/06
投稿数: 261
投稿日時: 2008-06-11 00:12
「いろいろと調べてみましたが」だけではわからないので何を調べたか書いた方がいいです。
「制約」の部分も背景を書いた方がいいです。
そっちをクリアした方がいい結果なのかもしれないし。
#ファイルのコピーをわざわざJavaでやるのが理解できません。

sudo -u userB copy.sh
でいいんじゃない?

「ユーザBのディレクトリ内に ユーザAがオーナーのファイルが出来てしまう。 」もなぜ問題なのかわかりません。消せないファイルができるから?
kosy
会議室デビュー日: 2007/06/14
投稿数: 11
投稿日時: 2008-06-11 10:54
Java僧さん

返信&ご指摘ありがとうございます。

私が調べた点は、Runtime#execを利用してユーザ変更できるかどうかを
調べました。
hottp://www.atmarkit.co.jp/bbs/phpBB/viewtpic.php?topic=36858&forum=12&2
も参照してみましたが、解決に至っていません。

オーナーが違うファイルが出来てしまうのが問題となっているのは、
クォータ管理が煩雑になると指摘を受けています。

今回の背景は、あるWEBページの設定を確認用のサーバで行い、
ある時間に本番用のサーバに設定を移行したいと思っています。
確認用のサーバ:UserA
本番用のサーバ:UserB

sudo -u UserB copy.sh
を実行したところ、やはりパスワード入力待ちになってしまいました。

昨日は、UserAで実行させなければ、という固定観念にとらわれてしまい、
別アプローチの検討がおろそかになっていました。
UserBで実行すれば解決しますので、設計見直したいと思います。

ご指摘ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)