请帮助我从 user2 帐户运行以下命令。我不明白这是什么问题。
[user2@localhost bin]# sudo -u user1 /opt/Tomcat/bin/shutdown.sh
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program
[user2@localhost bin]$ echo $JAVA_HOME
/opt/Java_7
sudoers 文件中 user2 的条目如下:
%user2 ALL=(user1) NOPASSWD:/opt/Tomcat/bin/startup.sh,/opt/Tomcat/bin/shutdown.sh
但是环境变量已设置。我使用 root 用户运行相同的脚本,并且运行正常。
[root@localhost bin]# /opt/Tomcat/bin/shutdown.sh
Using CATALINA_BASE: /opt/Tomcat/
Using CATALINA_HOME: /opt/Tomcat/
Using CATALINA_TMPDIR: /opt/Tomcat//temp
Using JRE_HOME: /opt/Java_7
Using CLASSPATH: /opt/Tomcat//bin/bootstrap.jar:/opt/Tomcat//bin/tomcat-juli.jar
我进一步检查了一下。两个用户都设置了JAVA_HOME。
[root@localhost bin]# pwd
/opt/Tomcat/bin
[root@localhost bin]# echo $JAVA_HOME
/opt/Java_7
[root@localhost bin]# su user1
[user1@localhost bin]$ echo $JAVA_HOME
/opt/Java_7
[user1@localhost bin]$ exit
[root@localhost bin]# su user2
[user2@localhost bin]$ echo $JAVA_HOME
/opt/Java_7
[user2@localhost bin]$ ps aux | grep java
user1 47066 0.1 10.9 1004608 77364 pts/2 Sl Jun12 0:15 /opt/Java_7/bin/java -Djava.util.logging.config.file=/opt/Tomcat//conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/opt/Tomcat//endorsed -classpath /opt/Tomcat//bin/bootstrap.jar:/opt/Tomcat//bin/tomcat-juli.jar -Dcatalina.base=/opt/Tomcat/ -Dcatalina.home=/opt/Tomcat/ -Djava.io.tmpdir=/opt/Tomcat//temp org.apache.catalina.startup.Bootstrap start
user2 49318 0.0 0.1 103240 840 pts/2 S+ 02:11 0:00 grep java
[user2@localhost bin]$ sudo -u user1 /opt/Tomcat/bin/shutdown.sh
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program
答案1
为了在使用 sudo 时保留 JAVA_HOME 环境变量,您应该将其添加Defaults env_keep +="JAVA_HOME"
到 sudoers 文件中。
答案2
如果使用sudo -u user1
,则 user2 的 JAVA_HOME 路径和 root 的路径都不会被使用,您需要设置 user1 的 JAVA_HOME 路径。从表面上看,您没有设置 user1 的 JAVA_HOME 路径