sudo + gui 프로그램 실행은 하지 말란다..

어려운 부분이라서, 잘 이해는 못하겠다.
왜 sudo gedit 등에 보안 문제가 있는지. 예전에 이와 관련한 글을 쓴 적도 있었다.

일단, KDE 는 아직 저게 구현되지 않는다(고 한다).
그래도 한번 해보겠다고, pkexec kate (또는 kdesudo kate) 등을 실행하면, 다음과 같은 문구를 만나게 된다.

Executing Kate as root is not possible. To edit files as root use:
SUDO_EDITOR=kate sudoedit <file>

SUDO_EDITOR=kate 는 뭐고, sudoedit 는 또 뭐야??
이것과 함께, 애초에 sudo kate 가 왜 안되는지, 그럼 어떻게 해야하는지에 대한 설명을, 다음 블로그에서 찾을 수 있었다.

역시나 생소한 내용이라 잘 이해가 안됐는데, 글 내용과 아래 댓글들을 종합해본 결과는 다음과 같다.

  • 관리자 권한으로 GUI(특히나 QT)를 실행하면, 보안 문제가 발생할 소지가 있다.
  • 따라서 터미널을 사용하기를 권장하는데, 그 중에서도 sudo vim 식으로 직접 명령을 내리지 말고, sudoedit 명령어를 사용하라.

다만, 위는 보안 3요소인 CIA(Confidentiality/Integrity/Availability) 중에서 Confidentiality 를 강조한 사용법이다. 보안에서 Availability 가 강조된 지는 이미 오래됐다. 간편 결제 같은 게 왜 나올까.
따라서, 개인 데스크탑 사용자라면 굳이 저렇게까지 할 필요가 있을까하는 의문도 든다.
열심히 찾아보지도 않았지만, 저렇게 사용했을 때 어떤 문제가 발생했다는 일도 아직까지는 듣도 보도 못했다.

아무튼.. 그렇다.
그렇다면, SUDO_EDITOR=kate sudoedit <file> 라는 건 뭔 의미인가?
백문이 불여일견, 한번 실행을 해봤다.

SUDO_EDITOR=kate sudoedit /etc/apt/sources.list

위 명령을 입력하고 나면, 사용자 암호(sudo 를 사용할 수 있는 사용자)를 묻고, 제대로 입력을 했다면 kate 가 실행된다.

헌데, 제목줄이 좀 이상하게 보인다.
내가 연 파일은 sources.list 인데, 제목막대엔 sourcesXXSkPrUc.list 이렇게 돼 있다.
이게 뭐야?? sudoedit 를 사용하면 파일을 바꾸나??

그런게 아니고, 여기엔 좀 더 복잡한 내용이 숨어있다.
만약, sudo kate 가 실행이 된다면(실제로는 실행이 되지 않는다.), kate 는 관리자의 권한을 갖게 된다.
sudoedit 는 kate(또는 할당된 다른 편집기)를 관리자 권한으로 실행하는 게 아니고, 해당 파일을 /tmp 에 복사해놓고, 일반사용자 권한으로 편집을 한다. 편집이 끝나고 저장을 하면, 그 파일은 원 위치(위에서 보면 /etc/apt/sources.list)로 이동된다. 여기서 관리자 권한이 필요한 건 /tmp 밑으로 복사했던 파일을 제자리로 돌릴 때 뿐이다. 그러면 부정(?)이 개입할 여지가 많이 줄어든다(고 한다).

man sudoedit 에 다음 내용이 나와있다.

  1. Temporary copies are made of the files to be edited with the owner set to the invoking user.
  2. The editor specified by the policy is run to edit the temporary files. The sudoers policy uses the SUDO_EDITOR, VISUAL and EDITOR environment variables (in that order). If none of SUDO_EDITOR, VISUAL or EDITOR are set, the first program listed in the editor sudoers(5) option is used.
  3. If they have been modified, the temporary files are copied back to their original location and the temporary versions are removed.

그럼, SUDO_EDITOR 변수는 어떻게 할당해야 하나?? 매번 저렇게 실행해야 하나??
만약, 주 편집기로 nano 나 vim 등을 사용하고 있다면, SUDO_EDITOR 변수를 매번 실행 시마다 바꾸는건 귀찮은 일이다.
alias 를 만들어 사용하는게 답이 되지 않을까?

alias sukate='SUDO_EDITOR=kate sudoedit'

영구히 바꾸고 싶다면, 다음 명령을 사용한다.

sudo update-alternatives --config editor

허나, 여기엔 kate 는 나오질 않는다. (나오게 할 수도 있겠지만, 굳이 그렇게까지 할 필요는 없다고 본다.) 따라서, 위에서처럼 alias 를 만드는 편이 좋을 듯 하다.

또한, sudoedit 는 root 권한 파일들만 편집할 수 있다.
일반 사용자에게도 쓰기 권한이 있는 파일을 sudoedit 로 열려고 하면 이런 오류가 발생한다.

$ sukate aa
sudoedit: aa: editing files in a writable directory is not permitted
끊어짐

권력 낭비를 막으려는 세심함(?)이 엿보인다.


Gnome 환경에선 pkexec 말고 또 다른 방법을 사용한다고 한다. (gksu 는 아예 없어졌다.)

당분간 Gnome 쓸 일은 없으므로, 그냥 기록용.


마지막으로, sudo vim 을 사용하는 건 안전한가?
그게 또 그렇지 않다고 한다.

왜냐하면, vim 에는 shell 로 빠져나가는 기능이 있기 때문이다. sudo vim 으로 진입한 후, shell 로 나가버리면, 관리자 권한으로 무소불위 권력(?)을 행사할 가능성이 있다.

이건 개인이 쓰는 일반 상황에는 별 의미가 없다. sudo vim 을 해서 shell 로 나가나, 그냥 터미널에서 sudo -i 로 관리자가 되어 버리나 아무런 차이가 없지 않은가? 내가 설치한 PC 인데, 뭔 짓을 못할까.
따라서 이 시나리오는, 기업용 서버라든가, 좀 더 세심한 보안 정책이 필요한 곳에나 적절할 듯 하다.

어쨌든 이런 문제점을 차단하기 위해 sudoedit 사용이 필요하다고는 하는데..
위에서도 언급했듯, 이건 그야말로 고도 보안이 요구되는 환경에서나 이렇고, 내 컴퓨터는 그냥 sudo vim 을 해버려도 별 관계 없겠다.
누군가 맘만 먹는다면, 내 컴퓨터에 들어오는 건 그야말로 시간 문제일테니..

그냥, 보안 정책상 그런 게 있다는 정도만 알아두면 되겠다.

2 Comments
  1. Avatar
    • 아무도안

안녕하세요. 글 남겨주셔서 고맙습니다.