Làm thế nào để cho phép người dùng bảo vệ môi trường với sudo?


17

Tôi đang gặp phải lỗi sau khi cố gắng cho phép một số biến môi trường chuyển qua môi trường mới khi chạy sudo:

sudo: sorry, you are not allowed to preserve the environment

Một số thông tin có thể hữu ích để gỡ lỗi:

[deploy@worker1 ~]$ sudo -l
    Matching Defaults entries for deploy on this host:
    requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET
    XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin, env_keep+="GIT_WORK_TREE GIT_DIR", !requiretty

User deploy may run the following commands on this host:
    (ALL) NOPASSWD: /usr/bin/git, (ALL) /etc/init.d/httpd*, (ALL) /sbin/service, (ALL) /usr/bin/make, (ALL) /bin/echo

Ví dụ chạy của tôi:

[deploy@worker1 ~]$ export GIT_DIR="/home/ashinn/testing"
[deploy@worker1 ~]$ sudo -E sh -c 'echo "$GIT_DIR"'
sudo: sorry, you are not allowed to preserve the environment

Tập tin sudoers.d của tôi cho cấu hình cụ thể này:

Defaults:deploy         env_keep += "GIT_WORK_TREE GIT_DIR", !requiretty
deploy  ALL=(ALL)       NOPASSWD: /usr/bin/git, /etc/init.d/httpd*, /sbin/service, /usr/bin/make, /bin/echo

Tôi cũng đã thử thêm !env_resetvào Mặc định và nó vẫn không thành công với cùng một lỗi. Tôi cảm thấy mình có thể đang thiếu thứ gì đó rõ ràng và cần một đôi mắt thứ hai. Tôi đang thiếu gì ở đây?


1
Tôi tin rằng khoảng 93% trong số chúng tôi hiểu điểm của câu hỏi của bạn, nhưng lệnh ví dụ của bạn không tốt lắm.  , nếu nó không hoàn toàn thất bại, sẽ hiển thị giá trị trước của , bởi vì shell mở rộng biến trong dòng lệnh trước đó thậm chí được gọi. Kiểm tra tốt hơn là hay hay , nơi chúng tôi đang thực sự nhìn vào môi trường của quá trình đang chạy đặc quyền. sudo (option(s)) echo $GIT_DIRsudo$GIT_DIRsudosudo printenv GIT_DIRsudo env | grep GIT_DIRsudo sh -c 'echo "$GIT_DIR"'
G-Man nói 'Phục hồi Monica'

Câu trả lời:


27

Bạn có thể sử dụng SETENV"Thẻ" trong sudoerstệp của mình , như trong:

deploy  ALL=(ALL)       SETENV: /usr/bin/git, /etc/init.d/httpd*, /sbin/service, /usr/bin/make, /bin/echo

Hoặc, để kết hợp nó với NOPASSWD:

deploy  ALL=(ALL)       NOPASSWD:SETENV: /usr/bin/git, /etc/init.d/httpd*, /sbin/service, /usr/bin/make, /bin/echo

Đoạn trích có liên quan từ người đàn ông sudoers:

SETENV và NOSETENV

Các thẻ này ghi đè giá trị của tùy chọn setenv trên cơ sở mỗi lệnh. Lưu ý rằng nếu SETENV đã được đặt cho một lệnh, người dùng có thể vô hiệu hóa tùy chọn env_reset từ dòng lệnh thông qua tùy chọn -E. Thêm vào đó, các biến môi trường thiết lập trên dòng lệnh không phải chịu những hạn chế áp đặt bởi env_check, env_deletehoặc env_keep. Như vậy, chỉ những người dùng đáng tin cậy mới được phép đặt biến theo cách này. Nếu lệnh khớp là TẤT CẢ, thẻ SETENV được ngụ ý cho lệnh đó; mặc định này có thể bị ghi đè bằng cách sử dụng thẻ NOSETENV.


1

Đừng chỉ định -Etùy chọn. Sử dụng -Ebạn, nói rằng tất cả các biến môi trường cho người dùng deploynên được giữ nguyên, không chỉGIT_DIR

Chạy sudo echo $GIT_DIRnên làm việc vì bạn đã thêm GIT_DIRvào env_keepdanh sách

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.