사용자가 왜 일반 sudo를 사용하여 그래픽 응용 프로그램을 시작하지 않아야합니까?


114

커뮤니티 "RootSudo"문서를 읽었 으며 다음 줄에 관심이 있습니다.

그래픽 응용 프로그램을 루트로 시작하기 위해 일반 sudo를 사용 해서는 안됩니다 .

왜? 차이점은 무엇입니까? 일반적인 데스크톱 사용자 일 뿐이므로 간단한 설명을 제공해주세요.



실제로 최근 MATLAB을 / usr / local에 설치하는 데 어려움을 겪었습니다. / usr / local에 쓰기 위해서는 루트 권한이 필요하지만 gksu를 사용하여 설치 프로그램을 실행하면 설치된 프로그램을 루트가 아닌 것으로 실행할 수 없습니다. sudo를 사용하여 설치 프로그램을 실행하면 모든 것이 잘 작동했습니다.
Bib-lost

답변:


129

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

다음 gedit과 같이 (그래픽 텍스트 편집기)를 실행한다고 가정합니다 root. 당신이 실행하는 경우 sudo gedit, HOME향해야 계속 당신의 프로그램이 실행 되더라도, 홈 디렉토리 root . 결과적으로 홈 디렉토리에 gedit구성 파일 root 기록합니다 . 이것은 종종 발생합니다 구성 파일의 존재를 소유 하여root 따라서 당신에게 접근 할 수없는 (나중에로하지 자신과 같은 프로그램을 실행할 때 root). 주로 응용 프로그램에서 새 구성 파일을 만들어야 할 때 발생합니다. 기본적으로 새로 작성된 파일은 파일을 작성한 사용자 (이 경우에는 사용자가 root아님) 가 소유합니다 .

이것이 sudostraight가 아닌 그래픽 프론트 엔드로 그래픽 애플리케이션을 실행해야하는 주된 이유 sudo입니다. 우분투와 그 파생어 대부분 (Xubuntu와 Lubuntu 포함)에서 표준 그래픽 프론트 엔드는 gksu/gksudo 입니다. 쿠분투에서는 kdesudo. 사용중인 데스크톱 환경 에 따라 다릅니다 .

당신이 경우 원하는 사용하는 sudo그래픽 응용 프로그램 등을 실행에 직접 gedit, 당신은 실행할 수 있습니다 :

sudo -H gedit

-H플래그하게 sudo세트 HOME를 가리 키도록 root(인의 홈 폴더 /root).

그래도 소유권 .Xauthority폴더를 임시 폴더에 복사 하여 소유권을 자동으로 처리하지는 않습니다 (그래픽 sudo프런트 엔드에서 처리 하는 다른 항목 임). 그러나 .Xauthority액세스 할 수없는 드문 경우 에는 오류가 발생하고 sudo rm ~/.Xauthority자동으로 재생성 되므로 문제를 삭제하여 문제를 해결할 수 있습니다 ( ). 따라서 .Xauthority구성 파일의 소유권과 권한을 보호하는 것보다 소유권과 권한을 보호하는 것이 덜 중요합니다.

root소유 하고있는 것과 달리 .Xauthority, 구성 파일이로 소유 될 때 root문제가 무엇인지 항상 명확하지는 않습니다 (그래픽 프로그램이 종종 실행되지만 잘 작동하지 않고 유용한 오류를 콘솔에 출력하기 때문에). 그리고 특히, 때로는 해결하기 위해 더 큰 번거 로움 당신이 당신의 홈 디렉토리에있는 하나 개 이상의 파일이 당신보다 다른 사람이 소유 할 위치는 상황에 있다면 단순히 반복적으로 다음 문제를 해결할 수 없기 때문에 ( chown모든 파일을 보내고 다시 자신에게).

따라서 앱의 내부 작업에 대해 잘 알고 있고 구성 파일을 쓰려고 시도하지 않는지 확인 하지 않는 한sudo (적어도없는 -H)를 사용하여 그래픽 응용 프로그램을 실행해서는 안됩니다 .


루트가 소유 한 파일 인 경우 홈 디렉토리의 모든 구성 파일 (또는 파일)의 소유자가 될 수 있습니까?
Nur

@Nur 홈 디렉토리에 다른 사용자가 소유 하거나 다른 그룹 회원 (공유를 위해)원하는 파일 이 없다고 가정하면 다음을 실행할 수 있습니다. 불행히도, 이러한 기준이 항상 적용되는 것은 아닙니다. 그룹 소유자를 유지해야하는 파일이 있으면을 실행할 수 있습니다 . 이것으로 충분합니다. (홈 디렉토리의 다른 사용자가 파일을 소유해야하는 경우에도 문제가 될 수 있습니다.)sudo chmod -R $USER:$USER ~sudo chmod -R $USER ~
Eliah Kagan

1
@EliahKagan chmod실제로합니까? 나는 항상 그렇게 생각 chown했다. chmod나를 위해 그것을하지 않았다.
Wyatt8740

2
@ Wyatt8740 위의 의견 chown대신 분명히 작성해야합니다 chmod. 죄송합니다. 지적 해 주셔서 감사합니다.
Eliah Kagan

2
@TheQuark에서 sudo -H echo $HOME, 쉘은 - 루트가 아닌, 당신로 실행 - 실행 매개 변수 확장 에을 $HOME의 경로를 획득 하여 홈 디렉토리를 다음 건네 줄에 sudo차례로 이미 확장 된 값으로 통과하는, echo그것을 인쇄. sudo -H printenv HOME, sudo -H bash -c 'echo $HOME'sudo -H sh -c 'echo $HOME'모든 인쇄 /root. 이것은 다른 메카니즘에 의해 개념적으로 비슷하지만 x=a echo "$x"인쇄하지 않는 방법과 비슷합니다 a( x이미 값이 없는 경우 는 제외 a).
엘리아 케이건


5

에 대한 대안 gksu nautilusgksu gedit사용하는 nautilus-admin부가 기능. 노틸러스로 파일과 디렉토리를 찾은 다음 루트 (관리자)로 열 수 있습니다.

설치는 간단합니다 :

sudo apt install nautilus-admin

이제 노틸러스에있을 때 관리자로 편집 할 수있는 추가 옵션이 있습니다.

노틸러스 admin.gif


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

gedit루트로 실행하면 탭 중지에 대한 일반 사용자로 설정 한 환경 설정을 사용할 수 없으며 탭을 공백, 글꼴 이름, 글꼴 크기, 줄 바꿈 등으로 변환하십시오.

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

  • 를 사용하여 전화 sgedit filename1 filename2 ...
  • 탭 중지, 글꼴, 줄 바꿈 등에 대한 사용자의 gedit 설정을 가져옵니다.
  • 에 이르게 sudo -H루트 권한을 얻는 동안 파일 소유권을 보존 할 수 있습니다.
  • 마지막 sudo시간이 초과 된 경우 비밀번호를 요청합니다 .
  • sudo의 gedit 설정을 가져옵니다
  • 사용자와 sudo gedit 설정의 차이점을 비교합니다
  • 차이점에 대해서만 설정 한 집합을 실행합니다 (174 개의 set 명령을 12 개 이하로 줄입니다. 다음 번에는 하나 또는 두 개의 변경 사항 만 실행하지만 종종 변경 사항이없는 경우가 있습니다.
  • gedit터미널 프롬프트가 즉시 다시 나타나도록 백그라운드 작업으로 호출 합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.