Linux 파일 기능을 관리하는 방법


이 페이지에서

  1. 공통 기능
  2. 필수 도구\n
  3. libcap
    1. 설치
    2. 사용법

    1. 설치
    2. 사용법

    전통적으로 Linux 프로세스는 권한이 있거나(루트로 실행) 권한이 없습니다. 권한이 있는 프로세스는 커널 권한 검사의 대상이 아니므로 시스템에 대한 완전한 권한을 갖습니다. 기능은 특정 권한 검사를 우회하기 위해 프로세스에서 사용할 수 있는 고유하고 독립적인 권한입니다. 기능은 Linux 2.2에서 처음 도입되었으며 이후 버전에서 몇 가지 더 추가되었습니다. 일반적으로 실행 파일에 설정되며 기능이 있는 파일이 실행될 때 프로세스에 자동으로 부여됩니다. 기능은 기본적으로 루트 사용자의 권한을 별도의 권한으로 나누어 공격자가 서비스를 악용하거나 남용하여 얻을 수 있는 액세스 권한을 제한함으로써 보안을 향상시킵니다.

    이 가이드에서는 일반적으로 사용되는 몇 가지 기능을 소개하고 이러한 기능을 보고 수정할 수 있는 방법을 보여줍니다.

    공통 기능

    Linux 커널은 다양한 기능을 구현합니다. 그들 중 일부는 다음과 같습니다.

    • CAP_SYS_ADMIN: 광범위한 작업을 허용합니다. 보다 구체적인 기능을 위해 이 기능을 피해야 합니다.\n
    • CAP_CHOWN: 파일의 사용자 ID 및 그룹 ID를 변경합니다.\n
    • CAP_DAC_READ_SEARCH: 파일 읽기 및 디렉터리 읽기/실행 확인을 무시합니다. 이 기능이 있는 프로그램을 사용하여 시스템의 모든 파일을 읽을 수 있습니다.\n
    • CAP_DAC_OVERRIDE: DAC(Discretionary Access Control)를 재정의합니다. 즉, 읽기/쓰기/실행 권한 검사를 우회합니다. 이 기능은 실행 파일에 파일 시스템의 모든 파일에 액세스하고 수정할 수 있는 기능을 부여합니다.\n
    • CAP_NET_BIND_SERVICE: 1024보다 낮은 포트 번호에 대한 바인딩을 허용합니다.\n
    • CAP_KILL: SIGHUP 및 SIGKILL과 같은 프로세스에 신호를 보내기 위한 권한 검사를 우회합니다.\n
    • CAP_SYS_NICE: 프로세스의 niceness 값과 스케줄링 우선순위를 수정합니다.\n
    • CAP_SYS_RESOURCE: 디스크 할당량, CPU 시간 제한 등과 같은 시스템 리소스에 대한 다양한 제한을 무시할 수 있습니다.\n

    전체 목록은 capability(7) 매뉴얼 페이지에서 볼 수 있습니다.

    파일에는 허용, 상속 가능 및 유효의 세 가지 다른 세트로 기능을 할당할 수 있습니다. 스레드에는 앰비언트 및 바운딩이라는 2개의 추가 세트가 있습니다. 각 세트는 실제로 단일 비트인 파일에 대한 유효 세트를 제외하고 0개 이상의 기능을 포함할 수 있습니다. 이러한 세트는 이 가이드의 범위를 벗어나는 복잡한 커널 동작을 정의합니다. 파일에 기능을 할당할 때 대부분의 경우 허용되고 유효한 세트를 사용합니다.

    참고: SELinux는 기능을 방해할 수 있습니다. 적용 모드의 SELinux가 있는 시스템에서는 프로세스가 해당 기능을 활용하지 못할 수 있습니다.

    필수 도구

    기능 관리를 위한 두 가지 패키지인 libcap 및 libcap-ng가 있습니다. 후자는 전자보다 쉽게 설계되었습니다. 둘 다 이 가이드에서 다룹니다.

    libcap은 파일 기능을 보고 설정하기 위한 getcap 및 setcap을 제공하는 반면 libcap-ng는 두 기능을 하나의 도구인 filecap에 통합합니다.

    libcap

    설치

    Debian, Ubuntu 및 기타 Debian 기반 배포판에서 다음을 사용하여 libcap 유틸리티를 설치할 수 있습니다.

    apt update
    apt install libcap2-bin
    

    CentOS에 설치하려면 다음 명령을 사용하십시오.

    yum install libcap
    

    Fedora에 설치하려면 다음 명령을 사용하십시오.

    dnf install libcap
    

    Arch에 설치하려면 다음 명령을 사용하십시오.

    pacman -Sy libcap

    용법

    getcap은 파일에 할당된 기능이 있는 경우 단순히 표시합니다. 다음 구문을 사용합니다.

    getcap /path/to/binary
    

    예를 들어:

    Getcap은 -r 플래그를 사용하여 재귀적으로 검색할 수도 있습니다. 예를 들어:

    참고: 2>/dev/null은 getcap이 /sys, /proc 등에 있는 파일의 기능을 가져오려고 할 때 발생하는 "지원되지 않는 작업" 오류로 출력이 복잡해지는 것을 방지하는 데 사용됩니다. 이러한 특수 가상 파일 시스템은 기능을 지원하지 않습니다.

    setcap을 사용하여 파일 기능을 설정하려면 다음 구문을 사용하십시오.

    setcap CAP+set filename
    

    예를 들어 허용 및 유효 집합에 CAP_CHOWN 및 CAP_DAC_OVERRIDE를 추가하려면 다음을 사용합니다.

    setcap CAP_CHOWN,CAP_DAC_OVERRIDE+ep file1
    

    파일에서 기능을 제거하려면 -r 플래그를 사용하십시오.

    setcap -r filename
    

    다음은 몇 가지 추가 예입니다.

    libcap-ng

    설치

    Debian, Ubuntu 및 기타 Debian 기반 배포판에 설치하려면:

    apt update
    apt install libcap-ng-utils
    

    CentOS에 설치하려면:

    yum install libcap-ng-utils
    

    Fedora에 설치하려면:

    dnf install libcap-ng-utils
    

    아치에 설치하려면:

    pacman -Sy libcap-ng

    용법

    • filecap 프로그램은 "CAP_" 접두사가 없는 기능을 참조합니다(예: CAP_NET_ADMIN 대신 NET_ADMIN).\n
    • filecap은 상대 경로와 함께 작동하지 않으며 파일이나 디렉토리를 인수로 전달할 때 전체 경로를 예상합니다.\n
    • filecap은 기능 집합을 지정할 수 없으며 기능을 설정할 때 항상 허용 및 유효를 사용합니다.\n

    파일에 할당된 기능을 보려면:

    filecap /full/path/to/file
    

    디렉토리를 재귀적으로 검색하려면 다음을 사용하십시오.

    filecap /full/path/to/dir
    

    filecap으로 전체 파일 시스템을 검색하려면 다음 명령 중 하나를 사용하십시오.

    filecap /
    filecap -a
    

    다음은 filecap을 사용하여 파일 및 디렉터리를 검사하는 몇 가지 예입니다.

    파일에 대한 기능을 설정하려면 다음 구문을 사용하십시오.

    filecap /full/path/to/file cap_name
    

    예를 들어:

    filecap /usr/bin/tac dac_override
    

    기능을 제거하려면 다음 구문을 사용하십시오.

    filecap /full/path/to/file none
    

    다음은 filecap을 사용하여 기능을 설정 및 제거하는 몇 가지 예입니다.

    결론

    기능은 광범위한 보안 응용 프로그램이 있는 강력한 커널 기능입니다. 가능할 때마다 전체 권한 및 루트 SUID로 대체해야 합니다.