Tại sao tiếng vang gốc sudo -u `whoami` không trở lại root?


11

Làm thế nào để bạn sử dụng sudo để chạy một lệnh như người dùng root thực sự trên Ubuntu? Ban đầu tôi nghĩ đây là hành vi mặc định của sudo, cho đến khi tôi chạy:

myuser@localhost:~$ sudo echo `whoami`
myuser

myuser@localhost:~$ sudo -u root echo `whoami`
myuser

Tuy nhiên, đây là loại hành vi tôi muốn, nhưng chỉ trong một dòng duy nhất:

myuser@localhost:~$ sudo su -
root@localhost:~# echo `whoami`
root

11
Tại sao tiếng vang whoami? Chỉ cần nói sudo whoami .. trả về root
Neo

Câu trả lời:


26

Trong thực tế nó không chạy chúng như là người chủ. Nhưng, điều xảy ra với bạn là các dấu tích phía sau đang được đánh giá trước khi sudo chạy, vì chúng cần thiết để đánh giá lệnh. Trực tiếp hơn, tại sao không chỉ này:

sudo whoami

Đánh dấu whoamivào phía sau của bạn thực sự được đánh giá trong một mạng con như người dùng hiện tại, đó là lý do tại sao bạn thấy những gì bạn làm.


2
Cái này sai. sudo chạy với quyền root nhưng không phải là root.
Manfred Moser

@Moser, vậy tại sao lệnh của anh ấy lại in "root"?
Cerin

4
@ManfredMoser: Nó chạy với UID của 0(zero), đó chính xác những gì mọi người gọi là "root". (Bạn sẽ đúng nếu sudochỉ mở rộng khả năng của mình mà không thực sự thay đổi UID. Nhưng đó không phải là điều nó làm.)
user1686

1
M. Moser có thể đã đưa ra quan điểm về set-UID chỉ thay đổi ID người dùng hiệu quả của quy trình, yêu cầu chính quá trình đó phải tiến hành thay đổi ID người dùng thực, như thực tế sudo. Nhưng từ việc đọc câu trả lời xyr, điều này dường như không thực sự xảy ra.
JdeBP

7

Subshell ( whoami) được thực thi đầu tiên, như bạn và kết quả ( myuser) được đặt vào sudolệnh; những gì sudonhìn thấy là echo myuser. Hãy nghĩ về nó như một lối tắt cho:

tmpvar=`whoami`
sudo echo "$tmpvar"

1

Dường như có một số phỏng đoán đang diễn ra ở đây

Các backticks rõ ràng đang làm những gì người khác giải thích, mở rộng whoamitrước khi gọi 'sudo' và để backticks trở lại 'root', như mong đợi.

Nhưng thật hữu ích khi hiểu những gì đang thực sự xảy ra với sudo (8). Vì vậy, tôi thực sự nhìn vào trang người đàn ông!

"Uid và gid thực sự và hiệu quả được đặt để khớp với những người dùng mục tiêu."

Vì vậy, có vẻ như hành vi được quan sát không liên quan gì đến sự khác biệt giữa id người dùng thực và hiệu quả.

Nó cũng mang tính minh họa để làm "sudo printenv" và so sánh với chỉ "printenv", điều này thực sự làm tôi ngạc nhiên một chút. Nó cho thấy rằng [i] một số [/ i] đã xuất có sẵn và một số biến khác thì không: nó báo cáo HOME, PATH, PS1, SHELL, TERM và EDITOR của người dùng ENV. Điều đó có vẻ hơi kỳ lạ, vì nó có thể khiến các chương trình hoạt động khác với chúng như là người dùng ban đầu hoặc là root.


0

sudo cho phép bạn chạy bất kỳ lệnh nào với quyền root, nhưng không phải là người dùng root. Lý do điều này hữu ích là với thiết lập này, nhiều người có thể có quyền root nhưng tất cả việc đăng nhập và vẫn cho biết ai đã thực hiện các thay đổi.

Thiết lập này tốt hơn so với chia sẻ mật khẩu gốc. Do đó, nó đã thay thế việc có người dùng root trên nhiều bản phân phối bao gồm Ubuntu.

sudo su mặt khác làm cho bạn trở thành người dùng root và do đó không thực sự được sử dụng.

Sự khác biệt này cũng giải thích hành vi quan sát (chính xác) của bạn.


6
Không. Điều gì giải thích hành vi là một vấn đề rất đơn giản về cách thay thế lệnh trong shell hoạt động. Không có gì để làm với các đặc quyền.
JdeBP

-2

Sudo tạm thời cấp cho bạn bất cứ ai (cho bạn được phép sudo ở vị trí đầu tiên) đặc quyền cấp gốc.

Để được root, bạn phải đăng nhập với quyền root bị chặn trong Ubuntu theo mặc định.

Bạn cần cẩn thận với điều này, sudo không phải là root. Nếu bạn muốn cho thấy Fred đang thực hiện một cái gì đó là sudo, hãy che3d các biến môi trường SUDO, SUDO_COMMAND có thể hữu ích nhất.


Root bị chặn trong Ubuntu? Bạn có chắc chắn về điều đó không? Tôi biết điều đó không được khuyến khích, nhưng tôi nghĩ họ chỉ gây khó khăn hơn cho người mới bằng cách thực sự đặt mật khẩu tối nghĩa bằng UUID, có thể thay đổi bằng các phương pháp thông thường.
Marty Fried
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.