Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

3.3. 제한된 사용자 및 제한되지 않은 사용자

각 Linux 사용자는 SELinux 정책을 사용하여 SELinux 사용자에게 매핑됩니다. 이를 통해 Linux 사용자는 SELinux 사용자에 대한 제한을 상속할 수 있습니다. 이 Linux 사용자 매핑은 semanage login -l 명령을 root로 실행하면 표시됩니다.
~]# semanage login -l

Login Name           SELinux User         MLS/MCS Range        Service

__default__          unconfined_u         s0-s0:c0.c1023       *
root                 unconfined_u         s0-s0:c0.c1023       *
system_u             system_u             s0-s0:c0.c1023       *
Red Hat Enterprise Linux에서 Linux 사용자는 기본적으로 SELinux unconfined_u 사용자에 매핑되는 SELinux __default__ 로그인에 매핑됩니다. 다음 행은 기본 매핑을 정의합니다.
__default__               unconfined_u              s0-s0:c0.c1023
다음 절차에서는 새 Linux 사용자를 시스템에 추가하는 방법과 해당 사용자를 SELinux unconfined_u 사용자에게 매핑하는 방법을 보여줍니다. root 사용자가 Red Hat Enterprise Linux에서 기본적으로 수행되므로 제한되지 않은 것으로 가정합니다.

절차 3.4. 새 Linux 사용자를 SELinux unconfined_u 사용자에 매핑

  1. root로 다음 명령을 입력하여 new user라는 새 Linux 사용자를 생성합니다.
    ~]# useradd newuser
  2. Linux newuser 사용자에게 암호를 할당하려면 다음을 수행합니다. root로 다음 명령을 입력합니다.
    ~]# passwd newuser
    Changing password for user newuser.
    New UNIX password: Enter a password
    Retype new UNIX password: Enter the same password again
    passwd: all authentication tokens updated successfully.
    
  3. 현재 세션에서 로그아웃한 다음 Linux newuser 사용자로 로그인합니다. 로그인하면 pam_selinux PAM 모듈은 Linux 사용자를 SELinux 사용자(이 경우 unconfined_u)에 자동으로 매핑하고 결과 SELinux 컨텍스트를 설정합니다. 그런 다음 Linux 사용자의 쉘이 이 컨텍스트를 사용하여 시작됩니다. 다음 명령을 입력하여 Linux 사용자의 컨텍스트를 확인합니다.
    [newuser@localhost ~]$ id -Z
    unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
    
    참고
    시스템에서 newuser 사용자가 더 이상 필요하지 않은 경우 Linux newuser 의 세션에서 로그아웃한 후 계정으로 로그인한 다음 userdel -r newuser 명령을 root로 실행합니다. 그러면 홈 디렉터리와 함께 newuser 가 제거됩니다.
제한된 Linux 사용자 및 제한되지 않은 Linux 사용자는 실행 가능하고 쓰기 가능한 메모리 검사의 영향을 받으며 MCS 또는 MLS에도 제한됩니다.
사용 가능한 SELinux 사용자를 나열하려면 다음 명령을 입력합니다.
~]$seinfo -u
Users: 8
   sysadm_u
   system_u
   xguest_u
   root
   guest_u
   staff_u
   user_u
   unconfined_u
이러한 info 명령은 기본적으로 설치되지 않는 setools-console 패키지에서 제공합니다.
제한되지 않은 Linux 사용자가 SELinux 정책에서 unconfined_t 도메인에서 자체 제한된 도메인으로 전환할 수 있는 애플리케이션으로 정의하는 애플리케이션을 실행하는 경우 unconfined Linux 사용자는 여전히 제한된 도메인의 제한 사항을 받습니다. 이 경우의 보안 이점은 Linux 사용자가 제한되지 않고 있는 경우에도 애플리케이션이 제한되어 있다는 것입니다. 따라서 애플리케이션에서 결함을 악용하는 것은 정책에 의해 제한될 수 있습니다.
마찬가지로 제한된 사용자에게 이러한 검사를 적용할 수 있습니다. 제한된 각 Linux 사용자는 제한된 사용자 도메인에 의해 제한됩니다. SELinux 정책은 제한된 사용자 도메인에서 대상 제한 도메인으로의 전환을 정의할 수도 있습니다. 이러한 경우 제한된 Linux 사용자에게는 해당 대상 제한된 도메인의 제한 사항이 적용됩니다. 주요 점은 특별 권한이 역할에 따라 제한된 사용자와 연결되어 있다는 것입니다. 아래 표에서는 Red Hat Enterprise Linux의 Linux 사용자를 위한 기본 제한된 도메인의 예를 확인할 수 있습니다.

표 3.1. SELinux 사용자 기능

사용자 Role 도메인 X 윈도우 시스템 su 또는 sudo 홈 디렉토리 및 /tmp에서 실행 (기본값) 네트워킹
sysadm_u sysadm_r sysadm_t 제공됨 su sudo 제공됨 제공됨
staff_u staff_r staff_t 제공됨 sudo 제공됨 제공됨
user_u user_r user_t 제공됨 제공되지 않음 제공됨 제공됨
guest_u guest_r guest_t 제공되지 않음 제공되지 않음 제공됨 제공되지 않음
xguest_u xguest_r xguest_t 제공됨 제공되지 않음 제공됨 Firefox만
  • user_t,guest_txguest_t 도메인의 Linux 사용자는 SELinux 정책에서 허용하는 경우에만 setuid(setuid) 애플리케이션만 실행할 수 있습니다(예: passwd). 이러한 사용자는 susudo setuid 애플리케이션을 실행할 수 없으므로 이러한 애플리케이션을 사용하여 루트가 될 수 없습니다.
  • sysadm_t,staff_t,user_txguest_t 도메인의 Linux 사용자는 X Window 시스템 및 터미널을 사용하여 로그인할 수 있습니다.
  • 기본적으로 staff_t,user_t,guest_t 도메인의 Linux 사용자는 홈 디렉터리 및 /tmp 에서 애플리케이션을 실행할 수 있습니다. 사용자의 권한을 상속하는 애플리케이션을 실행하지 못하도록 하려면 guest_exec_contentxguest_exec_content부울을 off 로 설정합니다. 이를 통해 결함이 있는 애플리케이션 또는 악성 애플리케이션이 사용자의 파일을 수정하지 못하도록 방지할 수 있습니다.
    홈 디렉토리 및 /tmp 에서 사용자가 애플리케이션을 실행하지 못하도록 허용 및 방지하는 방법에 대한 정보는 6.6절. “사용자 애플리케이션 실행 부울” 을 참조하십시오.
  • xguest_t 도메인에 있는 유일한 네트워크 액세스 Linux 사용자는 Firefox 에서 웹 페이지에 연결하는 것입니다.
system_u 는 시스템 프로세스 및 개체의 특수 사용자 ID입니다. Linux 사용자와 연결하면 안 됩니다. 또한 unconfined_uroot 는 제한되지 않은 사용자입니다. 이러한 이유로 앞서 언급한 SELinux 사용자 기능 테이블에 포함되지 않습니다.
이미 언급한 SELinux 사용자와 함께 해당 사용자에게 매핑할 수 있는 특별한 역할이 있습니다. 이러한 역할은 SELinux에서 사용자가 수행할 수 있는 작업을 결정합니다.
  • webadm_r 은 Apache HTTP 서버와 관련된 SELinux 유형만 관리할 수 있습니다. 자세한 내용은 13.2절. “유형” 을 참조하십시오.
  • dbadm_r 은 MariaDB 데이터베이스 및 PostgreSQL 데이터베이스 관리 시스템과 관련된 SELinux 유형만 관리할 수 있습니다. 자세한 내용은 20.2절. “유형”21.2절. “유형” 을 참조하십시오.
  • logadm_rsyslogauditlog 프로세스와 관련된 SELinux 유형만 관리할 수 있습니다.
  • secadm_r 은 SELinux만 관리할 수 있습니다.
  • auditadm_r 은 감사 하위 시스템과 관련된 프로세스만 관리할 수 있습니다.
사용 가능한 역할을 모두 나열하려면 다음 명령을 입력합니다.
~]$ seinfo -r
앞에서 언급한 것처럼, 이러한info 명령은 기본적으로 설치되지 않는 setools-console 패키지에서 제공합니다.

3.3.1. sudo 전환 및 SELinux 역할

경우에 따라 제한된 사용자는 root 권한이 필요한 관리 작업을 수행해야 합니다. 그렇게 하려면 제한된 사용자가 sudo 명령을 사용하여 제한된 관리자 SELinux 역할을 얻어야 합니다. sudo 명령은 신뢰할 수 있는 사용자에게 관리 액세스 권한을 제공하는 데 사용됩니다. 사용자가 sudo 를 사용하여 관리 명령에 우선하면 자신의 암호를 묻는 메시지가 표시됩니다. 그런 다음, 인증되고 명령이 허용되었다고 가정하면 root 사용자인 것처럼 관리 명령이 실행됩니다.
표 3.1. “SELinux 사용자 기능” 에 표시된 대로 staff_usysadm_u SELinux 제한 사용자만 기본적으로 sudo 를 사용할 수 있습니다. 이러한 사용자가 sudo 를 사용하여 명령을 실행하는 경우 /etc/sudoers 구성 파일에 지정된 규칙이나 해당 파일이 있는 경우 /etc/ sudoers.d/ 디렉터리에 있는 해당 파일에 따라 역할을 변경할 수 있습니다.

절차 3.5. sudo 전환 구성

다음 절차에서는 새로 생성된 SELinux_user_u 제한된 사용자를 default_role_r 에서 관리자_r 관리자 역할로 전환하기 위해 sudo 를 설정하는 방법을 보여줍니다.
참고
기존 SELinux 사용자에 대해 제한된 관리자 역할을 구성하려면 처음 두 단계를 건너뜁니다.
  1. 새 SELinux 사용자를 생성하고 이 사용자에 대한 기본 SELinux 역할 및 제한된 관리자 역할을 지정합니다.
    ~]# semanage user -a -r s0-s0:c0.c1023 -R "default_role_r administrator_r" SELinux_user_u
  2. 기본 SElinux 정책 컨텍스트 파일을 설정합니다. 예를 들어 staff_u SELinux 사용자와 동일한 SELinux 규칙을 보유하려면 staff_u 컨텍스트 파일을 복사합니다.
    ~]# cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/SELinux_user_u
  3. 새로 생성된 SELinux 사용자를 기존 Linux 사용자에게 매핑합니다.
    semanage login -a -s SELinux_user_u -rs0:c0.c1023 linux_user
  4. /etc/sudoers.d/ 디렉토리에 Linux 사용자와 이름이 같은 새 구성 파일을 만들고 다음 문자열을 추가합니다.
    ~]# echo "linux_user ALL=(ALL) TYPE=administrator_t ROLE=administrator_r /bin/bash " > /etc/sudoers.d/linux_user
  5. restorecon 유틸리티를 사용하여 linux_user 홈 디렉터리에 레이블을 다시 지정합니다.
    ~]# restorecon -FR -v /home/linux_user
  6. 새로 생성된 Linux 사용자로 시스템에 로그인하고 사용자가 기본 SELinux 역할로 레이블이 지정되어 있는지 확인합니다.
    ~]$ id -Z
    SELinux_user_u:default_role_r:SELinux_user_t:s0:c0.c1023
  7. sudo 를 실행하여 사용자의 SELinux 컨텍스트를 /etc/sudoers.d/linux_user 에 지정된 대로 보조 SELinux 역할로 변경합니다. sudo 와 함께 사용되는 -i 옵션을 사용하면 대화형 쉘이 실행됩니다.
    ~]$ sudo -i
    ~]# id -Z
    SELinux_user_u:administrator_r:administrator_t:s0:c0.c1023
default_role_r 또는 administrator_r 와 같은 자리 표시자를 더 잘 이해하려면 다음 예제를 참조하십시오.

예 3.1. sudo 전환 구성

이 예제에서는 기본 역할 staff _ r 이 할당된 새 SELinux 사용자를 만들고 sudo 를 사용하여 staff_r 에서 webadm _r 로 제한됨_u 의 역할을 변경하도록 구성합니다.
  • tekton _r 또는 unconfined_r 역할에 root 사용자로 다음 명령을 모두 입력합니다.
    ~]# semanage user -a -r s0-s0:c0.c1023 -R "staff_r webadm_r" confined_u
    ~]# cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/confined_u
    ~]# semanage login -a -s confined_u -rs0:c0.c1023 linux_user
    ~]# restorecon -FR -v /home/linux_user
    ~]# echo "linux_user ALL=(ALL) ROLE=webadm_r TYPE=webadm_t /bin/bash " > /etc/sudoers.d/linux_user
  • 새로 생성된 Linux 사용자로 시스템에 로그인하고 사용자가 기본 SELinux 역할로 레이블이 지정되어 있는지 확인합니다.
    ~]$ id -Z
    confined_u:staff_r:staff_t:s0:c0.c1023
    ~]$ sudo -i
    ~]# id -Z
    confined_u:webadm_r:webadm_t:s0:c0.c1023