데비안 su - 그리고 su $PATH 차이점은 무엇입니까?

데비안 su - 그리고 su $PATH 차이점은 무엇입니까?
$ su -
Password: 
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# exit
logout
$ su
Password: 
# echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

$PATH간단한 su를 수행하면 /bin 및 /sbin이 추가되지 않는 이유를 알 수 없습니다. 과거에도 이런 일이 있었습니다. 이 문제를 어떻게 해결할 수 있나요? 내가 알아차린 것:

-rw-r--r-- 1 root root 0 Jan  8  2018 /etc/environment

하지만 그 외에는 내 시스템이 정상적으로 보입니다.

편집: 필수 사항을 잊어버렸습니다.uname -a

Linux rpi3 4.17.0-1-arm64 #1 SMP Debian 4.17.8-1 (2018-07-20) aarch64 GNU/Linux

편집 2:

$ cat /etc/issue
Debian GNU/Linux buster/sid \n \l

"안정적인" 패키지는 aarch64에서 제대로 실행되지 않기 때문에 모든 패키지는 "테스트" 저장소에 있습니다.

답변1

최근( util-linux2018년 7월 27일에 버전 2.32-0.2 출시) 데비안은 다른 su구현으로 전환했습니다.오류 833256. "New" su는 에서 유래하고 "Old"는 포장 util-linux에 포함되어 있습니다 .loginsrc:shadow

에서 인용util-linux/NEWS.Debian.gz:

두 가지 구현은 매우 유사하지만 약간의 미묘한 차이점이 있습니다(물론 아직 발견되지 않은 것이 더 있을 수 있습니다).

  • 새로운 "su"(인수 없음, 즉 환경을 보존할 때)도 PATH 및 IFS를 보존하는 반면, 이전 su는 "환경 보존" 모드에서도 항상 PATH 및 IFS를 재설정합니다.
  • su ''(빈 사용자 문자열)는 루트를 제공하는 데 사용되었지만 이제는 오류를 반환합니다.
  • 이전에는 su에 하나의 pam 구성만 있었지만 이제 'su -'는 /etc/pam.d/su-l에 별도로 구성됩니다.

첫 번째 차이점은 아마도 사용자에게 가장 분명할 것입니다. 간단한 "su"를 사용하는 것은 여러 가지 이유로 실제로 좋지 않은 생각이므로 항상 일반 로그인과 유사한 새로운 설정 환경을 얻으려면 "su -"를 사용하는 것이 좋습니다. 이전 동작과 더 유사한 동작을 복원하려면 /etc/login.defs에 "ALWAYS_SET_PATH yes"를 추가하면 됩니다.

이전에 사용된 su구현 PATH도 이 버그 보고서에서 논의되었습니다.833256#80. 새로운 su예약된 PATH경우아니요로 전화하세요 su -.

간단히 말해서, 이전 버전의 데비안은 적어도 에서 su처럼 동작합니다 . 최신 구현에서는 다른 배포판과 마찬가지로 거의 항상 를 사용해야 합니다 .su -PATHsu -

답변2

데비안su맨페이지말하다:

현재 환경이 새 셸로 전달됩니다. 일반 사용자 또는 슈퍼 사용자의 경우 값이 $PATH 로 재설정됩니다. 이는 및 정의에 따라 변경될 수 있습니다./bin:/usr/bin/sbin:/bin:/usr/sbin:/usr/binENV_PATHENV_SUPATH/etc/login.defs

인용 출처 /etc/login.defs:

# Three items must be defined:  MAIL_DIR, ENV_SUPATH, and ENV_PATH.
# If unspecified, some arbitrary (and possibly incorrect) value will
# be assumed.  All other items are optional - if not specified then

일반 데비안 시스템에서 변수는 다음 위치에 정의됩니다 /etc/login.defs.

#
# *REQUIRED*  The default PATH settings, for superuser and normal users.
#
# (they are minimal, add the rest in the shell startup files)
ENV_SUPATH      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV_PATH        PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

주석 처리된 테스트는 ENV_SUPATH문제를 부분적으로 재현합니다. 로그인 스크립트는 동시에 실행 su되지 않으며 루트 사용자에 대해 예상한 대로 재정의됩니다 ./sbin/usr/local/binsu -/etc/profilePATH

따라서 변경 사항이 있는지 확인 /etc/login.defs하고 수정하거나 다른 부분이 PATH후자를 변경했는지 확인해야 합니다(예: 로그인이 아닌 bashrc 스크립트와 같은 쉘 시작 스크립트).

관련 정보