Linux 파일 기능을 관리하는 방법
이 페이지에서
- 공통 기능
- 필수 도구\n
- libcap
- 설치
- 사용법
- 설치
- 사용법
전통적으로 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로 대체해야 합니다.