Tại sao $ HOME không thay đổi nếu tôi sử dụng sudo?


15

Tôi mong đợi tùy chọn -H sẽ cung cấp cho tôi môi trường người dùng mục tiêu.

nbest @ Geo: ~ $ sudo -H -u tanum echo $ HOME
/ nhà / nbest
nbest @ Geo: ~ $ sudo -u tanum echo $ HOME
/ nhà / nbest
nbest @ Geo: ~ $ sudo -i -u tanum echo $ HOME
/ nhà / nbest
nbest @ Geo: ~ $ sudo -H -i -u tanum echo $ HOME
/ nhà / nbest

Điều này sẽ cho phép tôi nói:

sudo -u tanum ls ~

và có được danh sách thư mục nhà của người dùng mục tiêu. Không phải vậy. Đây có phải là do env_resetmặc định trong sudoers?

Nếu vậy -H có ảnh hưởng gì không? Cách an toàn nhất để ghi đè hành vi này là gì?

Nếu không tác dụng dự định của -H là gì?

Hãy đặt tôi thẳng.

Câu trả lời:


16

$HOME~được mở rộng bởi shell của bạn , chúng không được giải thích bởi echo.

Nói cách khác, echokhông xem $HOMEnhư là một đối số. Nó thực sự nhìn thấy /home/nbest. Do đó, các lệnh sau hoàn toàn giống nhau (trong trường hợp của bạn):

nbest@geo:~$ sudo -H -u tanum echo $HOME
nbest@geo:~$ sudo -H -u tanum echo /home/nbest

Bất cứ điều gì bạn cố gắng ( -H,, -i...) bạn sẽ không bao giờ có được hành vi mong muốn. Bởi vì $HOMEđược thay thế bởi vỏ của bạn và vỏ của bạn chạy như người dùng của bạn. sudokhông ảnh hưởng đến vỏ của bạn theo bất kỳ cách nào.


Để khắc phục 'sự cố' này (thực sự là một tính năng), bạn có thể bắt đầu một mạng con mới:

nbest@geo:~$ sudo -H -u tanum sh -c 'echo $HOME'

(Lưu ý rằng tôi đang sử dụng dấu ngoặc đơn để tránh mở rộng.) Bằng cách này, trình bao mới shsẽ chạy khi người dùng tanum và in thư mục chính của anh ta.


Một cách khác là sử dụng ~username, được mở rộng đến nhà của người dùng đó, mà không cần sử dụng sudohoặc su. Thử:

nbest@geo:~$ echo ~tanum

1
Tất nhiên. Thật xấu hổ! sudo do what I mean
Neil hay nhất

1
Điều này không làm việc cho tôi. ví dụ: sudo -H -u buildbot bash -c "echo $HOME"cung cấp cho tôi /home/ubuntu, người dùng mặc định trên một số hình ảnh Ubuntu.
Cerin

@Cerin sử dụng dấu ngoặc đơn để ngăn chặn sự mở rộng:sh -c 'echo $HOME'
Andrea Corbellini

3

Vui lòng thử:

sudo -H -u tanum bash -c 'echo $HOME'
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.