$ 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-linux
2018년 7월 27일에 버전 2.32-0.2 출시) 데비안은 다른 su
구현으로 전환했습니다.오류 833256. "New" su
는 에서 유래하고 "Old"는 포장 util-linux
에 포함되어 있습니다 .login
src: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 -
PATH
su -
답변2
데비안su
맨페이지말하다:
현재 환경이 새 셸로 전달됩니다. 일반 사용자 또는 슈퍼 사용자의 경우 값이
$PATH
로 재설정됩니다. 이는 및 정의에 따라 변경될 수 있습니다./bin:/usr/bin
/sbin:/bin:/usr/sbin:/usr/bin
ENV_PATH
ENV_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/bin
su -
/etc/profile
PATH
따라서 변경 사항이 있는지 확인 /etc/login.defs
하고 수정하거나 다른 부분이 PATH
후자를 변경했는지 확인해야 합니다(예: 로그인이 아닌 bashrc 스크립트와 같은 쉘 시작 스크립트).