리눅스 /run/user/ 디렉터리: 언제 마운트되고 로그인 없이도 유지될까?

/run/user/<UID> 디렉터리 언제 생기나? Lingering으로 세션 유지하는 법

📌 목차 보기
  1. /run/user/<UID>의 정체
  2. 언제 마운트될까?
  3. su/sudo 전환의 차이
  4. Lingering으로 유지하기
  5. 마무리 정리

/run/user/<UID>의 정체

/run/user/<UID> 디렉터리는 리눅스 시스템에서 로그인한 사용자를 위한 런타임 임시 파일들을 저장하는 전용 디렉터리입니다. UID는 User ID를 의미하며, 일반적으로 1000 이상부터 시작되는 숫자입니다. 예를 들어, 여러분이 첫 번째 일반 사용자라면 보통 UID가 1000입니다. 그렇다면 /run/user/1000이라는 디렉터리가 생성될 수 있겠죠.

이 디렉터리에는 GNOME, KDE와 같은 데스크톱 환경이 사용하는 소켓 파일이나, 사용자 단위 systemd 서비스가 사용하는 임시 파일, 파이프 등 다양한 파일들이 저장됩니다. 중요한 점은 이 디렉터리가 휘발성이라는 것입니다. 즉, 시스템을 재시작하거나 사용자가 로그아웃하면 이 디렉터리는 자동으로 사라진다는 의미입니다.

해당 디렉터리는 보통 tmpfs 파일 시스템으로 마운트됩니다. 이는 실제 디스크가 아닌 메모리(RAM)에 파일이 저장된다는 뜻이며, 덕분에 속도가 빠르고 자동 삭제가 가능합니다.

언제 마운트될까?

이 디렉터리는 정확히 언제 생길까요? 정답은 사용자가 시스템에 로그인할 때입니다. 로그인은 여러 경로를 통해 이뤄질 수 있습니다. 예를 들어

  • GDM, SDDM 등 GUI 로그인 매니저를 사용할 때
  • 터미널에서 TTY를 통해 로그인할 때
  • SSH로 원격 접속할 때

이러한 로그인 과정에서는 PAM(Pluggable Authentication Modules)이라는 인증 모듈 체계가 동작하게 되며, 이 중 pam_systemd라는 모듈이 systemd에게 해당 사용자의 세션을 시작하라고 알립니다. systemd는 사용자의 UID를 기반으로 /run/user/<UID> 디렉터리를 생성하고, 이 디렉터리를 tmpfs로 마운트합니다.

사용자가 로그아웃하면 systemd는 해당 사용자의 세션을 종료하며 /run/user/<UID> 디렉터리도 함께 제거됩니다. 즉, 이 디렉터리는 로그인 세션의 생명주기와 완전히 일치합니다.

단 SU로 유저를 전환했을때는 /run/user/<UID> 디렉터리가 마운트되지 않습니다.


su/sudo 전환의 차이

su 또는 sudo -i 명령어로 다른 사용자로 전환했을 때, 해당 사용자의 /run/user/<UID> 디렉터리가 마운트되지 않는 현상을 본 적이 있으실 겁니다. 이는 진짜 로그인 세션과 단순 사용자 전환의 차이 때문입니다.

  • login (예: SSH, GDM): 완전한 세션 시작 → PAM 작동 → pam_systemd 동작 → 디렉터리 생성
  • su / sudo -i: 기존 세션 내에서 UID만 바뀜 → PAM 작동 안 함 → 디렉터리 생성 안 됨

단, 해당 사용자에 대해 loginctl enable-linger가 설정되어 있다면 로그인하지 않아도 디렉터리가 생성됩니다.


Lingering으로 유지하기

어떤 상황에서는 사용자가 직접 로그인하지 않았더라도 /run/user/<UID> 디렉터리가 존재해야 할 필요가 있습니다. 예를 들어, 사용자가 로그아웃했더라도 백그라운드에서 systemd 사용자 서비스가 실행되고 있어야 하는 경우가 있죠. 이럴 때 사용하는 기능이 바로 Lingering입니다.

Lingering이란?

systemd의 기능 중 하나로, 사용자가 로그인하지 않아도 systemd --user 인스턴스를 유지시켜 /run/user/<UID> 디렉터리도 살아 있게 해주는 설정입니다.

활용 예시

  • Podman의 루트리스 컨테이너
  • 개인 웹 서버 또는 사용자 전용 데몬
  • 자동 백업 서비스

Lingering 상태 확인

$ loginctl show-user <username> | grep Linger
Linger=no

위의 결과는 비활성화 되어있는 상태이며, root 권한으로 아래 명령을 실행해 Linger를 활성화할 수 있습니다.

# loginctl enable-linger <username>

다시 확인해보면 다음과 같이 나올 것입니다:

$ loginctl show-user <username> | grep Linger
Linger=yes

이제 시스템이 재부팅되더라도 해당 사용자의 systemd --user 서비스는 자동으로 실행되며, /run/user/<UID> 디렉터리도 생성됩니다.


마무리 정리

/run/user/<UID>는 단순한 디렉터리가 아닙니다. 리눅스 사용자 세션의 생명주기를 관리하는 중요한 장치입니다. 일반적으로는 로그인 시 생성되고, 로그아웃 시 삭제됩니다. 하지만 loginctl enable-linger를 설정함으로써 로그인을 하지 않아도 systemd 사용자 인스턴스를 유지하고 디렉터리를 활성화 상태로 둘 수 있습니다.

이러한 동작 원리를 이해하면 리눅스 시스템에서 사용자별 서비스 실행, 자동화 설정 등 보다 깊은 수준의 관리와 디버깅이 가능해집니다.


댓글

이 블로그의 인기 게시물

MySQL 주요 기능 하나씩 쉽게 살펴보기

MySQL 라이선스 종류와 선택 가이드

[Linux] OpenSSL을 사용한 자체 서명된 CA 생성 가이드