Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

The Glassfish application server provides scripts to administer the application server and also start and stop them and I would like to restrict the root user from running this script. The reason is that some key developers forget to administer the server as the non-privileged user and if they restart the application server as the root user, then the application server has to run by the root user [*].

It isn't an option to avoid giving root access and the developers forget because they are so used to do this on their local machine. I would like the asadmin script to either change to run as the non privileged user or optionally display an error message each time the script is run by root.

Bash shell is used.

[*]: I've tried to fix the rights on files, but even though I've tracked down lots of files which root owns and chmod them, the application experience strange errors and I have to run as root again.

share|improve this question
up vote 12 down vote accepted

Similar to the other answers, but in the direction you wanted.

if [[ $EUID -eq 0 ]]; then
  echo "This script must NOT be run as root" 1>&2
  exit 1

Alternatively, you can use sudo within the script to force execution as the non-privileged user using the -u flag to specify the user to run as. I don't use Glassfish, but here's a proto-example pseudo script.


if [ $1 == "start" ]; then
  sudo -u nobody /usr/bin/glassfish

Hopefully you get the idea. Sorry I don't really know what the script looks like, or the name of the non-privileged user.

share|improve this answer

@Tshepang has the right idea. I don't know which is most portable, but here are other ways to detect whether the user is root:

id -u

Alternatively, you can simply force it to run as another user with the same parameters:

if [ "$UID" -ne 0 ]
    sudo -u appuser "$0" "${@-}"
share|improve this answer
This is backward. He wants root to not run this script. – bahamat Sep 8 '11 at 14:49
D'oh, forgot the sudo bit. Now it should do the job. – l0b0 Sep 9 '11 at 7:55

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.