su as root를 사용하여 사용자로 로그인하는 것과 사용자를 변경하는 것의 차이점은 무엇입니까?


17

예를 들어 어떤 종류의 서버가 있으면 서버를 통해 액세스 ssh user1@ip할 수 ssh root@ip있으며 su 권한을 가진 루트 사용자에게 가서 다음으로 이동할 수도 su user1있습니다. 내 생각에 두 가지 방법으로 나를 동일한 사용자 환경 (이 경우 "user1")으로 인도해야하지만 실제 경험으로는 그렇지 않으므로 ssh user1@ip설치되어 있지 않은 것들이 있습니다 su user1.

왜 그런 겁니까?

답변:


15

SSH가 로그인 쉘을 시작합니다. su기본적으로는 그렇지 않습니다.

특히, 이는 ~/.profile해당 사용자 의 (또는 유사한 파일)이 소스되지 않았 음을 의미합니다 . 따라서 변경 사항 ~/.profile이 적용되지 않습니다. 다음과 같은 경우도있을 수 있습니다.

  • 로그인 쉘을 시작하더라도 root ~/.profile환경 에서 다른 변경이 이루어졌으며 이로 인해 사용자 환경이 오염 될 수 있습니다.
    • /etc/profile/etc/profile.d/*(하지만하지 기본적으로) 다른 사용자에 대해 다른 설정을 적용 할 수있다
  • SSH 구성에서 사용자마다 다른 설정이있을 수 있습니다.
  • PAM 구성이 다릅니다. 예를 들어, /etc/pam.d/ssh이 있습니다 :

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

    반면 /etc/pam.d/su:

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

    이것은 SSH가로드 ~/.pam_environment되지만 su그렇지는 않음을 의미합니다 . ~/.pam_environment환경 변수를위한 셸 독립 위치이므로 GUI, TTY 또는 SSH에서 로그인 할 때 적용 되기 때문에 이것은 큰 것 입니다.

로그인 쉘을 시작하려면 다음 중 하나를 실행하십시오.

su - <username>
sudo -iu <username>

예:

# 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

SSH를 사용하더라도 셸을 시작하는 대신 명령을 실행하면 로그인 셸이 실행되지 않습니다 ( 및 ~/binSSH에 SSH 테스트 가 없음에 유의하십시오 ). 실제 결과를 얻으려면 로그인 쉘로 쉘을 실행합니다.su -sudo -i

# 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

이 이유도 sudo susudo -s루트 쉘을 얻기의 엉터리 가지 방법이 있습니다. 이 두 가지 방법 모두 환경에 의해 오염됩니다.


관련 :


2
나는 질문을하기 전에 깨어 있어야합니다 :) 당신의 대답은 훌륭하고 올바른 대답을 목표로하기 위해 누락되었습니다. 잘 했어요 +1
Videonauth 2016 년

-1

전반적으로 그것은 주로 전략적 차이입니다.

수퍼 유저로 로그인 한 경우 언제든지 변경할 수 있습니다. 즉 치명적인 실수로부터 보호 할 수 없으므로 안전을 위해 일시적으로 다른 사용자로 변경해야합니다.

반면에, 제한된 권한으로 로그인 한 경우 일시적으로 해당 권한에 액세스하기 위해 루트로 전환해야하지만 이제는 안전한 사용자에게 기본 폴백 위치를 가지므로 치명적인 실수의 위험을 피할 수 있습니다 .

따라서 차이점은 기술적 인 것이 아니라 실제로 전략적인 것입니다.


문제는 루트 사용자와 다른 사용자의 차이점이 정확히 아니 었습니다. ssh를 통해 서버 사용자에게 직접 액세스하는 것과 루트 사용자 내부의 su를 통해 서버 사용자에게 액세스하는 것의 차이점이었습니다. 어쨌든, 나는 당신이 너무 하하 고맙다는 말에 동의합니다
Miguel Corti

아 알았어, 미안 .. 왜 모든 사람들이 기술적 세부 사항에 들어가는 지 궁금해하고 있었는데
Mr.President
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.