Tóm lại : làm thế nào để sudo không tuôn ra PATH mọi lúc?
Tôi có một số trang web được triển khai trên máy chủ của mình (kiểm tra Debian) được viết bằng Ruby on Rails. Tôi sử dụng Mongrel + Nginx để lưu trữ chúng, nhưng có một vấn đề xuất hiện khi tôi cần khởi động lại Mongrel (ví dụ: sau khi thực hiện một số thay đổi).
Tất cả các trang web đều được kiểm tra trong VCS (git, nhưng điều đó không quan trọng) và có chủ sở hữu và nhóm được đặt cho người dùng của tôi, trong khi Mongrel chạy theo, người dùng mongrel bị hạn chế nghiêm trọng về quyền của nó. Vì vậy, Mongrel phải được bắt đầu dưới quyền root (nó có thể tự động thay đổi UID) hoặc mongrel.
Để quản lý mongrel tôi sử dụng gem mongrel_cluster vì nó cho phép bắt đầu hoặc dừng bất kỳ số lượng máy chủ Mongrel nào chỉ bằng một lệnh. Nhưng nó cần thư mục /var/lib/gems/1.8/bin để ở trong PATH: điều này là không đủ để bắt đầu nó với đường dẫn tuyệt đối .
Sửa đổi PATH trong root .bashrc không thay đổi gì, điều chỉnh enudo_reset của sudo và env_keep cũng không.
Vì vậy, câu hỏi: làm thế nào để thêm một thư mục vào PATH hoặc giữ PATH của người dùng trong sudo?
Cập nhật: một số ví dụ
$ env | grep PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/var/lib/gems/1.8/bin
$ sudo cat /etc/sudoers | egrep -v '^$|^#'
Defaults env_keep = "PATH"
root ALL=(ALL) ALL
%sudo ALL=NOPASSWD: ALL
$ sudo env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Ngoài ra tôi có thể nói rằng nó cũng hoạt động chính xác theo cách này trong Debian ổn định (lenny).