Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Solaris上の tomcat Webアプリで Solaris内にDirectory作成&Directory chown, chmodは可能ですか?権限は問題ないですか?


Solaris上の tomcat に Java Webアプリを配置。
ブラウザから任意のボタン押下した際、
Solaris ローカルの任意のディレクトリ(/export/home 配下)箇所に

1:ディレクトリを作りたい。

2:ただし、/export/home は root 権限でなければディレクトリを作成できない。
→root以外は、書き込み権限がない

3:ディレクトリ作成後、そのディレクトリのオーナーを tomcat, root 
ユーザーとは別のユーザー(root でもなく、tomcat でもないまったく別ユーザー)
にしたい。

ということを実行したいと考えています。


実現方法として、
Web Java アプリ(struts の action )
内部で Runtime#exec() にて mkdir や chmod を実行するのではないかと考えています。
そのとき、tomcat の Java アプリで Runtime#exec するコマンドの実行権限が誰なのかが不明です。

root 権限でなければディレクトリに対して 
Runtime#exec の mkdir で失敗すると考えています。

実は、現在手元に Solaris は無く、
試験することはできません。

ただし、Solaris サーバー管理者から以下の情報を教えてもらいました。
Solaris サーバー管理者は 参考書を見ながら以下の設定をした模様です。

下に記載した情報から上記1、2、3が論理的に可能かどうか、
教えていただきたいと存じます。


==================================================================
1:init.d の tomcat自動起動シェル
Solaris10上に tomcat6 が存在。tomcat6 は自動起動。
init.d 配下のスタートシェルは

-rwxr--r-- root tomcatグループ  起動シェル 

となっています。

つまり、root のみが実行可能です。

-----------------------
2:Solaris 上の Unix ユーザー
root のほかに tomcat ユーザーを作っています。
tomcat ユーザーの所属するグループは
tomcat6 の実行ファイル→ jsvc を起動できる権限があります。

-----------------------
3:起動シェル内容
起動シェル設定は

JAVA_HOME=/usr/java
CATALINA_HOME=/var/opsrc/tomcat6
TOMCAT_USER=tomcat
TMP_DIR=/tmp
CATALINA_OPTS=
CLASSPATH=$JAVA_HOME/lib/tools.jar:$CATALINA_HOME/bin/commons-daemon.jar:$CATALINA_HOME/bin/bootstrap.jar
PIDFILE=/var/opsrc/run/tomcat6.pid
LOCKFILE=/var/opsrc/run/tomcat6.lock
JSVC=$CATALINA_HOME/bin/tomcat6
LOGFILE=/var/log/apache2/logs/tomcat6.log

start(){
  #
  # Start Tomcat
  #

  echo -n "Starting tomcat6: "
  $JSVC \
    -pidfile $PIDFILE \
    -user $TOMCAT_USER \
    -home $JAVA_HOME \
    -Dcatalina.home=$CATALINA_HOME \
    -Djava.io.tmpdir=$TMP_DIR \
    -outfile $LOGFILE \
    -errfile '&1' \
    $CATALINA_OPTS \
    -cp $CLASSPATH \
    org.apache.catalina.startup.Bootstrap
    #
    # To get a verbose JVM
    #-verbose \
    # To get a debug of jsvc.
    #-debug \
  ret=$?
  if [ $ret -eq 0 ]; then
    echo success
    touch $LOCKFILE
  else
    echo failure
  fi
  echo
}

となっています。

-------------
4:Solaris 起動後の ps -aef では tomcatプロセスは二つ存在して、
ひとつは root ユーザーが実行。
もうひとつは tomcat ユーザーが実行している。
(なぜ2つあるのか分からない)

ps -aef | grep tomcat

root   502   1   0 :時間 /var/opsrc/tomcat6 -pidfile /var/opsrc/run/tomcat6.pid -user tomcat
tomcat 503 502   0 :時間 /var/opsrc/tomcat6 -pidfile /var/opsrc/run/tomcat6.pid -user tomcat

-------------
5:上記 tomcat6.pid ファイルを ls すると、
所有者 root のみ 読み書き権限が付与されたファイルが生成されている。

=======================================




1

回答

80797

閲覧

1件の回答

評価

0

ディレクトリを作ったりchmodしたりするのは、全然問題ありません。ふつうTomcatはrootで実行されてるんじゃないかと思うけど…。

ただ、こういう環境に依存する処理をRuntime.exec()で実行するのは、あんまり良くないです。
例えばスクリプトファイルを作って、プロパティからその名前を読み込んで実行したり。
Windowsならbatで作っておくとか。

環境に依存する処理は、アプリ内に書かないほうがいいでしょう。


ところで、題名はもっとシンプルに、要点だけにするほうがいいですよ。
細かいことは本文を読めば分かるんだから。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。