ปัญหาเกี่ยวกับตัวแปรสภาพแวดล้อม


2

โปรดช่วยฉันเรียกใช้คำสั่งด้านล่างจากบัญชีผู้ใช้ 2 ฉันไม่สามารถทราบได้ว่ามีปัญหาอะไรกับสิ่งนี้

[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

รายการสำหรับ user2 ในไฟล์ sudoers มีดังนี้:

%user2 ALL=(user1) NOPASSWD:/opt/Tomcat/bin/startup.sh,/opt/Tomcat/bin/shutdown.sh

อย่างไรก็ตามมีการตั้งค่าตัวแปรสภาพแวดล้อม ฉันรันสคริปต์เดียวกันกับผู้ใช้รูทและทำงานได้ดี

[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

การสนทนานั้นควรจะถูกจัดขึ้นที่นี่ โปรดตรวจสอบว่าคุณสามารถเรียกใช้เมื่อคุณเข้าสู่ระบบในฐานะผู้ใช้อื่นหรือไม่เพียงเพื่อค้นหาปัญหา และลองใช้ sudo -u user1 เพื่อสะท้อนตัวแปรสภาพแวดล้อมของคุณดูว่ามันแตกต่างจากตอนที่คุณเข้าสู่ระบบในฐานะผู้ใช้รายนั้นหรือไม่
private_meta

ใช่. ฉันสามารถเรียกใช้มันเมื่อฉันล็อกอินเป็น user1 หลังจากเพิ่มคำสั่งในไฟล์ sudoers สำหรับการสะท้อนตัวแปรฉันสามารถ echo $ JAVA_HOME และให้ผลลัพธ์ที่คาดหวัง
newbie17

คำตอบ:


3

เพื่อให้ตัวแปรสภาพแวดล้อม JAVA_HOME เมื่อใช้ sudo คุณควรเพิ่มDefaults env_keep +="JAVA_HOME"ไฟล์ sudoers ของคุณ


1

หากคุณใช้sudo -u user1ดังนั้นจะไม่ใช้เส้นทาง JAVA_HOME ของผู้ใช้ 2 หรือเส้นทางของรูทคุณจะต้องตั้งค่าเส้นทาง JAVA_HOME ของผู้ใช้ 1 จากลักษณะที่ปรากฏคุณไม่ได้ตั้งค่าพา ธ JAVA_HOME ของ user1


ฉันเช็คแล้ว. JAVA_HOME ถูกตั้งค่าสำหรับทั้งผู้ใช้
newbie17

ข้อผิดพลาดยังคงมีอยู่เมื่อคุณใช้ "sudo -u user1 -E" หรือไม่ นอกจากนี้คุณสามารถลงชื่อเข้าใช้ด้วยชื่อผู้ใช้ 1 และเรียกใช้คำสั่งโดยไม่ใช้ sudo ได้หรือไม่?
private_meta

เมื่อฉันเรียกใช้คำสั่งด้วยข้อความ-Eจะแจ้งว่า: sudo: sorry, you are not allowed to preserve the environment. และคำสั่งนี้ควรเรียกใช้เป็น sudo เพราะเราจำเป็นต้องแจกจ่ายผู้ใช้เหล่านี้ไปยังทีมที่แตกต่างกัน (ถ้ามันใช้งานได้) เพื่อให้พวกเขามีข้อ จำกัด
newbie17
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.