Sudo không thể tìm thấy nhị phân [trùng lặp]


2

Câu hỏi này đã có câu trả lời ở đây:

Tôi có một vấn đề.

Gần đây tôi đã cài đặt nodejs .

$ ls -la /opt
...
lrwxrwxrwx  1 root root   11 2012-07-25 13:48 node -> node-0.6.3/
drwxr-xr-x  6 root root 4096 2012-07-25 13:48 node-0.6.3
...

vì vậy, các nhị phân nằm trong /opt/node/bin:

$ ls -la /opt/node/bin
...
lrwxrwxrwx 1 root root      38 2012-06-20 11:44 npm -> ../lib/node_modules/npm/bin/npm-cli.js
...

Bạn có thể thấy, npm lanhung. Để làm cho nó dễ sử dụng hơn từ một dòng lệnh tôi đã sửa $PATH phía trong .bashrc kịch bản:

HOME=$HOME:...:/opt/node/bin

và như vậy với root .bashrc:

# which npm
/opt/node/bin/npm

Nhưng nếu tôi chạy npm với sudo, npm không tìm thấy:

$ sudo which npm
$ sudo npm -g install uglify-js
sudo: npm: command not found

Vậy, tại sao nó lại xảy ra? Làm thế nào để tôi đạt được những gì tôi muốn?

Cảm ơn.

CẬP NHẬT : Theo lời khuyên của Paul, tôi đã thêm

Defaults  env_keep = PATH

để /etc/sudoers

nhưng vấn đề vẫn tồn tại

$ echo $PATH
... :/opt/node/bin
$ sudo su -
#
# sudo -V
...
Environment variables to preserve:
    XAUTHORIZATION
    XAUTHORITY
    TZ
    PS2
    PS1
    PATH
...

Vì thế, Defaults Chỉ thị đã thực hiện công việc của mình, nhưng tôi đang nhận được cùng một sudo: npm: command not found


Vì vậy, bạn đã đánh dấu một câu trả lời là được chấp nhận, nhưng nó không khắc phục vấn đề của bạn?
T.W.R. Cole

Nó đã làm. Tại sao bạn nghĩ rằng nó đã không?
Nemoden

Câu trả lời:


6

sudo gọi một shell mới và các biến môi trường được truyền cho shell mới được điều chỉnh bởi tệp '/ etc / sudoers'. Nếu bạn muốn con đường của bạn được thông qua, thì bạn cần thêm

Defaults env_keep = "PATH"

thành '/ etc / sudoers' và nó sẽ giữ biến môi trường PATH trong vỏ sudo

Nếu điều này không hoạt động, có thể là đường dẫn đang bị ghi đè bởi secure_path chỉ thị (đôi khi một Secure_path được biên dịch thành nhị phân). Nếu vậy, hãy thử thêm lệnh này, thay thế tên nhóm bằng một nhóm bạn là thành viên của:

exempt_group = "groupname"

Hoặc ghi đè Secure_path bằng chính trang của bạn, ví dụ:

secure_path = "/bin:/usr/bin:/sbin:/usr/sbin:/opt/node/bin"

Cảm ơn bạn đã trả lời. Nó dường như là chìa khóa, nhưng nó không tạo ra sự khác biệt. Xem ở trên phần cập nhật câu hỏi của tôi.
Nemoden

Bạn có thể thêm một sudo env | grep PATH cho câu hỏi?
Paul

@Nemoden chỉ là một ping khi tôi rời khỏi bình luận trước đó
Paul

Đường dẫn đến / opt / node / bin không có trong sudo env | grep PATH: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Nemoden

@Nemoden Trả lời cập nhật
Paul

4

Tôi đã gặp vấn đề này - & gt; của tôi là do npm đang được cài đặt trong /use/local/bin.

Và tôi đã có dòng này trong /etc/sudoers tập tin:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

Gõ mà npm là phần khai sáng :)

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.