Linux-“su-”를 사용하지만 현재 디렉토리를 유지하십시오


14

내가 할 때 su -루트에 도착, 내 현재의 디렉토리는 루트의 집으로 설정되어 있습니다. 나는 많은처럼에 있었던 현재 디렉토리를 유지하는 어쨌든 거기 sudo -s. 아니면 sudo를 사용하는 대답입니까?


5
무례하게 들리고 싶지 않지만 "man su"를 통해이 문제가 해결되지 않는 이유는 무엇입니까?
Myrrdyn 2016 년

1
@Rory Myrrdyn 의견을 읽으십시오
c4f4t0r

필자의 sudo su -c "zsh"경우 현재 디렉토리에 나를 유지 하고 루트 사용자가있는 쉘로 zsh 를 로드하는 것을 좋아 합니다. ctrl+d이후에 현재 사용자로 돌아옵니다. 디렉토리의 경우 CentOS에서 직접 작동하지만 전달 된 명령에`&& cd $ (pwd)`를 추가하면 트릭을 수행 할 수 있습니다.
GabLeRoux

@Myrrdyn 설명서는 원하는 내용을 알 때 유용합니다. 그렇지 않으면 전문가에게 조언을하는 것이 더 빠르고 더 교훈적입니다.
Romain Vincent

답변:


18

가능한 경우 항상 sudo를 사용하는 것이 좋습니다. 루트 암호를 알 필요가 없기 때문입니다. 루트 암호를 길고 끔찍한 것으로 설정 한 다음 안전하게 잠그십시오.

나중에 다른 사람의 액세스를 거부하려면 다른 사람에게 새로운 루트 암호를 알려주지 않고 sudo에 대한 액세스 권한을 제거하면됩니다.

그러나 원하지 않는 경우 '-'매개 변수를 사용할 필요가 없습니다. 쉘을 루트로 가져 오면 로그인 쉘 이 아니므로 루트의 .profile을 실행하지 않습니다.


1
제 경우에는 다음과 같은 작업을 수행하기 위해 별칭이 필요했습니다 asuser git reset --hard. 그러나 su - <user> -m -c "git reset --hard"sudo -u <user> git reset --hard내 환경을 절약 할 수 및 자식은 읽으려고 할 현재 사용자의 자식 설정합니다. 그래서 때로는 su- <user> -c "cd ; bash"를 사용하는 user205705의 솔루션pwd 이 더 낫다고 말하고 싶었습니다 .
ReFruity

16

나는 sudo가 거의 항상 더 나은 대답이지만 질문의 다른 부분에 대답하는 데 동의합니다 ...

'su-'의 '-'는 수퍼 유저 권한으로 실행하기보다는 수퍼 유저 로그인을 에뮬레이트하려는 것을 나타냅니다.

'su-'대신 일반 'su'를 사용하면 동일한 디렉토리에 남아 있습니다. 그러나 동일한 환경에서도 실행되므로 일부 관리자 명령에 액세스하려면 경로를 수정해야 할 수도 있습니다.


9

su없이 사용 -하면 현재 디렉토리에 보관해야합니다. -, -l또는 --login 스와하는 말 :

사용자가 사용자가 직접 로그인했을 것으로 예상되는 환경과 유사한 환경을 제공하십시오.

또는 sudo를 사용하면 다른 많은 장점이 있습니다. 또는 ssh 키.


6

반드시 sudo를 사용해야합니다.

su -m
-m (-p) : 환경 변수를 재설정하지 않습니다 (일반적으로 권장되지 않음)

루트로 변경하면 폴더에 보관됩니다.

sudo 사용의 이점


1
보안 문제인 PATH 환경을 재설정하지 않는 것 외에는 "su"와 다른 점을 알 수 없습니다.
David Pashley 2016 년

예를 들어 @DavidPashley .bashrc는 루트 사용자가 아닌 외부 사용자로부터 실행합니다 .
phil294

4

당신이 정말로 사용하고 싶다면 su, 같은 디렉토리에 머무를 수있는 방법이 있습니다.

su - <user> -c "cd `pwd`; bash"

무슨 일이야?

  • su - <user> =로 로그인
  • -c "새로운 쉘에서 명령 실행
  • -c "cd `pwd`" 우리가 제공하는 명령은 현재 direcotory ( pwd) 로 전환하는 것입니다. 그러나 백틱을 사용하기 때문에 pwd명령을 실행하기 전에 명령이 평가 su되어 실제로는 이전 사용자 인 NOW에있는 디렉토리로 전환됩니다. 여기서 유일한 문제는 명령을 실행 한 직후 새 셸이 종료되므로 다음과 같이 추가합니다.
  • -c "cd `pwd`; bash" 즉, " 명령 bash을 실행 한 후 실행 (새 셸)을 실행 cd하면 bash 셸은 로그 아웃 할 때까지 종료되지 않습니다.

1
이것은 실제로 질문에 대한 유일한 대답입니다. 잘 했어!
Cacahuete Frito

실제로 su - [user] -c "cd $(pwd); bash"약간 더 나을 수 있습니다 (백틱을으로 변경 $()).
Cacahuete Frito

3

sudo :)를 사용하십시오. 진심으로, 당신은 su 필요가 없습니다. 'sudo'는 권한있는 명령에만 사용하기 때문에 더 좋고 실수를 피할 수 있습니다. 또한 책임도 있습니다.


2

"su"를 사용하면 대화식 쉘이 수행됩니다. 이것은 "sudo -s"와 동일합니다. "su-"는 로그인 쉘을 작성하여 환경을 대체합니다. "sudo -i"는 sudo와 동등합니다. 대화식 쉘을 얻으려고 시도하는 경우 항상 sudo -i (또는 su-) 양식을 사용해야합니다. 그렇지 않으면 사용자의 홈 디렉토리에서 이상한 파일 권한으로 끝날 수 있습니다.


0

이 작업을 수행하려면 su 소스를 수정해야합니다. envoironment varibles 초기화 절차에는 chdir 호출이 있습니다. 그 부름에 포함 된 진술을 주석으로 처리하십시오. 이제 "su-"를 수행 할 수 있지만 현재 디렉토리는 유지합니다.

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