Tại sao tôi không thể sudo một số lệnh? (ví dụ: vim)


16

Tôi có quyền truy cập sudo trên máy chủ của bạn bè, chạy centos-6.3, nhưng khi tôi cố chạy một số lệnh như sudo vim /var/www/html/index.htmltôi gặp lỗi sudo: vim: command not found, tuy nhiên, tôi có thể chạy sudo suvà sau đó vim /var/www/html/index.htmlnó hoạt động như mong đợi.

echo $PATHsudo echo $PATHcả hai năng suất:

/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jared/bin

sudo which vim tuy nhiên sản lượng:

which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)

Tôi đã thử thêm

export PATH=$PATH:/usr/local/bin

để /root/.bashrckhắc phục sự cố khi sử dụng sudo sunhưng không chỉ sudo <command>.

Làm thế nào để sudo <command>làm việc?


Bạn đã thêm người dùng đó vào sudoers trong Centos OS chưa?
AAlvz

Câu trả lời:


18

Khi chạy sudo, nhiều hệ thống được cấu hình để xóa môi trường của tất cả các giá trị không có trong danh sách trắng và để đặt lại biến PATH thành giá trị được khử trùng.

Bạn sẽ tìm thấy trước đây Defaults env_resetvà một số Defaults env_keep += "SOME_VARIABLE_NAME"trong /etc/sudoers. Ghi PATHđè "an toàn" sau được chỉ định là Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin- xóa dòng này để xóa hành vi này khi sudoing.


Làm thế nào biến môi trường được xử lý được in khi bạn chạy  sudo -Vnhư root.


Nếu bạn không muốn thoát khỏi các mặc định này, bạn luôn có thể chỉ định các chương trình sử dụng đường dẫn đầy đủ của chúng ( sudo /usr/local/bin/vim).

Ngoài ra, bạn có thể cho phép tài khoản của mình SETENVvào sudoerstệp, ví dụ:

%wheel  ALL=(ALL)       SETENV: ALL

Điều này cho phép bạn ghi đè mặc định môi trường như thế này: sudo PATH=$PATH which vimvì biến được đặt trong vỏ của bạn trước khi lệnh được thực thi, dẫn đến một kế thừa PATH( /sbinmặc dù có thể sẽ không bao gồm vv).


Cảm ơn. Tôi sẽ sử dụng công việc của Dennis cho đến khi tôi nhận được chủ sở hữu để thừa nhận tệp sudoers.
JaredMcAteer

6
sudo echo $PATH

không làm những gì bạn nghĩ. $PATHđược thay thế bởi trình bao (của bạn) trước khi thực hiện lệnh.

Để thực hiện hành vi mong muốn, bạn có thể sử dụng sudo -i.

Từ người đàn ông sudo :

-tôi ra lệnh]

Tùy chọn -i ( mô phỏng đăng nhập ban đầu ) chạy shell được chỉ định trong mục nhập passwd (5) của người dùng đích dưới dạng shell đăng nhập. Điều này có nghĩa là các tệp tài nguyên dành riêng cho đăng nhập như .profilehoặc .loginsẽ được đọc bởi trình bao. Nếu một lệnh được chỉ định, nó được chuyển đến shell để thực thi.


1
Đây là một cách giải quyết phù hợp cho đến khi tôi có thể khiến chủ sở hữu điều chỉnh tệp sudoers.
JaredMcAteer

1

Làm thế nào để sudo <command>làm việc?

Cho đến khi bạn giải quyết vấn đề với các đường dẫn, hãy sử dụng tên đường dẫn đầy đủ

  sudo /usr/local/bin/vim /var/www/html/index.html

5
Tôi sẽ không đánh giá thấp bạn, nhưng tôi không bao giờ thích làm việc xung quanh các vấn đề hơn là đi thẳng vào vấn đề tìm ra chúng và sửa chúng.
Nicole Hamilton
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.