JAVA_HOME không được đặt trong tập lệnh khi chạy bằng sudo


19

Tôi đang cố chạy tập lệnh cài đặt yêu cầu java được cài đặt và JAVA_HOMEbiến môi trường được đặt.

Tôi đã thiết lập JAVA_HOMEtrong /etc/profilevà cũng trong một file tôi đã gọi java.shtrong /etc/profile.d. Tôi có thể echo $JAVA_HOMEvà nhận được phản hồi chính xác và thậm chí tôi có thể sudo echo $JAVA_HOMEnhận được phản hồi chính xác.

Trong khi install.shtôi đang cố chạy, tôi đã chèn một echo $JAVA_HOME. Khi tôi chạy tập lệnh này mà không sudothấy thư mục java; Khi tôi chạy tập lệnh với sudonó là trống.

Có ý kiến ​​giải thích tại sao điều này lại xảy ra không?

Tôi đang chạy CentOS.


Tôi cũng đã gặp vấn đề này khi chạy Ubuntu 14.04, cả hai câu trả lời được đề xuất đều có hiệu quả với tôi
laconbass

Câu trả lời:


28

Vì lý do bảo mật, sudocó thể xóa các biến môi trường, đó là lý do tại sao có thể không chọn $ JAVA_HOME. Nhìn vào /etc/sudoerstập tin của bạn cho env_reset.

Từ man sudoers:

env_reset   If set, sudo will reset the environment to only contain the following variables: HOME, LOGNAME, PATH, SHELL, TERM, and USER (in addi-
           tion to the SUDO_* variables).  Of these, only TERM is copied unaltered from the old environment.  The other variables are set to
           default values (possibly modified by the value of the set_logname option).  If sudo was compiled with the SECURE_PATH option, its value
           will be used for the PATH environment variable.  Other variables may be preserved with the env_keep option.

env_keep    Environment variables to be preserved in the user's environment when the env_reset option is in effect.  This allows fine-grained con-
           trol over the environment sudo-spawned processes will receive.  The argument may be a double-quoted, space-separated list or a single
           value without double-quotes.  The list can be replaced, added to, deleted from, or disabled by using the =, +=, -=, and ! operators
           respectively.  This list has no default members.

Vì vậy, nếu bạn muốn nó giữ JAVA_HOME, hãy thêm nó vào env_keep:

Defaults   env_keep += "JAVA_HOME"

Ngoài ra , thiết lập JAVA_HOMEtrong root ~/.bash_profile.


2
Vâng, chính là nó Không có ý tưởng người ta có thể làm điều đó. Cảm ơn!
Josh

20

Chạy sudo với tùy chọn -E (bảo vệ môi trường) (xem tệp man) hoặc đặt JAVA_HOME trong tập lệnh install.sh.


Tùy chọn -E không khả dụng trong CentOS.
Zubin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.