Cách đặt đường dẫn cho lệnh sudo


37

Nếu tôi phát hành

sudo my-command

Linux tìm kiếm điều đó my-commandnhư thế nào?

Các my-commandlà trong PATH của tôi. Tôi có thể gọi nó mà không có bất kỳ vấn đề. Tuy nhiên, khi tôi gọi nó với sudo, tôi sẽ nhận được command not found. Thú vị, không bao giờ trải nghiệm điều này trước đây. Làm thế nào để khắc phục?

EDIT: Đó là "có thể xảy ra trùng lặp" 's câu trả lời được lựa chọn là sai, tốt, ít nhất là không cho điểm. Câu trả lời này, từ terdon, là câu trả lời đúng.

Câu trả lời:


48

Điều này thường được thiết lập bởi các secure_pathtùy chọn trong /etc/sudoers. Từ man sudoers:

 secure_path   Path used for every command run from sudo.  If you don't
               trust the people running sudo to have a sane PATH environ‐
               ment variable you may want to use this.  Another use is if
               you want to have the “root path” be separate from the “user
               path”.  Users in the group specified by the exempt_group
               option are not affected by secure_path.  This option is not
               set by default.

Để chạy các lệnh không có trong mặc định $PATH, bạn có thể

  1. Sử dụng đường dẫn đầy đủ : sudo ~/bin/my-command; hoặc là

  2. Thêm thư mục chứa lệnh vào secure_path. Chạy sudo visudovà chỉnh sửa đường dẫn an toàn:

    Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/youruser/bin/"
    

    Lưu tệp và lần sau khi bạn chạy sudo, thư mục ~/binsẽ nằm trong đó $PATH.


2
Hoặc chỉ nhận xét toàn bộ dây chuyền nếu đây không phải là máy sản xuất và chúng tôi không quan tâm. Sau đó, nó sẽ sử dụng PATH của người dùng. Nó nói rằng nó không được đặt theo mặc định, nhưng điều đó có thể không phải lúc nào cũng đúng ...
Nagev

2

Đây là những gì tôi đã sử dụng cho một cách giải quyết:

sudo cp $(which my-command) /usr/bin
...

Các whichlệnh được thực thi trong một subshell đó là không phải root, vì vậy nó có thể tìm thấy my-command, sau đó, sudo bản thực thi vào một con đường mà rootngười dùng truy cập có thể. Không tốt cho bảo mật, nhưng tôi vẫn chạy được một hình ảnh docker đã bị phá hủy ngay sau khi lệnh được chạy.

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.