사용자가 그래픽 응용 프로그램을 시작하기 위해 일반 sudo를 사용해서는 안되는 이유는 무엇입니까?

사용자가 그래픽 응용 프로그램을 시작하기 위해 일반 sudo를 사용해서는 안되는 이유는 무엇입니까?

나는 읽었다커뮤니티 "RootSudo" 문서그리고 나는 이 라인에 관심이 있습니다:

당신은해야절대루트로 그래픽 응용 프로그램을 시작하려면 일반 sudo를 사용하십시오.

왜? 차이점은 무엇입니까? 저는 일반 데스크톱 사용자이므로 간단한 설명을 부탁드립니다.

답변1

Ubuntu 19.10 이상에서는그 기사(그리고 이 답변에서는) 더 이상 적용되지 않습니다. 보다WinEunuuchs2Unix의 답변게다가이 질문.

그래픽 응용프로그램은 종종 사용자 내부에 작성된 구성 파일에 설정 및 기타 사용자별 데이터를 저장합니다.홈 폴더. 응용 프로그램이 사용자의 홈 폴더로 무엇을 사용해야 하는지 결정하는 데 사용하는 주요 메커니즘은HOME 환경 변수. ( 를 사용하여 직접 검사할 수 있습니다 echo $HOME.)

당신이 달리고 있다고 가정하자gedit(그래픽 텍스트 편집기)root. 을 실행하면 은( 는 sudo gedit) HOME계속해서 다음을 가리킵니다.당신의프로그램이 실행 중이더라도 홈 디렉토리~처럼root. 결과적으로 gedit구성 파일을 작성합니다.~처럼root홈 디렉토리에 넣습니다. 이것때로는 결과가 나올 것입니다구성 파일에서소유~에 의해root따라서당신은 접근할 수 없습니다(나중에 가 아닌 자신으로 프로그램을 실행할 때 root) 이는 주로 애플리케이션이 새 구성 파일을 생성해야 할 때 발생합니다. 새로 생성된 파일은 기본적으로 해당 파일을 생성한 사용자(이 경우 root귀하가 아닌 )가 소유합니다.

sudo이것이 직선이 아닌 그래픽 프런트엔드로 그래픽 애플리케이션을 실행해야 하는 주된 이유입니다 sudo. Ubuntu 및 대부분의 파생 제품(Xubuntu 및 Lubuntu 포함)에서 표준 그래픽 프런트엔드는 다음과 같습니다.gksu/gksudo. 쿠분투에서는kdesudo. (상황에 따라 다릅니다.데스크탑 환경사용되고 있습니다.)

만약 너라면원하다sudo와 같은 그래픽 애플리케이션을 실행하기 위해 직접 사용하려면 gedit다음을 실행할 수 있습니다.

sudo -H gedit

플래그 -HsudoHOMEroot폴더(/root).

그래도 소유권이 자동으로 처리되지는 않습니다..Xauthority이를 임시 폴더에 복사합니다(이것은 그래픽 sudo프런트엔드가 처리하는 또 다른 작업입니다). 하지만 간헐적으로 접근할 수 없는 이벤트의 경우 .Xauthority오류가 발생하며, sudo rm ~/.Xauthority자동으로 다시 생성되므로 삭제( )하여 문제를 해결할 수 있습니다. 따라서 .Xauthority의 소유권과 권한을 보호하는 것은 구성 파일의 소유권과 권한을 보호하는 것보다 덜 중요합니다.

root-owned 와 달리 .Xauthority구성 파일이 로 소유되면 root문제가 무엇인지 항상 명확하지 않습니다(그래픽 프로그램이 종종 실행되지만 잘 작동하지 않고 유용한 오류를 콘솔에 출력하기 때문입니다). 그리고 때로는 고치는 것이 더 큰 번거로움을 안겨주기도 합니다. 특히홈 디렉토리에 있는 하나 이상의 파일을 자신이 아닌 다른 사람이 소유하게 하려는 상황에 있는 경우chown(왜냐하면 모든 파일을 자신에게 재귀적으로 다시 보내는 것만으로는 문제를 해결할 수 없기 때문입니다 .)

따라서 sudo(적어도 없이 -H) 그래픽 응용프로그램을 실행하는 데 사용해서는 안 됩니다.~하지 않는 한당신은 앱의 내부 작동 방식에 대해 매우 잘 알고 있으며 앱이 구성 파일을 작성하려고 시도하지 않는다는 것을 확실히 알고 있습니다.

답변2

간단히 말해서:

이렇게 하면 홈 디렉토리의 파일이 루트의 소유가 되는 것을 방지할 수 있습니다.

읽어여기. 또한, 아마도"gksudo nautilus"와 "sudo nautilus"의 차이점은 무엇입니까?

답변3

우분투 19.10 업데이트

현재우분투 19.10, sudo some_command이제 입력은 입력과 동일한 효과를 가집니다 sudo -H some_command. 이는 터치된 모든 구성 파일의 디렉터리가 디렉터리 (일명 ) /root가 아닌 디렉터리 아래에 있음을 의미합니다 ./home/regular_userID$HOME

이로 인해 이 전체 Q&A는 Ubuntu 19.10 이상의 사용자에게 상당한 논란의 여지가 있습니다.

배포판에서처럼 sudo작동하는지 확인하려면 다음 짧은 테스트를 시도해 보세요.sudo -H

$ sudo printenv | grep HOME
HOME=/home/rick

$ sudo -H printenv | grep HOME
HOME=/root

보시다시피, sudo위와 같이 수행되지 않으므로 sudo -H일반을 사용하면 sudo사용자 구성 파일이 손상될 수 있습니다.


또는 gksu nautilus에 대한 대안 은 추가 기능을 사용하는 것입니다 . 이를 통해 파일과 디렉토리를 탐색할 수 있습니다.gksu geditsudo -H geditnautilus-admin노틸러스그런 다음 루트(관리자)로 엽니다.

설치는 간단합니다.

sudo apt install nautilus-admin

이제 노틸러스에 있으면 관리자로 편집할 수 있는 추가 옵션이 제공됩니다.

노틸러스 관리자.gif


gedit루트는 환경 설정을 허용하지 않기 때문에

루트로 실행하면 gedit탭 정지, 탭을 공백으로 변환, 글꼴 이름, 글꼴 크기, 줄 바꿈 등에 대해 일반 사용자로 설정한 기본 설정을 사용할 수 없습니다.

sgedit이 문제를 해결하기 위해 사용자 기본 설정을 상속하고 이를 루트에 적용하는 스크립트를 작성했습니다 .내 루트 gedit를 내 사용자 gedit의 기본 설정과 어떻게 동기화할 수 있나요?

  • 다음을 사용하여 전화sgedit filename1 filename2 ...
  • 탭 정지, 글꼴, 줄 바꿈 등에 대한 사용자의 gedit 설정을 가져옵니다.
  • sudo -H루트 권한을 얻으면서 파일 소유권을 보존하려면 다음으로 승격합니다 .
  • 마지막 시간이 초과된 경우 비밀번호를 요청합니다 sudo.
  • sudo의 gedit 설정을 가져옵니다.
  • 사용자와 sudo gedit 설정의 차이점을 비교합니다.
  • 차이점에 대해서만 gsettings 세트를 실행합니다(174개의 set 명령을 12개 이하로 줄입니다. 다음 번에는 한두 개의 변경만 실행되지만 변경되지 않는 경우가 많습니다.
  • gedit터미널 프롬프트가 즉시 다시 나타나도록 백그라운드 작업으로 호출합니다 .

관련 정보