Khi tôi sử dụng bất kỳ lệnh nào với sudo thì các biến môi trường không có. Ví dụ: sau khi đặt HTTP_PROXY, lệnh wget
hoạt động tốt mà không cần sudo
. Tuy nhiên, nếu tôi gõ sudo wget
nó nói nó không thể bỏ qua cài đặt proxy.Làm thế nào để giữ biến môi trường khi sử dụng SUDO
Trả lời
Bí quyết là để thêm biến môi trường để sudoers
tập tin qua sudo visudo
lệnh và thêm những dòng này:
Defaults env_keep += "ftp_proxy http_proxy https_proxy no_proxy"
được lấy từ ArchLinux wiki.
Đối với Ubuntu 14, bạn cần phải xác định trong dòng riêng biệt vì nó sẽ trả về lỗi cho dòng đa biến:
Defaults env_keep += "http_proxy"
Defaults env_keep += "https_proxy"
Defaults env_keep += "HTTP_PROXY"
Defaults env_keep += "HTTPS_PROXY"
Điều này được cho là lựa chọn tốt nhất, để tránh rò rỉ thông tin và các lỗ hổng bảo mật. 'sudo -E' là cách chắc chắn để adhoc nhận được cùng một hiệu ứng cho một lần, mặc dù – sehe
Tôi gặp phải vấn đề của một quá trình là một trong những người gọi sudo (jhbuild) và tôi không thể nói nó vượt qua cờ -E để sudo, vì vậy đây là giải pháp của tôi. – jgomo3
Lưu ý rằng bạn không nên * chỉnh sửa trực tiếp 'etc/sudoers'. Thay vào đó, sử dụng lệnh 'visudo', cú pháp kiểm tra các chỉnh sửa của bạn trước khi ghi đè lên tập tin' sudoers'. Bằng cách đó, bạn không tự khóa mình nếu bạn mắc lỗi trong khi chỉnh sửa. – Henning
Trước tiên, bạn cần phải export HTTP_PROXY
. Thứ hai, bạn cần đọc kỹ số man sudo
và chú ý đến cờ -E
. Đây hoạt động:
$ export HTTP_PROXY=foof
$ sudo -E bash -c 'echo $HTTP_PROXY'
Dưới đây là trích dẫn từ trang người đàn ông:
-E, --preserve-env
Indicates to the security policy that the user wishes to reserve their
existing environment variables. The security policy may eturn an error
if the user does not have permission to preserve the environment.
tuyệt vời vấn đề duy nhất đó là sửa đổi một số tập tin cấu hình ví dụ pacman cho vòm để làm cho -E được thông qua –
Để cho phép -E (bảo vệ môi trường) cho wget, bạn cần phải chỉ định thẻ SETENV trên quy tắc sudo cho phép chạy wget - Ví dụ:
"-E" này không không hoạt động nếu biến là PATH hoặc PYTHONPATH. – apporc
Bạn cũng có thể kết hợp hai env_keep
tuyên bố trong câu trả lời Ahmed Aswani thành một tuyên bố duy nhất như này:
Defaults env_keep += "http_proxy https_proxy"
Bạn cũng nên xem xét quy định cụ thể env_keep
cho chỉ một lệnh duy nhất như thế này:
Defaults!/bin/[your_command] env_keep += "http_proxy https_proxy"
Đối với các biến riêng lẻ bạn muốn cung cấp trên cơ sở một lần, bạn có thể biến nó thành một phần của lệnh.
sudo http_proxy=$http_proxy wget "http://stackoverflow.com"
Tôi đã thử nghiệm câu trả lời này cho một 'gói' dưới một số myPath được thêm vào' PATH' trong tệp '.bashrc' (với câu lệnh' export'). Sau đó 'sudo PATH = $ PATH mà gói' tìm câu trả lời đúng, không giống' sudo mà gói'. Tuy nhiên, 'sudo PATH = $ PATH gói' không đi xa hơn' sudo package' (không tìm thấy tập tin). Mặt khác, khởi chạy một 'gói' đơn giản từ một trình bao được gọi với' sudo bash' duy trì đường dẫn mở rộng và cung cấp cho quyền 'sudo' gói (hai chim bồ câu với một viên đá). Vì vậy, phản ứng thực sự phụ thuộc vào các lệnh bạn đang khởi chạy – XavierStuvw
Độ phân giải PATH cho sudo là một vấn đề khác - nếu có ai tìm thấy bài đăng này để tìm kiếm vấn đề đó, tôi khuyên bạn nên xem http://unix.stackexchange.com/questions/83191/how-to -make-sudo-preserve-path – jpj
- 1. Làm thế nào để sử dụng các biến môi trường Windows trong kịch bản Vim?
- 2. Làm thế nào để sử dụng các biến Jenkins Môi trường trong kịch bản python
- 3. Làm thế nào để thiết lập các biến môi trường bằng cách sử dụng Fabric
- 4. khi sử dụng sudo ulimit
- 5. Node.js mãi mãi với môi trường biến
- 6. Làm cách nào để sử dụng các biến môi trường trong tệp .classpath của Eclipse?
- 7. Làm thế nào để biết môi trường mã nào chạy?
- 8. Biến môi trường đơn điệu
- 9. Lấy các biến môi trường sử dụng mã C
- 10. Sử dụng các biến môi trường trong Monodevelop với MonoTouch
- 11. Tôi có thể giữ thông tin đăng nhập git trong các biến môi trường không?
- 12. Sử dụng biến môi trường trong nhiệm vụ Rake
- 13. Bundler biết môi trường nào để sử dụng?
- 14. Biến môi trường Javascript
- 15. Biến môi trường Ruby
- 16. Biến môi trường được sử dụng trong Jenkins bằng Windows Batch Command như thế nào?
- 17. Làm thế nào để thiết lập một biến môi trường trong Java bằng cách sử dụng exec?
- 18. Làm thế nào để sử dụng một biến môi trường bên trong một chuỗi trích dẫn trong Bash
- 19. Sử dụng biến môi trường cho tệp .config trong .NET
- 20. Ghi đè biến môi trường khi chạy trên Jenkins
- 21. Làm thế nào để sử dụng TDD trong môi trường không phải là "Thử nghiệm"
- 22. Làm thế nào để sử dụng biến setEnv trong apache?
- 23. Làm thế nào để tạo một biến môi trường mới trong UNIX ....?
- 24. Biến môi trường để kiểm soát java.io.tmpdir?
- 25. UNIX, nhận biến môi trường
- 26. Làm thế nào để mô phỏng môi trường IE8?
- 27. Làm thế nào để thiết lập một biến môi trường trong vỏ emacs (eshell)?
- 28. Tải biến môi trường trước khi thực hiện
- 29. cách đặt biến môi trường cho người dùng root
- 30. Sử dụng PIP trong một môi trường ảo, làm thế nào để cài đặt MySQL-python
http://superuser.com/questions/232231/how-do-i-make-sudo-preserve-my-environment-variables –
liên quan: [Tại sao là các biến PATH khác nhau khi chạy qua sudo và su ?] (http://unix.stackexchange.com/q/8646/21471) tại Unix SE – kenorb