리눅스 런처에서 루트 권한으로 프로그램을 실행하는 방법

마지막 업데이트 : 15 10월 2026
  • 루트 권한은 완전한 제어권을 제공하지만, 우분투를 비롯한 여러 배포판은 위험을 줄이기 위해 기본적으로 루트 권한을 비활성화해 놓습니다.
  • sudo 명령어를 사용하면 필요에 따라 권한을 상승시킬 수 있으며, 각 명령어를 실행한 사용자를 기록으로 남길 수 있습니다.
  • 그래픽 애플리케이션의 경우, .desktop 실행 파일에서 사용할 수 있는 kdesu, gksu, gksudo 또는 pkexec와 같은 도우미 함수가 있습니다.
  • 보안은 최소 권한 사용, 신뢰할 수 없는 스크립트 사용 금지, 그리고 관리자 권한 접근에 대한 감사 기능을 통해 확보됩니다.

최신 데이터 센터에서 서버를 관리하는 시스템 엔지니어.

윈도우에서는 Shift+Enter 또는 Shift+왼쪽 클릭을 눌러 시작 메뉴에서 관리자 권한으로 프로그램을 실행하는 것이 일반적입니다. 하지만 리눅스에서는 보안이 루트 권한, sudo 명령어, 그리고 그래픽 도구 에 의존하기 때문에 이러한 방식이 항상 간단하지는 않습니다. 각 데스크톱 환경마다 사용하는 도구가 다르기 때문입니다. 그럼에도 불구하고, 런처, 바로가기 또는 응용 프로그램 메뉴에서 루트 권한으로 응용 프로그램을 실행하는 비교적 간단한 방법들이 있습니다. 다만, 이러한 방법을 사용할 때 어떤 과정이 필요한지 이해하는 것이 중요합니다.

핵심은 루트 사용자가 시스템에 대한 절대적인 제어 권한을 가지고 있다는 점이며 , 최신 배포판, 특히 우분투와 그 파생 배포판들은 일반적으로 루트 계정으로 직접 로그인하는 것을 차단합니다. 따라서 루트 계정으로 로그인하는 경우는 드물고, `sudo` 명령어를 사용하거나 암호를 입력하라는 메시지가 나타나는 그래픽 프로그램을 통해 권한을 상승시키는 경우가 대부분입니다. 만약 런처 아이콘이 이러한 권한으로 앱을 실행하도록 하려면, 실행하는 명령어를 수정하거나 별도의 런처를 만들어야 합니다.

루트 권한으로 프로그램을 실행한다는 것은 실제로 무엇을 의미할까요?

리눅스 터미널 화면이 표시되는 멀티 모니터가 장착된 시스템 관리 워크스테이션.

리눅스에서 루트(root)는 사용자 ID(UID)가 0이고 무제한 권한을 가진 계정입니다 . 루트 사용자는 모든 파일을 읽거나 수정, 삭제할 수 있고, 소프트웨어를 설치하고, 커널 설정을 변경하고, 모든 사용자의 프로세스를 제어할 수 있습니다. 따라서 루트는 매우 강력한 도구이지만, 부주의하게 사용하면 큰 위험을 초래할 수 있습니다. `rm`이나 `mv` 명령어에서 오타 하나만 나도 시스템을 사용할 수 없게 만들 수 있으며, 루트 권한으로 실행되는 악성 스크립트는 백도어를 설치하거나, ​​보안 조치를 변경하거나, 거의 흔적을 남기지 않고 데이터를 탈취할 수 있습니다.

우분투에서는 루트 계정에 기본 암호가 없으며 직접 로그인도 허용되지 않습니다. 이는 일반 사용자 계정으로 작업하고 특정 작업에만 `sudo` 명령어를 사용하도록 권장하는 것입니다 . `sudo`는 기본적으로 `sudo` 그룹에 속한 사용자가 자신의 암호로 인증한 후 다른 사용자(대개 루트 사용자)의 권한으로 명령어를 실행하는 것을 의미합니다. 이렇게 하면 개인 정보 유출 위험을 최소화하고 누가 어떤 작업을 수행했는지 기록을 남길 수 있습니다.

하지만 손상된 시스템 복구, 제한된 환경에서의 작업, 또는 지속적인 접근이 필요한 서비스 구성과 같은 매우 특정한 상황에서는 루트 권한을 일시적으로 활성화하는 것을 고려할 수 있습니다. 일반적으로는 필요성이 사라지는 즉시 루트 권한을 다시 비활성화하는 것이 좋습니다. 루트 권한으로 작업하는 시간이 짧을수록 시스템의 안정성과 보안에 더 좋습니다 .

루트 권한을 부주의하게 사용할 경우의 위험성

가장 명백한 위험 중 하나는 중요한 파일을 실수로 삭제하는 것 입니다 . 루트 권한으로는 권한 제한이 없으므로 `sudo rm -rf /`와 같은 명령어로 경고 없이 시스템 전체를 삭제할 수 있습니다. 또한 일반적으로 삭제된 파일은 휴지통으로 이동되지 않으므로 복구하려면 복잡한 포렌식 도구를 사용하거나 시스템을 완전히 재설치해야 할 수도 있습니다.

또 다른 위험은 신뢰할 수 없는 스크립트를 실행하는 것입니다. 관리자 권한으로 다운로드한 코드를 실행하는 것은 사실상 집에 대한 모든 권한을 넘겨주는 것과 같습니다. 스크립트가 무해해 보일지라도 파괴적인 명령어가 포함되어 있거나 루트 권한으로 악성코드를 설치할 수 있습니다. 따라서 프로덕션 환경에서 실행하기 전에 코드를 검토하고, 공식 소스를 사용하고, 체크섬을 확인하고, 가상 머신이나 컨테이너에서 테스트하는 것이 좋습니다.

  퀄컴 플랫폼에서 RAS 지원을 위한 리눅스 패치

추적성 문제도 있습니다. `sudo` 명령어를 사용하면 시스템은 명령어, 명령어를 실행한 사용자, 그리고 실행 시간을 `/var/log/auth.log`, `/var/log/secure` 또는 `journalctl`에 기록합니다 . 하지만 루트 계정으로 직접 로그인하면 모든 작업이 루트 계정으로 기록되어 누가 어떤 변경 사항을 적용했는지 파악하기 어렵습니다. 관리자가 여러 명인 환경이나 ISO 27001, PCI DSS 또는 기타 감사 표준을 준수해야 하는 환경에서는 이러한 추적성 부족이 심각한 약점이 될 수 있습니다.

단말기에서 권한을 얻는 방법

우분투 터미널의 시스템 로그 및 프로세스 모니터링 화면을 캡처한 상세 이미지입니다.

가장 일반적이고 권장되는 방법은 특정 명령어 앞에 `sudo`를 붙이는 것입니다. 예를 들어 패키지를 업데이트하거나, 서비스를 재시작하거나, 보호된 파일을 편집할 때 `sudo`를 입력하면 루트 암호가 아닌 사용자 암호를 묻고, 인증 후 관리자 권한으로 명령어를 실행합니다. 다른 사용자로 실행해야 하는 경우에는 `sudo -u username command`를 사용하면 됩니다 . 만약 `sudo`를 사용하는 것을 잊었다면 마지막 명령어 앞에 `sudo !! `를 붙여 다시 실행하면 됩니다.

여러 관리 작업을 연속해서 수행해야 할 때 임시 루트 셸을 여는 것이 편리할 수 있습니다. `sudo -i` 는 완전한 루트 로그인을 시뮬레이션하여 루트 환경을 로드하고 홈 디렉터리로 이동합니다. `sudo su` 또는 `sudo su -` 도 작동하지만 `sudo -i`가 일반적으로 더 안정적입니다. 이 세션을 종료하려면 `exit`를 입력하면 됩니다. 루트 셸을 열어둔 채로 자리를 비우는 것은 권장되지 않습니다.

반면 `su` 명령어는 사용자를 전환합니다. `su - root` 또는 간단히 `su -`를 사용하면 대상 사용자의 환경 변수도 함께 적용되지만, `su root` 또는 하이픈 없이 `su`를 사용하면 이전 환경 변수의 일부만 유지됩니다. 이러한 차이 때문에 `command not found`와 같은 오류가 발생합니다. 관리자 권한 명령어는 일반적으로 `/usr/local/sbin`, `/usr/sbin`, `/sbin`과 같은 경로에 있는데, 이러한 경로는 일반 사용자의 PATH 환경 변수에 포함되어 있지 않은 경우가 있습니다. 하이픈 없이 `su`를 사용하면 전체 경로를 입력하거나 `su -`로 전환해야 루트 사용자의 PATH 환경 변수를 상속받을 수 있습니다.

루트 계정에 암호를 설정하려면 `sudo passwd root` 명령어를 사용하면 됩니다 . 우분투에서는 권장하지 않지만, 기술적으로는 루트 계정에 암호를 설정하는 것이 허용됩니다. 계정을 잠그려면 `sudo passwd -l root` 명령어를 , 잠금을 해제하려면 `sudo passwd -u root` 명령어를 사용하십시오. SSH에서 루트 계정에 대한 직접 접근은 `/etc/ssh/sshd_config` 파일의 `PermitRootLogin` 설정으로 제어됩니다 . 이 설정은 `no`로 유지하거나, 최대 `prohibit-password`로 설정하여 SSH 암호만 허용하는 것이 가장 안전합니다. 설정을 변경한 후에는 SSH 서비스를 재시작해야 합니다.

스웨터를 정확하게 구성하세요

`/etc/sudoers` 파일은 누가 어떤 목적으로 `sudo` 명령어를 사용할 수 있는지 정의합니다. 이 파일은 직접 편집하지 않는 것이 좋습니다. `sudo visudo` 명령어를 사용 하면 파일을 잠그고 저장하기 전에 구문을 검사합니다. 기본 규칙은 `host user=(target_user)` 형식입니다. 예를 들어, `bob ALL=(ALL) ALL`은 `bob` 사용자가 모든 컴퓨터에서 루트 권한으로 모든 명령어를 실행할 수 있도록 합니다. `%admin ALL=(ALL) ALL`과 같이 그룹을 사용할 수도 있습니다.

  리눅스용 Liquorix 커널: 데스크톱 및 게임에 최적화된 커널

더 세밀한 권한 부여를 위해 별칭(alias)을 사용합니다. `User_Alias ​​​​ADMINS = alice, bob`는 사용자를 그룹화하고, `Cmnd_Alias ​​​​LOCATE = /usr/sbin/updatedb`는 명령어를 그룹화합니다. 그런 다음 `ADMINS ALL = LOCATE`를 사용하여 해당 사용자들이 지정된 명령어만 실행할 수 있도록 합니다. `route`, `ifconfig`, `ping`, `iptables` 등의 명령어에 대해 `NETWORKING`과 같은 별칭을 만들 수도 있습니다. 이렇게 하면 누구에게도 완전한 루트 권한을 부여하지 않고 최소 권한 원칙을 적용할 수 있습니다.

NOPASSWD 옵션 을 사용하면 특정 명령어를 암호 없이 실행할 수 있습니다. 예를 들어 `pi ALL=(ALL)`처럼 사용할 수 있습니다. NOPASSWD: ALL. 이는 편리하지만 악용할 경우 위험할 수 있습니다. 또한 `sudo` 명령어의 모든 사용 내역은 로그에 기록되므로 접근 권한을 감사하고 문제를 해결하는 데 도움이 됩니다. 문제가 발생했을 때 이러한 로그를 검토하면 최근 변경 사항 중 어떤 것이 오류를 일으켰는지 파악할 수 있습니다.

런처에서 루트 권한으로 그래픽 애플리케이션 실행하기

루트 디렉토리(/)의 파일 목록을 보여주는 Linux 터미널 화면입니다.

그래픽 인터페이스를 사용하는 프로그램의 경우, 암호를 입력하라는 터미널 창이 없기 때문에 단순히 `sudo` 명령어를 사용하는 것만으로는 제대로 작동하지 않는 경우가 많습니다. 이때 그래픽 도우미가 유용 하게 사용됩니다. KDE 환경에서는 `kdesu`가 있습니다 . 애플리케이션을 실행하는 명령어를 알고 있다면 `kdesu that_command`와 같이 입력할 수 있습니다. KDE 메뉴의 `명령 실행` 옵션을 사용하면 다른 사용자의 계정 정보를 입력하여 해당 사용자로 애플리케이션을 실행할 수도 있습니다. GNOME 및 GTK 환경에서는 `gksu` 와 `gksudo`가 널리 사용되었습니다 . 이들은 `sudo` 또는 `su`의 프런트엔드 역할을 합니다. 예를 들어, `gksu synaptic` 또는 `gksudo gparted`는 해당 애플리케이션을 실행하고 암호를 입력하라는 메시지를 표시합니다.

최신 시스템에서는 gksu 사용이 권장되지 않거나 더 이상 사용되지 않습니다. 일반적으로 gksu의 대안으로 PolicyKit 기반의 pkexec가 사용되는데, 이는 정의된 정책에 따라 프로그램이 권한으로 실행될 수 있도록 합니다. 현재 많은 런처들이 관리 작업에 pkexec를 사용합니다. 기본 개념은 동일합니다. 사용자는 터미널을 열 필요 없이 시스템이 통제된 방식으로 권한을 검증합니다.

런처에 바로가기를 만들려면 .desktop 파일을 편집합니다 . 핵심은 `Exec` 줄입니다. 루트 권한으로 실행하려면 `Exec=gksu /path/to/program`, `Exec=kdesu /path/to/program` 또는 `Exec=pkexec /path/to/program`과 같은 줄을 사용하면 됩니다. `sudo`를 직접 사용하려면 런처에 `Terminal=true`를 설정하거나 그래픽 사용자 지정 암호를 구성해야 합니다. 또는 Alt+F2를 누르고 도우미 명령어와 프로그램 이름을 입력하는 방법도 있습니다. 예를 들어 `gksu synaptic`처럼 입력합니다. KDE에서는 `kdesu synaptic`을 입력하거나 다른 사용자로 실행하는 옵션을 사용하면 비슷한 기능을 수행할 수 있습니다.

콘솔헬퍼(consolehelper) 라는 고전적인 대안이 있는데 , 이는 GUI 애플리케이션용 래퍼입니다. 예를 들어, /usr/bin/xterm-root를 /usr/sbin/consolehelper로 가리키는 심볼릭 링크를 생성합니다. 그런 다음, config-util에서 가져온 인증, 계정 및 세션 정보를 포함하여 /etc/pam.d/xterm-root 파일을 생성하여 PAM을 구성합니다. 다음으로, /etc/security/console.apps/xterm-root 파일을 USER=root, PROGRAM=/usr/bin/xterm으로 정의합니다. xterm-root를 실행하면 콘솔헬퍼가 PAM 인증을 요청하고 xterm을 root 권한으로 실행합니다. "Xlib connection to :0.0 refused by server" 오류가 발생하는 경우, xhost local:root 명령을 실행하면 도움이 될 수 있습니다.

어쨌든, 그래픽 애플리케이션을 루트 권한으로 실행하는 것은 여러 단점이 있습니다. 환경 변수가 혼합되고, 세션 버스가 손상될 수 있으며, Wayland 또는 X11에 영향을 미치고, 홈 디렉터리에 루트 소유 파일이 생성될 수 있습니다. 따라서 특정 관리 도구에만 루트 권한을 사용하고 사용 후에는 즉시 닫는 것이 가장 좋습니다. 루트 권한으로 인터넷을 검색하거나 의심스러운 문서를 열지 마십시오 . 어떤 취약점이라도 루트 권한을 상속받을 수 있기 때문입니다.

루트 액세스가 필요한 작업의 일반적인 예

일상적인 작업 중 상당수는 관리자 권한을 필요로 합니다. apt, zypper, dnf 또는 yum을 사용하여 패키지를 관리할 때도 종종 sudo 권한이 필요합니다. 예를 들어 `sudo apt update` , `sudo apt install firefox`, `sudo zypper install docker-ce`와 같은 명령어를 사용해야 합니다. 시스템 서비스 재시작에도 마찬가지로 `sudo systemctl restart apache2`, `sudo systemctl restart ssh`, `sudo systemctl restart nginx`와 같은 명령어를 사용해야 합니다. 사용자 계정을 수정하려면 `sudo usermod`를 사용하고, 파일 소유권을 변경하려면 `sudo chown`을 사용합니다. `/etc/ssh/sshd_config`와 같은 중요한 설정 파일을 nano, vim 또는 gedit으로 편집할 경우에도 루트 권한이 필요합니다.

  LiveCD 없이 GRUB을 복구하는 방법 (단계별)

`zypper repos`나 `systemctl status NetworkManager`처럼 시스템 정보를 읽거나 시스템을 수정하지 않는 명령어에는 `sudo`가 필요하지 않습니다. 습관적으로 모든 명령어에 `sudo`를 사용하는 것은 좋지 않은 습관입니다. 권한을 높여야 할 때만 사용하고, 필요한 작업이 끝나면 최대한 빨리 일반 사용자 계정으로 돌아가는 것이 현명한 방법입니다.

높은 권한으로 작업할 때의 모범 사례

데이터센터 내 파란색 조명이 비추는 서버 랙의 클로즈업 사진.

최소 권한 원칙은 모든 작업의 ​​기본 지침이 되어야 합니다. 가능한 한 개별 명령에는 `sudo`를 사용하고, 꼭 필요한 경우가 아니면 루트 셸을 영구적으로 사용하지 않으며, 작업이 끝나면 즉시 종료하십시오. 출처를 알 수 없는 스크립트를 루트 권한으로 실행하지 마십시오. 사전에 코드를 검토하고, 공식 저장소나 신뢰할 수 있는 프로젝트에서 다운로드하고, 체크섬을 확인하고, 의심스러운 부분이 있다면 격리된 환경에서 테스트하십시오. 완전한 권한을 가진 타사 코드를 다룰 때는 적절한 수준의 회의적인 태도를 갖는 것이 중요합니다 .

sudo 권한을 가진 사용자를 세분화하여 구성하는 것이 좋으며, 모든 권한을 sudo 그룹에만 의존하지 말고 로그를 감사 기록으로 남겨두세요. 서버를 관리하는 경우 `/var/log/auth.log`, `/var/log/secure` 또는 `journalctl -xe` 명령어를 확인하여 오용 사례를 감지하세요. 다중 사용자 환경에서는 각 명령어를 누가 실행했는지 파악하는 것이 책임 소재를 명확히 하고 보안 규정을 준수하는 데 매우 중요합니다.

헤드를 사용하여 루트 권한을 활성화 및 비활성화합니다.

루트 액세스를 허용하기로 결정했다면 `sudo passwd root` 명령으로 암호를 설정하고, 필수적인 작업에만 사용한 다음 계정을 다시 잠그십시오. 직접 SSH 로그인을 비활성화하려면 `sshd_config` 파일을 편집하여 `PermitRootLogin no` 또는 `prohibit-password`로 설정한 다음 SSH를 다시 ​​시작하십시오. 계정을 로컬에서 잠그려면 `sudo passwd -l root` 명령을 사용하고, 잠금을 해제하려면 `sudo passwd -u root` 명령을 사용하십시오. 이러한 조치는 공격 표면을 줄이고 가장 강력한 계정에 대한 무차별 대입 공격을 방지합니다.

대부분의 경우, 처음에 던진 질문에 대한 실질적인 대답은 '예'입니다. kdesu, gksu, gksudo, pkexec와 같은 그래픽 도구를 사용하거나 적절한 명령어가 포함된 .desktop 파일을 생성하여 루트 권한으로 런처에서 프로그램을 실행할 수 있습니다. 하지만 모든 애플리케이션에 대해 이러한 설정을 유지해 두는 것은 바람직하지 않습니다. 특정 프로그램에만 사용할 관리자 권한 런처를 명확한 이름으로 만들어 필요할 때만 사용하는 것이 좋습니다.

핵심은 루트 권한이 장난감이 아니라는 점이며, sudo는 모든 클릭을 영구적인 위험으로 만들지 않으면서 사용자에게 권한을 부여하기 위해 존재하는 것입니다. 슈퍼유저 권한으로 그래픽 앱을 실행해야 하는 경우, 암호가 필요한 도우미 앱을 우선적으로 사용하고, 해당 앱이 정말로 암호가 필요한지 확인하고, 관리자 권한으로만 사용하도록 제한하십시오. 이렇게 하면 리눅스의 강력한 보안을 유지하면서도 런처의 편리함을 누릴 수 있습니다.