Sự khác biệt giữa đăng nhập như người dùng và thay đổi người dùng bằng su qua root là gì?


17

Khi bạn có một máy chủ nào đó, bạn có thể truy cập nó, ví dụ, ssh user1@ipvà bạn cũng có thể thực hiện ssh root@ipđể đi đến người dùng root của mình với su privateeleges và sau đó đi đến su user1. Theo suy nghĩ của tôi, cả hai cách đó đều đưa tôi đến cùng một môi trường người dùng (trong trường hợp này là "user1"), nhưng theo kinh nghiệm thực tế của tôi thì không, vì ssh user1@ipcó những thứ được cài đặt mà su user1không có.

Tại sao vậy?

Câu trả lời:


15

SSH bắt đầu một vỏ đăng nhập. su, theo mặc định thì không.

Cụ thể, điều này có nghĩa là ~/.profile(hoặc tệp tương tự) cho người dùng đó không có nguồn gốc. Vì vậy, những thay đổi được thực hiện ~/.profilesẽ không có hiệu lực. Nó cũng có thể là trường hợp:

  • ngay cả khi bạn bắt đầu một vỏ đăng nhập, các thay đổi khác nhau đã được thực hiện trong root ~/.profile, điều này có thể gây ô nhiễm môi trường của người dùng.
    • /etc/profile/etc/profile.d/*có thể áp dụng các cài đặt khác nhau cho những người dùng khác nhau (mặc dù không phải mặc định)
  • có thể có các cài đặt khác nhau cho những người dùng khác nhau trong cấu hình SSH.
  • Cấu hình PAM là khác nhau. Ví dụ /etc/pam.d/ssh: có:

    session    required     pam_env.so user_readenv=1 envfile=/etc/default/locale
    

    trong khi đó /etc/pam.d/sucó:

    session       required   pam_env.so readenv=1 envfile=/etc/default/locale
    

    Điều này có nghĩa là tải SSH ~/.pam_environment, nhưng sukhông. Đây là một điểm lớn, vì ~/.pam_environmentlà nơi độc lập với vỏ cho các biến môi trường và nó được áp dụng nếu bạn đăng nhập từ GUI, TTY hoặc SSH.

Để bắt đầu một vỏ đăng nhập, hãy chạy một trong hai:

su - <username>
sudo -iu <username>

Thí dụ:

# su muru -c 'sh -c "echo $HOME $PATH"'
/home/muru /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
# su - muru -c 'sh -c "echo $HOME $PATH"'
/home/muru /home/muru/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
# sudo -iu muru sh -c 'echo $HOME $PATH'
/home/muru /home/muru/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# sudo -u muru sh -c 'echo $HOME $PATH'
/root /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# ssh muru@localhost 'echo $HOME $PATH'
/home/muru /home/muru/devel/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Ngay cả với SSH, nếu bạn chạy một lệnh thay vì khởi động shell, shell đăng nhập sẽ không được chạy (lưu ý sự vắng mặt ~/bintrong kiểm tra SSH, có trong su -sudo -i). Để có kết quả thực sự, tôi sẽ chạy shell của mình dưới dạng shell đăng nhập:

# ssh muru@localhost '$SHELL -ilc "echo \$HOME \$PATH"'
/home/muru /home/muru/bin:/home/muru/devel/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Đây cũng là lý do tại sao sudo susudo -slà những cách ngu ngốc để có được một vỏ gốc. Cả hai cách này đều bị ô nhiễm bởi môi trường.


Liên quan:


2
Có vẻ tôi nên tỉnh táo trước khi đưa ra câu hỏi :) câu trả lời của bạn thật tuyệt vời và tôi đã bỏ lỡ để nhắm vào câu trả lời thích hợp.
Hoàn

-1

Nhìn chung, nó chủ yếu là một sự khác biệt chiến lược.

Nếu bạn đăng nhập với tư cách là một siêu người dùng, bạn có thể thay đổi mọi thứ mọi lúc ... tức là - không có sự bảo vệ nào trước những sai lầm thảm khốc, bạn phải tạm thời đổi sang một số người dùng khác để đảm bảo an toàn.

Trong khi đó: nếu bạn đăng nhập với các đặc quyền hạn chế, bạn sẽ tránh được một số rủi ro sai lầm nghiêm trọng, vì bạn phải cố ý chuyển sang root để truy cập tạm thời vào quyền lực đó, nhưng giờ bạn đã có vị trí dự phòng mặc định cho người dùng an toàn .

Do đó, sự khác biệt là thực sự chiến lược, không phải kỹ thuật.


Câu hỏi không chính xác là sự khác biệt của người dùng root so với người dùng khác. Đó là sự khác biệt giữa việc truy cập trực tiếp người dùng máy chủ thông qua ssh và truy cập nó thông qua su đã có trong người dùng root. Dù sao, tôi đồng ý với những gì bạn nói quá haha ​​cảm ơn
Miguel Corti

À, xin lỗi ... tôi thực sự tự hỏi tại sao mọi người lại đi sâu vào chi tiết kỹ thuật, tôi đoán tôi đã đọc sai ý định của bạn.
Mr.President
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.