리눅스에서 Run0 사용하기

노트북 화면의 클로즈업 사진.

Run0는 Systemd 기반 리눅스 배포판을 위한 새로운 혁신적인 권한 상승 프로그램입니다. 이는 sudo 및 doas와 같은 전통적인 상승 앱에 대한 경량의 “설정 없는“ 대안을 제공합니다. 여기서는 리눅스 시스템에서 명령을 상승시키기 위해 Run0를 사용하는 기본 사항을 보여줍니다.

목차

  • 다른 사용자로 프로그램 실행하기
  • 다른 사용자의 셸로 전환하기
  • 현재 Run0 세션 사용자 정의하기
  • Run0 세션 그룹화하기
  • Run0를 사용하여 Systemd 컨테이너에서 명령 실행하기

그 전에, Run0가 무엇인지 그리고 sudo와 어떻게 다른지 알아보는 것이 좋습니다.

다른 사용자로 프로그램 실행하기

권한 상승 앱의 가장 일반적인 용도 중 하나는 루트 사용자로 명령을 실행하는 것입니다. 이와 관련하여, Run0에서 루트 사용자로 전환하려면 실행하려는 명령 앞에 run0를 추가해야 합니다. 예를 들어, 다음 명령은 루트만 접근할 수 있는 디렉토리에 새 폴더를 생성합니다:

run0 mkdir/etc/maketecheasier

이 명령은 CLI 비밀번호 프롬프트 또는 현재 사용자의 비밀번호를 요청하는 작은 GUI 창을 띄웁니다.

Run0의 비밀번호 프롬프트 스크린샷.

sudo 및 doas와 유사하게, Run0는 명령을 실행할 때 비루트 사용자로 전환할 수도 있습니다. 이를 위해 --user 플래그를 추가하고 실행할 명령의 사용자 이름을 입력합니다:

run0 --user=alice /home/alice/alice-program.sh

전환할 사용자의 비밀번호를 입력한 후 Enter를 누릅니다.

다른 사용자의 셸로 전환하기

권한 상승 앱의 또 다른 주요 기능은 사용자를 루트 셸로 전환할 수 있는 능력입니다. 이를 통해 루트 사용자로 시스템과 상호작용하고 CLI에서 더 복잡한 명령을 실행할 수 있습니다.

Run0에서는 추가 인수 없이 프로그램을 실행하여 이를 수행할 수 있습니다.

루트로 프로그램을 실행하는 것과 마찬가지로, 특정 사용자로 셸 세션을 시작하기 위해 --user 플래그를 사용할 수도 있습니다:

run0 --user=alice

또한, run0는 비루트 사용자에 대한 임시 그룹 권한으로 셸 세션을 생성할 수 있습니다. 이는 특정 사용자 및 그룹 뒤에 잠겨 있는 폴더에 접근하고 싶을 때 유용합니다.

예를 들어, 다음 명령은 “alice” 사용자에게 “www-data” 그룹에 대한 임시 접근 권한을 부여합니다:

run0 --user=alice --group=www-data

--chdir 플래그를 사용하여 새 셸 세션으로 전환할 때 디렉토리 변경을 강제할 수도 있습니다:

run0 --user=alice --chdir=/home/alice/Documents

알아두면 좋은 점: 파일 시스템에서 파일 권한을 재귀적으로 변경하는 방법을 탐색하여 리눅스 머신에 대해 더 알아보세요.

현재 Run0 세션 사용자 정의하기

Run0의 가장 큰 장점은 슈퍼유저 작업을 처리하기 위해 setuid (SUID)를 사용하지 않는다는 것입니다. 대신, 시스템 명령을 루트로 실행하기 위해 격리된 가상 TTY를 생성하는 systemd-run에 의존합니다.

이 접근 방식의 한 가지 결과는 Systemd가 모든 Run0 셸을 서비스 관리자 아래에서 실행되는 개별 단위로 취급한다는 것입니다. 이는 전통적인 권한 상승 앱과 달리 루트 셸 프로세스를 사용자 정의할 수 있게 해줍니다.

루트 셸에 레이블을 추가하려면 --unit 플래그를 사용하고 원하는 이름을 입력합니다:

run0 --unit=maketecheasier

루트 셸에 사용자 정의 설명을 추가하려면 --description 플래그를 추가합니다:

run0 --unit=maketecheasier --description="hello, world!"

systemctl을 사용하여 루트 셸의 사용자 정의 이름이 제대로 적용되었는지 확인합니다:

systemctl list-units maketecheasier.service

사용자 정의 Systemd 유닛의 세부정보를 보여주는 터미널.

기본적으로 Run0는 루트 셸 배경의 색상을 빨간색으로 변경합니다. 이는 유용한 시각적 표시이지만, 시스템에서 밝은 테마를 사용할 경우 방해가 될 수 있습니다.

이를 변경하려면 --background 플래그를 사용하고 40-49 사이의 값을 입력합니다:

run0 --unit=maketecheasier --background=42

마지막으로, 루트 셸의 “니이스 레벨”을 조정할 수도 있습니다. 이는 -20과 19 사이의 값으로, 커널이 다른 프로세스보다 귀하의 프로세스를 우선시할지를 결정합니다.

루트 셸에 가장 높은 우선 순위를 부여하려면 --nice 플래그와 함께 “-20” 값을 사용합니다:

run0 --nice=-20

참고: --nice 플래그는 개별 Run0 명령에도 적용됩니다. 예를 들어, run0 --nice=-20 vim을 사용하여 Vim을 더 높은 CPU 우선 순위로 실행할 수 있습니다.

Run0 세션 그룹화하기

각 리눅스 루트 셸을 사용자 정의할 수 있을 뿐만 아니라, Run0를 사용하여 Systemd 슬라이스에 그룹화할 수도 있습니다. 이는 프로세스의 리소스 수요를 조정할 수 있는 특별한 구조로, 시스템의 나머지 부분에 영향을 주지 않습니다.

다른 슬라이스에서 루트 셸을 생성하려면 --slice 플래그를 사용하고 이동할 슬라이스의 이름을 입력합니다:

run0 --slice=maketecheasier

참고: --slice 플래그에 새 이름을 제공하여 새로운 Systemd 슬라이스를 생성할 수 있습니다.

새 세션이 새 슬라이스에서 실행되고 있는지 확인하려면 해당 슬라이스 내의 프로세스를 나열합니다:

systemctl status maketecheasier.slice

사용자 정의 Systemd 슬라이스의 세부정보를 보여주는 터미널.

--slice-inherit 플래그를 사용하여 새로운 슬라이스를 Run0가 온 슬라이스와 함께 그룹화할 수도 있습니다. 이는 이미 셸을 해당 슬라이스에 그룹화한 경우 유용하며, 새로운 셸만 추가하고 싶을 때 사용합니다:

run0 --slice=maketecheasier --slice-inherit

Run0를 사용하여 Systemd 컨테이너에서 명령 실행하기

Systemd-nspawn은 Docker와 유사한 경량 리눅스 컨테이너를 생성하고 관리할 수 있는 특별한 프로그램입니다. Systemd 스위트의 일부로, Run0를 사용하여 호스트 머신에서 nspawn 컨테이너 내에서 명령을 실행할 수 있습니다.

시스템에서 사용 가능한 Systemd-nspawn 컨테이너를 나열하는 것으로 시작합니다:

machinectl list

사용 가능한 Systemd-nspawn 컨테이너 목록을 보여주는 터미널.

다음 명령을 실행하여 컨테이너의 루트 디렉토리 내에 폴더를 생성합니다:

run0 run0 --machine=maketecheasier --user=root mkdir/hello-world

참고: 현재 Run0에는 --machine 플래그로 실행할 때 권한 상승에 실패하는 버그가 있습니다. 이를 수정하려면 두 번째 run0 명령을 추가하여 권한 상승을 강제할 수 있습니다.

Run0를 사용하여 컨테이너의 루트 셸로 전환하는 것도 가능합니다:

run0 run0 --machine=maketecheasier --user=root

터미널 세션의 호스트 이름을 출력하여 현재 컨테이너 내에서 실행되고 있는지 확인합니다:

echo$HOSTNAME

로컬 시스템에서 Systemd-nspawn 컨테이너로 전환하는 과정을 보여주는 터미널.

리눅스에서 Run0를 사용하여 루트 명령을 실행하고 관리하는 방법을 배우는 것은 권한 상승 앱에 대한 빙산의 일각에 불과합니다. su, sudo 및 sudo -s 간의 차이를 살펴보며 복잡한 세계에 깊이 들어가 보세요.

이미지 출처: Xavier Cee via Unsplash. 모든 수정 및 스크린샷은 Ramces Red에 의해 작성되었습니다.