Red Hat Training

A Red Hat training course is available for RHEL 8

6.8. MLS의 보안 관리와 시스템 관리 분리

기본적으로 HEALTH _r 역할에는 secadm_r 역할의 권한이 있습니다. 즉, sensitive _r 역할의 사용자는 보안 정책을 관리할 수 있습니다. 보안 권한을 보다 잘 제어해야 하는 경우 Linux 사용자를 secadm_r 역할에 할당하고 SELinux 정책에서 etcdctl _secadm 모듈을 비활성화하여 보안 관리에서 시스템 관리를 분리할 수 있습니다.

사전 요구 사항

  • SELinux 정책은 mls 로 설정됩니다.
  • SELinux 모드는 enforcing 으로 설정됩니다.
  • policycoreutils-python-utils 패키지가 설치되어 있습니다.
  • secadm_r 역할에 할당할 Linux 사용자:

    • 사용자가 staff_u SELinux 사용자에게 할당됩니다.
    • 이 사용자의 암호가 정의되었습니다.
    주의

    secadm 역할에 할당할 사용자로 로그인할 수 있는지 확인합니다. 그러지 않으면 시스템의 SELinux 정책을 향후 수정하는 것을 방지할 수 있습니다.

절차

  1. /etc/sudoers.d 디렉토리에 사용자의 새 sudoers 파일을 만듭니다.

    # visudo -f /etc/sudoers.d/<sec_adm_user>

    sudoers 파일을 정리하여 유지하려면 < sec_adm_user >를 secadm 역할에 할당할 Linux 사용자로 바꿉니다.

  2. /etc/sudoers.d/ <sec_adm_user > 파일에 다음 내용을 추가합니다.

    <sec_adm_user> ALL=(ALL) TYPE=secadm_t ROLE=secadm_r ALL

    이 행은 모든 호스트에서 < secadmuser >를 인증하여 모든 명령을 수행하고 기본적으로 사용자를 secadm SELinux 유형 및 역할에 매핑합니다.

  3. < sec_adm_user> 사용자로 로그인합니다.

    참고

    SELinux 컨텍스트(SELinux 사용자, 역할 및 유형으로 구성됨)가 변경되도록 하려면 ssh, 콘솔 또는 xdm 을 사용하여 로그인합니다. susudo 와 같은 다른 방법은 전체 SELinux 컨텍스트를 변경할 수 없습니다.

  4. 사용자의 보안 컨텍스트를 확인합니다.

    $ id
    uid=1000(<sec_adm_user>) gid=1000(<sec_adm_user>) groups=1000(<sec_adm_user>) context=staff_u:staff_r:staff_t:s0-s15:c0.c1023
  5. root 사용자에 대해 대화형 쉘을 실행합니다.

    $ sudo -i
    [sudo] password for <sec_adm_user>:
  6. 현재 사용자의 보안 컨텍스트를 확인합니다.

    # id
    uid=0(root) gid=0(root) groups=0(root) context=staff_u:secadm_r:secadm_t:s0-s15:c0.c1023
  7. 정책에서 cryptsetup_secadm 모듈을 비활성화합니다.

    # semodule -d sysadm_secadm
    중요

    semodule -r 명령을 사용하여 시스템 정책 모듈을 제거하는 대신 semodule -d 명령을 사용합니다. semodule -r 명령은 시스템 스토리지에서 모듈을 삭제합니다. 즉 selinux-policy-mls 패키지를 다시 설치하지 않고도 다시 로드할 수 없습니다.

검증

  1. secadm 역할에 할당된 사용자로 root 사용자의 대화형 쉘에서 보안 정책 데이터에 액세스할 수 있는지 확인합니다.

    # seinfo -xt secadm_t
    
    Types: 1
       type secadm_t, can_relabelto_shadow_passwords, (...) userdomain;
  2. root 쉘에서 로그아웃합니다.

    # logout
  3. < sec_adm_user > 사용자로부터 로그아웃합니다.

    $ logout
    Connection to localhost closed.
  4. 현재 보안 컨텍스트를 표시합니다.

    # id
    uid=0(root) gid=0(root) groups=0(root) context=root:sysadm_r:sysadm_t:s0-s15:c0.c1023
  5. authorization _secadm 모듈을 활성화합니다. 이 명령은 실패합니다.

    # semodule -e sysadm_secadm
    SELinux:  Could not load policy file /etc/selinux/mls/policy/policy.31:  Permission denied
    /sbin/load_policy:  Can't load policy:  Permission denied
    libsemanage.semanage_reload_policy: load_policy returned error code 2. (No such file or directory).
    SELinux:  Could not load policy file /etc/selinux/mls/policy/policy.31:  Permission denied
    /sbin/load_policy:  Can't load policy:  Permission denied
    libsemanage.semanage_reload_policy: load_policy returned error code 2. (No such file or directory).
    semodule:  Failed!
  6. GDM _t SELinux 유형에 대한 세부 정보를 표시하려고 합니다. 이 명령은 실패합니다.

    # seinfo -xt sysadm_t
    [Errno 13] Permission denied: '/sys/fs/selinux/policy'