Linux에서 Landlock 적용

발행: (2025년 11월 30일 오전 06:30 GMT+9)
10 min read

Source: Hacker News

Landlock‑Ing Linux

Landlock: 무엇인가?

Landlock은 애플리케이션이 접근을 허용할 리소스를 명시적으로 선언할 수 있게 해 주는 Linux API입니다. 그 철학은 OpenBSD의 unveil()과(덜은) pledge()와 비슷합니다: 프로그램이 커널에 “나는 이 파일이나 리소스만 필요하니, 나머지는 차단해 주세요—만약 내가 침해당하면 모든 것을 거부해 주세요”라는 계약을 맺는 것이죠.

이는 개발자 친화적인 방식으로 애플리케이션에 방어‑깊이를 추가할 수 있게 해 줍니다. 기존의 Linux 보안 메커니즘에 비해 Landlock은 이해하고 통합하기가 훨씬 쉽습니다.

어떻게 동작하나요?

Landlock은 Linux 5.13부터 제공되는 Linux Security Module (LSM)입니다. SELinux나 AppArmor 같은 MAC 프레임워크와 달리 Landlock은 일시적인 제한을 적용합니다:

  • 정책은 런타임에 생성됩니다.
  • 현재 스레드와 그 이후에 생성되는 자식 스레드·프로세스에 적용됩니다.
  • 프로세스가 종료되면 정책도 사라집니다.

파일에 라벨이나 확장 속성을 붙이지 않습니다. 대신 애플리케이션이 동적으로 정책을 생성합니다.

Landlock 정책은 두 부분으로 구성됩니다:

  1. 핸들링할 접근 – 제한하고 싶은 작업 종류(예: 파일 시스템 읽기/쓰기).
  2. 접근 허용 – 해당 작업에 대해 허용할 객체들의 명시적 허용 목록.

예시 정책

  • 핸들 모든 파일 시스템 읽기/쓰기와 네트워크 바인드.
  • 허용:
    • /home/user에 대한 읽기 전용 접근
    • /tmp에 대한 읽기/쓰기 접근
    • 포트 2222에 바인드할 권한

애플리케이션은 이후 landlock_restrict_self()를 호출해 제한된 영역에 진입합니다. 그 시점부터 스레드의 자식 스레드와 자식 프로세스는 영구적으로 제한되며, 제한을 해제할 수 없습니다.

  • 계층화 – 최대 16계층. 자식 계층은 접근을 더 줄일 수 있지만, 부모가 제거한 권한을 다시 부여할 수는 없습니다.
  • 비특권 – 어떤 애플리케이션도 스스로 샌드박스를 만들 수 있습니다.
  • ABI 버전 관리 – 프로그램은 오래된 커널에서도 최선의 샌드박싱을 적용할 수 있습니다.
  • 스택 가능한 LSM – SELinux나 AppArmor와 함께 사용할 수 있습니다.

왜 사용해야 할까요?

Landlock은 애플리케이션이 필요로 하는 파일이나 디렉터리 집합이 예측 가능한 경우에 빛을 발합니다. 예를 들어, 웹 서버는 자신을 /var/www/html/tmp에만 제한할 수 있습니다.

  • 관리자 개입이나 시스템 전체 설정이 필요 없습니다.
  • 정책이 애플리케이션 코드에 직접 포함됩니다.
  • 특별한 권한이 필요 없으므로 도입이 간단합니다.
  • Rust, Go, Haskell 등용 언어 바인딩이 존재합니다(공식 C 라이브러리는 아직 없습니다).

Rust 예시

use landlock::{
    ABI, AccessFs, Ruleset, RulesetAttr, RulesetCreatedAttr, RulesetStatus, RulesetError,
    path_beneath_rules,
};

fn restrict_thread() -> Result<(), RulesetError> {
    let abi = ABI::V1;
    let status = Ruleset::default()
        .handle_access(AccessFs::from_all(abi))?
        .create()?
        // Read‑only access to /usr, /etc and /dev.
        .add_rules(path_beneath_rules(&["/usr", "/etc", "/dev"], AccessFs::from_read(abi)))?
        // Read‑write access to /home and /tmp.
        .add_rules(path_beneath_rules(&["/home", "/tmp"], AccessFs::from_all(abi)))?
        .restrict_self()?;

    match status.ruleset {
        RulesetStatus::FullyEnforced => println!("Fully sandboxed."),
        RulesetStatus::PartiallyEnforced => println!("Partially sandboxed."),
        RulesetStatus::NotEnforced => println!("Not sandboxed! Please update your kernel."),
    }
    Ok(())
}

Linux 샌드박싱 현황: 왜 중요한가

Linux 채택이 늘어나면서 데스크톱 사용자를 노린 악성코드도 증가하고 있습니다. Linux가 역사적으로 비교적 안전했던 이유는 시장 점유율과 기술적 장벽 때문이지, 본질적인 보안 때문은 아닙니다.

주요 배포판에서 흔히 볼 수 있는 위험 요소:

  • 사용자가 경고 없이 신뢰하지 않은 바이너리를 실행할 수 있다.
  • 쉘 스크립트를 인터넷에서 파이프해 그대로 실행할 수 있다.
  • 비밀번호 없이 sudo를 사용하는 경우가 많아, 필요 시 즉시 root 권한을 얻는다.

비특권 애플리케이션은 보통 다음을 할 수 있습니다:

  • $HOME 파일(~/.ssh, ~/.bashrc, 브라우저 쿠키 등) 읽기
  • 환경 변수와 $PATH 수정
  • systemd 사용자 서비스 생성
  • (X11 환경) 키 입력을 기록하고 입력 장치 읽기
  • 임의의 네트워크 포트에 바인드

기존 샌드박싱 접근 방식

접근 방식장점단점
컨테이너화 (Docker, Podman)서비스에 대한 강력한 격리데스크톱 앱에 부적합; 홈 디렉터리 접근이 번거로움; --privileged 사용 시 격리 무효
Flatpak / Snap그래픽 앱에 적합과도하게 넓은 권한을 요구하는 경우가 많으며, CLI 도구에는 부적합
Firejail애플리케이션별 프로파일 제공명시적 호출이나 래퍼 스크립트가 필요
seccomp시스템 콜을 세밀하게 필터링번거롭고 오류가 발생하기 쉬움; 블랙리스트는 깨지기 쉬우며 TOCTOU 위험 존재
SELinux매우 강력함복잡하고 관리자 정책 필요, 데스크톱에서는 종종 비활성화
AppArmorSELinux보다 쉬움여전히 관리자 정의, 시스템 전체 적용, 때때로 비활성화
Landlock비특권, 애플리케이션 중심, 통합 쉬움, 기본 거부, 5.13부터 지원, 전후 호환아직 성숙 단계; 공식 C 라이브러리 부재

Landlock은 간단하고 자체 포함된 비특권 샌드박싱 도구라는 큰 공백을 메워줍니다.

Landlock이 가져올 수 있는 변화

  • 시스템 데몬은 실제로 필요한 파일만 접근하도록 제한될 수 있다.
  • 데스크톱 애플리케이션(PDF 뷰어, 이미지 뷰어, 브라우저, 워드 프로세서 등)은 열어본 파일에만 접근하도록 제한될 수 있다.
  • 서버(FTP, HTTP)는 필요한 리소스에만 바인드될 수 있어, 침해당하더라도 공격자가 임의의 파일을 읽을 수 없게 된다.
  • 미래의 슈퍼바이저 모드는 Android 스타일의 권한 프롬프트를 제공해 사용자가 접근을 허용하거나 거부할 수 있게 할 수 있다.
  • GUI와 권한 관리자를 결합하면 Landlock은 데스크톱 보안을 크게 향상시킬 수 있다.

Landlock에서 진행 중인 작업

  • Supervise Mode – 사용자 공간 “슈퍼바이저”가 인터랙티브하게 접근을 허용하거나 거부하도록 함(Android 권한 프롬프트와 유사).
  • Socket Restrictions – 소켓 종류와 포트에 대한 세밀한 제어.
  • LANDLOCK_RESTRICT_SELF_TSYNC – 스레드 간 동기화된 제한을 위한 향후 커널 기능.

이러한 개발은 Landlock을 더욱 다재다능하고 사용자 친화적인 샌드박싱 솔루션으로 만들기 위한 것입니다.

Back to Blog

관련 글

더 보기 »