[TriLUG] Odd Tomcat (or shell-scripting?) problem - regular user process creates root-owned files
Jeremy Portzer
jeremyp at pobox.com
Tue May 29 01:49:49 EDT 2007
Hey folks,
I'm encountering a strange problem related to file permissions with
Tomcat, the Java application server. Tomcat includes a procedure to
auto-rotate its logfiles, but when it does so, new log files are created
with root ownership, even though the java process runs as a normal user.
I'm trying to understand how this can be.
In the init scripts we use to start Tomcat, which are run as root, the
following is executed:
su - $tomcatuser -c "$BASEDIR/tomcat-startup.sh internal_start"
(this tomcat-startup.sh then goes through a number of other steps and
eventually launches a JVM, which runs the actual Tomcat application code.)
It is easy to confirm that this command is indeed executed, the "su"
command is executed, and the process is listed as running as the regular
user ("bbuser") in the "ps" listing. I have done this by putting 'echo'
commands in various places throughout the shell scripts to make sure the
flow control is moving exactly as I expect it.
The log files are all created by the Tomcat java application (not any of
the shell scripts), and are in a directory with normal setup as follows:
$ ls -ld tomcat/logs
drwxr-xr-x 3 bbuser bbuser 4096 May 29 01:24 tomcat/logs
BUT, some log files nevertheless appear with root ownership after
starting the process, such as:
-rw-r--r-- 1 root root 0 May 29 01:24
catalina.2007-05-29.log
These will continue to appear for each day, e.g. catalina.2007-05-30.log
will exist the next day (even if Tomcat isn't restarted). This seems to
rule out a mistake in my troubleshooting of the shell scripts.
Interestingly, Tomcat's standard output is then filled with Permission
Denied errors as it can't write to these files - since bbuser doesn't
have write permission - but yet it was the very process that
(apparently) created the files !?!
The Tomcat logger appears to be configured correctly (according to the
defaults for Tomcat 5.5.17, the version in use).
I realize this may be better directed at a Tomcat list, but I'm still
trying to understand the fundamental action from a Linux perspective...
what are the situations in which this could happen? The info page of
"su" states that it "runs a command ... with the real and effective user
id, group id, and supplemental groups of a given USER." How then, can
the java process, regardless of any bugs that may or may not exist
within Tomcat, EVER create a file with root ownership?
Some other sanity-checking:
The user in this case is a perfectly normal user with its own group.
From /etc/passwd:
bbuser:x:550:550:bbuser:/home/bbuser:/bin/bash
And "id" confirms there's nothing else odd with the group setup:
[bbuser at bbhost bbuser]$ id bbuser
uid=550(bbuser) gid=550(bbuser) groups=550(bbuser)
My test system is Red Hat Enterprise Linux 4.0 with Java JDK 1.5.0_04
but the problem is seen across a range of Linux and Java versions (and
possibly even on Solaris/sparc). The identical problem has also been
reported on another email list here, without resolution:
http://mail-archives.apache.org/mod_mbox/tomcat-users/200610.mbox/%3Cc119da2f0610041514m79bfbce5x91d71ede456769a7@mail.gmail.com%3E
Any further troubleshooting tips would be appreciated. Again, I just
don't understand how a regular user process could EVER create a
root-owned file, regardless of any bugs that may exist within Tomcat (or
the JDK for that matter).
Thanks,
Jeremy Portzer
jeremyp at pobox.com
More information about the TriLUG
mailing list