Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

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
add comment

2 Answers

up vote 11 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
fi

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.

#!/bin/bash

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

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
add comment

@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
$UID

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

if [ "$UID" -ne 0 ]
then
    sudo -u appuser "$0" "${@-}"
fi
share|improve this answer
1  
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
add comment

Your Answer

 
discard

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.