기업의 IT 현대화를 위한
레드햇 엔터프라이즈 리눅스 8을 소개합니다

기업의 IT 현대화를 위한
레드햇 엔터프라이즈 리눅스 8을 소개합니다

들어가며

레드햇 엔터프라이즈 리눅스(Red Hat Enterprise Linux, RHEL)는 전 세계 및 국내에서 가장 많이 사용하는 기업용 리눅스 OS입니다. 2000년 첫 버전을 출시한 이후 업그레이드를 계속해 2021년 5월 현재 8.3 버전이 배포되고 있습니다. 레드햇이 지원하는 페도라 프로젝트(Fedora Project)에서 만든 리눅스 배포판인 페도라(Fedora)를 기반으로 합니다.

RHEL은 버전별로 라이프 사이클이 정해져 있습니다. 버전마다 10년 동안 하드웨어 드라이버, 보안 패치 등의 업데이트가 제공됩니다. RHEL 7과 8의 라이프사이클 종료일은 다음과 같습니다.

[표 1] RHEL 라이프사이클 비교
RHEL 버전 출시일 라이프사이클 종료일
7 2014년 06월 10일 2024년 06월 30일
8 2019년 05월 07일 2029년 05월 31일
[표 1] RHEL 라이프사이클 비교

라이프사이클이 종료되면 버그 및 보안 패치, 기술 이슈에 대한 원인 분석 서비스에 제한이 생깁니다. 다만 이전에 릴리스된 패치에 대해서는 지원이 계속되며 지식베이스 고객포털 서비스(Red Hat Knowledgebase)도 계속 이용할 수 있습니다.

최신 버전인 RHEL 8이 배포되면서 이전 버전의 RHEL을 사용 중인 시스템 운영관리자를 중심으로 RHEL 7 대비 8은 어떤 점이 변경되었는지, 마이그레이션을 해야 하는지에 대한 궁금증이 커지고 있습니다. 이에 본 아티클에서는 필자가 고객사로부터 자주 문의받는 사항을 중심으로 RHEL 7과 8 간의 차이점을 짚어보고 시스템 운영관리자라면 꼭 알아야 할 RHEL 8의 특징을 살펴보겠습니다.

RHEL 7과 RHEL 8의 주요 차이점

RHEL 7과 8의 주요한 차이점은 다음과 같습니다.

[표 2] RHEL 버전 비교
항목 RHEL 7 RHEL 8
커널(Kernel) • 3.10.0-x (Maipo) • 4.18.0-x (Ootpa)
최대 파일시스템 크기(XFS) • 500 TB • 1,000 TB
지원 H/W 아키텍처 • 64-bit Intel
• 64-bit AMD
• IBM Power LE
• IBM z Systems
• 64-bit Intel
• 64-bit AMD
• IBM Power LE
• IBM z Systems
• 64-bit ARM
ISO 이미지 • Boot ISO
• Binary DVD ISO
• Supplementary Binary DVD
• Boot ISO
• Binary DVD ISO
기본 I/O 스케줄러 • deadline
※ 사용 가능한 스케줄러:
deadline, cfq, noop, anticipatory
• mq-deadline
※ 사용 가능한 스케줄러:
mq-deadline, kyber, bfq, none
컨테이너 기술 • docker • podman, buildah, skopeo
계정 • 99의 ID를 가진 nobody 사용자 및 그룹
• 65534의 ID를 가진 nfsnobody 사용자 및 그룹
• 'nobody'와 'nfsnobody' 사용자 및 그룹이 'nobody' ID (65534)로 병합
NFS(Network Files System) • 기본 NFS 구성 파일: "/etc/sysconfig/nfs"
• NFS 서비스
- nfs-server.service
- rpc-gssd.service
- nfs-idmapd.service
- rpc-statd.service
• 기본 NFS 구성 파일: "/etc/nfs.conf"
• NFS 서비스
- nfs.service
- nfs-secure.service
- rpcgssd.service
- nfs-idmap.service
- rpcidmapd.service
- nfs-lock.service
- nfslock.service
• UDP 미지원
[표 2] RHEL 버전 비교

RHEL 8은 운영체제의 핵심인 커널부터 I/O 스케줄러, 컨테이너 등이 변경되었습니다. 이에 따라 기업·기관의 시스템 운영관리자는 RHEL 8 적용에 앞서 현재 가동 중인 서비스에 필요한 소프트웨어 설치 유무를 확인하고 성능에 미칠 영향을 먼저 검토해야 합니다.

저장소(Repositories)

RHEL 8은 "BaseOS", "AppStream" 2개 저장소를 사용합니다.

BaseOS 저장소
운영체제의 기반이 되는 기본 기능의 코어 세트를 제공하는데 사용됩니다. 커널과 같은 기본 OS 기능의 핵심 패키지 그룹으로 물리적 하드웨어, 가상머신, 클라우드 인스턴스 또는 컨테이너에서 실행 가능하도록 하는 패키지를 제공합니다.

AppStream 저장소
운영 서비스에서 수행 가능한 애플리케이션(Apache, Cyrus-imapd, Vim 등), 런타임 언어(Java, PHP, Python 등) 및 데이터베이스(MariaDB, PostgreSQL 등) 등이 포함됩니다. BaseOS 저장소의 핵심 운영체제 패키지보다 더 자주 업데이트됩니다. BaseOS 저장소와 AppStream 저장소의 분리로 AppStream 저장소 패키지 업데이트 시 이미 구성되어 있는 플랫폼 또는 특정 배포의 기본 안정성에 영향을 주지 않고 업데이트가 가능한 유연성을 제공합니다. 예들 들어, PostgreSQL의 경우 v10과 v9.6을 제공하고 원하는 버전을 설치해 사용할 수 있습니다. 이전에 단일 패키지로 구성되어 최신 버전만을 지원했지만 제공되는 버전 중 원하는 것을 선택해 사용 가능합니다.

소프트웨어 관리

RHEL 8에서 소프트웨어 관리는 "yum" 대신 "dnf" 명령어를 사용합니다. 새로운 "dnf"는 기존 "yum"의 낮은 성능, 높은 메모리 사용량 및 비효율적인 의존성 등의 기술 문제를 해결하였습니다. 기본적인 소프트웨어 설치, 업데이트, 삭제는 아래와 같이 할 수 있습니다.

== 새로운 패키지 설치
# dnf install package-name
== 패키지 업데이트
# dnf update package-name
== 패키지 삭제
# dnf remove package-name

RHEL 8은 "dnf"를 기반으로 하지만 RHEL 7에서 사용되는 "yum"과 호환됩니다. "yum" 명령과 대부분의 옵션은 RHEL 7과 동일한 방식으로 작동합니다.

== 새로운 패키지 설치
# yum install package-name
== 패키지 업데이트
# yum update package-name
== 패키지 삭제
# yum remove package-name

네트워크 스트립트

RHEL 8에서 네트워크 설정은 "nmcli", "nmtui" 명령어를 사용합니다. RHEL 8부터는 RHEL 7에서 사용되던 "network-scripts"를 통한 ifup, ifdown 명령어를 사용할 수 없습니다. 대신 “NetworkManager” 서비스를 사용하고 "nmcli", "nmtui" 명령어를 통해 제어합니다. "nmcli" 명령어를 사용하여 이더넷 연결을 추가하는 방법은 다음과 같습니다.

== 이더넷 연결을 위한 새 NetworkManager 연결 프로필 추가
# nmcli connection add con-name [NAME] ifname [NIC] type Ethernet
== IPv4 주소 설정
# nmcli connection modify [NAME] ipv4.addresses [IPv4 IP]
== IPv6 주소 설정
# nmcli connection modify [NAME] ipv6.addresses [IPv6 IP]
== IPv4 및 IPv6 연결 방법을 수동으로 설정
# nmcli connection modify [NAME] ipv4.method manual
# nmcli connection modify [NAME] ipv6.method manual
IPv4 및 IPv6 기본 게이트웨이 설정
# nmcli connection modify [NAME] ipv4.gateway [IPv4 GW]
# nmcli connection modify [NAME] ipv6.gateway [IPv6 GW]
== IPv4 및 IPv6 DNS 서버 주소 설정
# nmcli connection modify [NAME] ipv4.dns [IPv4 DNS]
# nmcli connection modify [NAME] ipv6.dns [IPv6 DNS]
== IPv4 및 IPv6 연결을 위한 DNS 검색 도메인 설정
# nmcli connection modify [NAME] ipv4.dns-search [IPv4 DNS-SEARCH]
# nmcli connection modify [NAME] ipv6.dns-search [IPv6 DNS-SEARCH]
== 연결 프로파일 활성화
# nmcli connection up [NAME]
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/13)
== 장치 및 연결 상태 표시
# nmcli device status
DEVICE TYPE STATE CONNECTION
[NIC] ethernet connected [NIC]
== 연결 프로파일의 모든 설정을 표시
# nmcli connection show [NIC]
connection.id: [NIC]
connection.uuid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
connection.stable-id: --
connection.type: 802-3-ethernet
connection.interface-name: [NIC]

기본으로 제공되지는 않지만 "ifup", "ifdown" 명령어를 사용하기 위해 "network-scripts"를 수동으로 설치할 수 있습니다. 패키지는 BaseOS 저장소에 존재하며 # dnf install network-scripts 명령으로 설치 가능합니다. 설치 후 /etc/sysconfig/network-scripts/ 하위에서 "ifup", "ifdown" 명령어를 확인할 수 있습니다.

# dnf install network-scripts

# ls /etc/sysconfig/network-scripts/{ifup,ifdown}
/etc/sysconfig/network-scripts/ifdown /etc/sysconfig/network-scripts/ifup

시간 동기화

RHEL 8에서 시간 동기화는 "chronyd"를 사용합니다. NTP(Network Time Protocol)를 이용한 시간 동기화를 위해 RHEL 7에서는 "ntpd" 혹은 "chronyd"를 사용할 수 있었지만 RHEL 8은 "chronyd"만 지원합니다. 즉시 시간 동기화를 위해 사용했던 "ntpdate" 명령어는 RHEL 8에서는 사용할 수 없으며 아래와 같이 수행해야 합니다.

== 서비스 중지
# systemctl stop chronyd
== 즉시 동기화 (서비스 중지 후 가능)
# chronyd –q
== 서비스 시작
# systemctl start chronyd
또는
== 즉시 동기화 (서비스 구동 중 가능)
# chronyc -a makestep

보안

tcp_wrappers
RHEL 8은 여러 가지 서비스의 접근 제어가 가능했던 "tcp_wrappers" 기능을 지원하지 않으며 "firewalld"로 대체되었습니다. 기본 패키지에서 "tcp_wrappers"가 제외되어 /etc/hosts.{allow,deny}를 통한 보안 설정은 불가능합니다. 10.10.10.0/24 네트워크에 SSH를 허용하고 다른 모든 네트워크를 차단하려면 아래와 같이 설정하면 됩니다.

== ssh 서비스를 기본 방화벽에서 제거합니다.
# firewall-cmd --permanent --remove-service=ssh
== newsshzone 이름으로 새로운 zone을 추가합니다.
# firewall-cmd --permanent --new-zone=newsshzone
# firewall-cmd --permanent --zone=newsshzone --add-source=10.10.10.0/24
== 추가된 newsshzone에 ssh 서비스를 추가합니다.
# firewall-cmd --permanent --zone=newsshzone --add-service=ssh
== 방화벽을 다시 로드하여 새 구성을 활성화합니다.
# firewall-cmd –reload

PAM
계정 잠금 제어 시 사용하던 PAM 패키지의 "pam_faillock" 모듈 사용법이 변경되었습니다. 기존의 "authconfig"를 대체한 "authselect"를 사용하여 "pam_faillock" 모듈을 활성화할 수 있습니다. RHEL 7에서는 /etc/pam.d/system-auth 및 /etc/pam.d/password-auth에 pam_faillockd을 설정합니다. (두 파일을 모두 변경해야 적용됩니다.)


auth required pam_faillock.so preauth silent audit deny=3 unlock_time=600

auth [default=die] pam_faillock.so authfail audit deny=3 unlock_time=600

account required pam_faillock.so

RHEL 8은 RHEL 7와 달리 /etc/pam.d/system-auth 및 /etc/pam.d/password-auth를 수동으로 편집하는 것은 권장하지 않습니다. "pam_faillock" 모듈을 사용하려면 아래와 같이 하면 됩니다.

== faillock 활성화
# authselect enable-feature with-faillock
== faillock 비활성화
# authselect disable-feature with-faillock
== /etc/security/faillock.conf 구성 파일에서 설정을 읽을 수 있습니다.
# grep -vE '^#|^$' /etc/security/faillock.conf
silent
deny = 3
unlock_time = 1200
== test2 계정에 대한 실패한 로그인 정보 확인
# faillock --user test2
test2:
When Type Source Valid
2021-04-22 12:12:12 RHOST 127.0.0.1 V
2021-04-22 12:12:13 RHOST 127.0.0.1 V
2021-04-22 12:12:17 RHOST 127.0.0.1 V
== test2 계정 잠금 해제
# faillock --reset --user test2

기본 네트워크 패킷 필터링

RHEL 8에서 패킷 필터링은 “iptables” 대신 "nft" 명령어를 사용합니다. RHEL 7에서 사용되던 "iptables" 명령어도 여전히 지원되지만, 추후 “iptables” 명령어는 지원되지 않을 수 있어 신규 스크립트 작성시에는 “nft” 명령어를 사용하는 것을 권장합니다. "nft" 명령어는 기존 "iptables" 명령어에 비해 편의성, 기능 및 성능이 크게 향상되었습니다. “iptables” 및 “nft” 명령어를 비교하면 다음과 같습니다.

모든 규칙 나열

iptables nft
# iptables-save # nft list ruleset

특정 테이블 및 체인 나열

iptables nft
# iptables –L # nft list table ip filter
# iptables -L INPUT # nft list chain ip filter INPUT
# iptables -t nat -L PREROUTING # nft list chain ip nat PREROUTING

기존 “iptables”의 규칙을 동일한 “nft” 규칙으로 변환하기 위한 “iptables-translate”, “ip6tables-translate” 도구를 제공합니다. 아래와 같이 “iptables” 규칙을 “nft” 규칙으로 변환할 수 있습니다.

# iptables-translate -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3000 | nft add rule ip nat PREROUTING tcp dport 80 counter
redirect to :3000

마치며

RHEL 8은 이전 버전에 비해 다양한 워크로드에서 향상된 성능을 제공합니다. 또한 지속적인 취약점 모니터링을 통해 중대 이슈 발생 시 신속한 업데이트를 제공함으로써 시스템 전반의 보안과 안정성이 향상되었습니다.

날마다 새로운 애플리케이션이 등장하고 사용량이 늘어나면서 IT 인프라의 복잡성도 높아지고 있습니다. 특히 서버 운영체제를 민첩하고 안정적으로 관리하는 것은 업무 성과 및 고객 서비스 성능과 직결됩니다. 만약 구 버전의 RHEL을 운영하고 있다면 예상치 못한 기술 이슈에 대비하고 인프라 효율을 향상시키기 위해 최신 버전으로 업그레이드 하는 것을 고려해야 합니다. 본 아티클이 RHEL 8을 검토·채택하고 마이그레이션 해야 하는 시스템 운영관리자들에게 많은 도움이 되기를 바랍니다.

# References
[1] https://access.redhat.com/ko/support/policy/updates/errata
[2] https://access.redhat.com/articles/rhel-limits
[3] https://access.redhat.com/solutions/1532
[4] https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/package_manifest/appstream-repository
[5] https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/package_manifest/baseos-repository
[6] https://access.redhat.com/solutions/3935901
[7] https://access.redhat.com/solutions/5313011
[8] https://access.redhat.com/solutions/4492191
[9] https://access.redhat.com/solutions/3103631
[10] https://access.redhat.com/solutions/3938381
[11] https://access.redhat.com/solutions/3906701
[12] https://access.redhat.com/solutions/62949
[13] https://access.redhat.com/solutions/4175751
[14] https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8-beta/html/considerations_in_adopting_rhel_8/file-systems-and-storage_considerations-in-adopting-rhel-8
[15] https://www.redhat.com/en/blog/red-hat-enterprise-linux-8-improves-performance-modern-workloads



▶  해당 콘텐츠는 저작권법에 의하여 보호받는 저작물로 기고자에게 저작권이 있습니다.
▶  해당 콘텐츠는 사전 동의 없이 2차 가공 및 영리적인 이용을 금하고 있습니다.


공유하기 열기
김문경
김문경 IT 테크놀로지 전문가

에스코어㈜ 소프트웨어사업부 오픈소스SW그룹

에스코어 소프트웨어사업부에서 Red Hat Enterprise Linux 기술 서비스를 담당하고 있습니다.