루트 사용자를위한 bash 프로파일 소싱


17

이 질문이 내가 아는 바와 같이 모든 사람들의 지옥을 귀찮게 할 것이라면 미리 사과하십시오. 그것은 여러 가지 방법으로 전에 요청되었습니다. 아카이브를 읽었으며 제안 중 적어도 일부를 시도했지만 여전히 (간단한) 문제를 해결할 수는 없습니다. 누군가가 대답을 할 수 있기를 바랍니다. 참고로, 모호성을 피하기 위해 상대 경로가 아닌 절대 경로를 사용합니다.

로그인하면 user로 로그인합니다 adam. 에있는 별칭 /Users/adam/.bash_profile이로드되고 터미널을 가져올 때 즉시 사용할 수 있습니다. 나는 .bashrc파일을 사용하지 않으며 괜찮습니다.

가끔 su터미널 에 입력 한 다음 비밀번호를 입력 하여 루트로 전환 합니다. 프롬프트가 변경되고 이제 루트 사용자입니다. 내 질문은 이것입니다 : 루트가되면 즉시 프로필 파일을 수동으로 소스하지 않고도 루트 bash 프로필을로드 할 수 있습니까? 내가 자동으로 발생하지 않는 이유는 루트 프로필 파일과에 동일한 별칭이 있기 때문 /Users/adam/.bash_profile입니다. 루트 사용자가 된 후에는 입력 source [root_profile_file]하지 않으면 작동하지 않습니다. 다음 순열을 설정 한 다음 터미널을 통해 루트로 전환하려고 시도했지만 그중 어느 것도 자동으로 프로파일 / 별칭을 소싱하지 않습니다 (참고로 아래 옵션 중 어느 것도 동시에 설정되어 있지 않으므로 생각하지 않습니다) m 시스템 혼동) :

옵션 1 : 별칭을 입력하십시오/etc/profile

옵션 2 :

  • /etc/profile삽입[ -r /etc/bashrc ] && . /etc/bashrc
  • 내 별칭을 넣어 /etc/bashrc

옵션 3 :

  • /etc/bash_profile삽입[ -r /etc/bashrc ] && . /etc/bashrc
  • 내 별칭을 넣어 /etc/bashrc

옵션 4 : 별명 입력/var/root/.profile

옵션 5 :

  • /var/root/.profile삽입[ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • 내 별칭을 넣어 /var/root/.bashrc

옵션 6 :

  • /var/root/.bash_profile삽입[ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • 내 별칭을 넣어 /var/root/.bashrc

위의 항목 중 하나를 사용하여 루트로 전환 한 다음 source root_profile_file별칭 을 입력 하면 실제로 파일을 수동으로 소싱하는 경우에만 별칭이로드됩니다. 어쩌면 나는 bash가 어떻게 작동하는지 완전히 이해하지 못했고 루트로 전환 한 후 프로파일 파일을 자동으로 소싱 할 수는 없지만 간단한 해결책이 있기를 바랍니다. 시간을내어이 메시지를 읽은 사람에게 미리 감사드립니다.

답변:


14

당신이 겪고있는 문제는 su스스로 실행할 때 '로그인'쉘을 입력하지 않는다는 것입니다. 즉, 환경, 작업 디렉토리 및 uid / gid를 제외한 모든 항목은 원래 사용자와 동일하게 유지됩니다.

로그인 트리거가 실행되지 않으며 설명하는 문제가 발생합니다.

간단한 문제에 대한 간단한 해결책 :

su -

로부터 su(1)매뉴얼 페이지

스와 명령은 로그인 세션 동안 다른 사용자가 될하는 데 사용됩니다. 사용자 이름없이 호출하면 su는 기본적으로 수퍼 유저가됩니다. 선택적 인수 - 사용자가 사용자가 직접 로그인했을 것으로 예상되는 환경과 유사한 환경을 제공하는 데 사용될 수 있습니다.

또한:

   -, -l, --login
       Provide an environment similar to what the user would expect had the user logged in directly.

당신이 경우 su로그인 쉘에 예상대로, bash는 동작합니다, 자동으로 지나치게 해키 해결을위한 필요없이, "로그인"에 해당 파일을 소스.


1
나는 그러나 두 번째 하이 데자뷰의 노트를 것입니다 : 당신은 정말, 정말, 정말해야 결코 su으로도 작업 root. 이 sudo목적을 위해, 또는 당신은 당신이 전혀 루트 권한을 필요로하지 않는 것과 같은 방식으로 작업 할 수 있습니다.
Jason Salaz

당신과 @Hai Vu에게 감사합니다. "su-"는 트릭을 수행하며, 완전히 이해되면 루트는 일반적으로 피해야합니다.
Adam Gold

1
su 명령 뒤에 '-'를 추가하는 것을 이미 알고 있었지만 여전히 루트 사용자에 대한 .bash_profile을 얻지 못했습니다. 루트 쉘을 sh에서 bash로 변경하는 것에 대한 Florian Bidabe와 patrix의 답변은 저에게 문제를 해결했습니다.
JaredC

9

사실 루트 사용 /bin/sh(오래된 Bourne 쉘은), .bash_profile그리고 .bashrcbash는 읽습니다.

해당 파일에서 사용할 수없는 기능을 사용할 수 있으므로 까다로워집니다 sh. source .bashrc또는이라고 해도 source .bash_profile복잡한 기능과 같은 문제가 계속 발생합니다.

이 문제를 해결하는 한 가지 방법은

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash

root쉘을 로 전환 합니다 bash.


루트의 파일을 /bin/sh사용 /var/root/.profile합니다.
@Matic

6

내가 절대적으로 필요한 경우, 나는 sudo bashJRobert의 환경에 뿌리를두고 있습니다. 내 .bashrc에는 다음이 포함됩니다.

# Prompt: 'jrobert@JRiMac ~' in green (red, if I'm root), '$' in white
if [[ $UID == 0 ]]; then
   export PS1="\[\e[1;31;40m\]\u@\h \W\[\e[0m\]\$ "
else
   export PS1="\[\e[32;40m\]\u@\h \W\[\e[0m\]\$ "
fi

, 나는 내 자신에게 더 취약하다는 것을 강조하기 위해 RED에서 근본 프롬프트를 다시 눈부신 것으로 만듭니다. -패들을 떨어 뜨리지 마십시오].


3

sudo -i루트 사용자로 전환하는 데 사용 하고 있습니다. 이 경우 쉘 구성은에서 읽습니다 /var/root/.profile.


1

일반적으로 su위험하므로 위험 에 대한 조언을 찾기 만하면 이유를 알 수 있습니다. 귀하의 질문에 따르면 루트 계정은 계정과 동일한 방식으로 작동합니다 : ~ / .bash_profile 및 / 또는 ~ / .bashrc. 나는 어느 것을 모르지만 내 직감은 ~ / .bashrc 쪽으로 기울 이기 때문에 별칭을 거기에 넣으려고 할 수 있습니다. 제안 사항은 다음과 같습니다.

su           # type password to get into root account
vi ~/.bashrc # put your aliases there
exit         # exit your root session
su           # try again to see if your aliases works

0

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash 이것 만이 작동합니다! export PS1=...위의 모든 파일 중 하나에 파일 을 넣으려고했습니다 . / etc / profile, / etc / bashrc /var/root/.bashrc /var/root/.profile /var/root/.bash_profile.

이 모든 파일 /bin/sh쉘에서 정보를 읽지 않습니다! (bash 만) (Mac OS El Capitan). 그리고 쉘을 bash로 변경해야했습니다.

또한 "su -"작동합니다. (이 쉘은 /var/root/.profile파일을 읽고 있습니다)


1
기존 답변을 다시 확인할 필요는 없습니다.
nohillside

-1

이를 해결하는 한 가지 방법은 다음을 실행하여 루트 쉘을 bash로 전환하는 것입니다.

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash

이 솔루션은 내 문제도 해결했습니다.


-2

하나의 '기본'사용자와 루트 사용자 만있는 경우 '기본'사용자의 alias su="su -".bash_profile을 입력 하면 원하는 효과를 얻을 수 있습니다. 작동하고 해킹이없는 것들.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.