Cả Debian và Ubuntu đều gửi một /etc/sudoers
tệp có chứa Defaults env_reset
các biến môi trường.
Tuy nhiên, hành vi của env_reset
đã được thay đổi từ việc không chạm vào $ HOME để đặt lại nó về nhà của người dùng mục tiêu.
Ubuntu đã quyết định vá phiên bản của họ sudo
để giữ hành vi trước đó:
https://bugs.launchpad.net/ubfox/+source/sudo/+orms/760140
Trong Ubuntu, để thiết lập lại $ biến môi trường HOME để người dùng mục tiêu, người ta phải thiết lập một trong hai Defaults always_set_home
hoặc Defaults set_home
(trong trường hợp này chỉ sudo -s
sẽ được cập nhật HOME) trong họ /etc/sudoers
.
Lỗi này tại trình theo dõi Ubuntu có thêm một số lý do về việc không đặt $ HOME trong sudo:
https://bugs.launchpad.net/ubfox/+source/sudo/+orms/1373495
Xem bình luận # 4:
Nếu HOME bị xóa, ví dụ: vim, bash, v.v., sẽ sử dụng /root/.vimrc, /root/.bashrc, v.v. chứ không phải là người dùng ~ / .vimrc, ~ / .bashrc, v.v. để chạy các máy khách X thông qua sudo, rất có thể chúng sẽ tìm sai vị trí cho các tệp cấu hình và có khả năng các máy khách X11 thậm chí không thể kết nối với máy chủ X11 nếu chúng nhắm vào tệp .Xmasterity sai.
Đó là một quyết định có ý thức của các nhà phát triển Ubuntu.
Câu trả lời này có nhiều chi tiết hơn về các tùy chọn sudoers như always_set_home
:
https://unix.stackexchange.com/a/91572/281844
Có một vấn đề thứ hai trong câu hỏi của bạn, đó là vấn đề sudo echo $HOME
vẫn hiển thị nhà của người dùng ngay cả trong Debian.
Điều đó xảy ra vì shell đang mở rộng $HOME
trước khi chạy sudo
lệnh.
Vậy đây:
$ sudo echo $HOME
Lần đầu tiên được mở rộng bởi shell thành:
$ sudo echo /home/user
Và sau đó sudo thực thi echo /home/user
như root ...
Điều này cũng sẽ chứng minh sự khác biệt:
$ sudo bash -c 'echo $HOME'
/root
Hoặc lấy một vỏ gốc đầy đủ và xem biến môi trường ở đó:
$ sudo -s
# echo $HOME
/root