이 Mattermost 배포에는 다음 단계가 포함됩니다: PostgreSQL 데이터베이스 설치, 데이터베이스 준비, Mattermost 서버 다운로드, 서버 설치, 서버 설정, 서버 업데이트. 데이터베이스 준비 문서를 따라 Mattermost를 위한 PostgreSQL 데이터베이스를 설정합니다.
최소 시스템 요구 사항:
운영 체제: Enterprise Linux 7+, Oracle Linux 6+, Oracle Linux 7+
터미널 창에서 Mattermost 서버를 호스팅할 시스템에 SSH로 접속합니다. wget을 사용하여 다음 명령 중 하나로 설치할 Mattermost 서버 릴리즈를 다운로드합니다. 필요에 따라 링크에서 amd64를 적절한 아키텍처(예: ARM 기반 시스템의 경우 arm64)로 교체하세요.
Mattermost 서버를 설치하기 전에 모든 저장소를 업데이트하고, 필요한 경우 다음 명령을 실행하여 기존 패키지를 업데이트하는 것을 권장합니다:
sudo dnf update
sudo dnf upgrade
업데이트 및 필요한 시스템 재부팅이 완료되면, tarball을 추출하고 사용자 및 그룹을 생성하며 파일/폴더 권한을 설정하여 Mattermost 서버를 설치합니다.
a. 먼저 tarball을 추출합니다:
tar -xvzf mattermost*.gz
b. 전체 폴더를 ``/opt`` 디렉터리(또는 원하는 경로)로 이동합니다:
sudo mv mattermost /opt
c. 기본 스토리지 폴더를 생성합니다. 기본적으로 Mattermost 서버는 ``/opt/mattermost/data``를 파일 폴더로 사용합니다. 설정 중 시스템 콘솔에서 변경할 수 있습니다(S3와 같은 대안적인 스토리지 사용 포함):
sudo mkdir /opt/mattermost/data</code></pre>
<div class="admonition note"><div class="admonition-title">Note
사용자 지정 경로를 선택하는 경우, 이후 모든 단계에서 해당 경로를 사용하세요.`
mattermost라는 사용자 및 그룹을 설정합니다:
sudo useradd --system --user-group mattermost
Note
사용자 지정 사용자 이름과 그룹 이름을 선택하는 경우, 이후 모든 단계에서 해당 이름을 사용하세요.
* SqlSettings 아래에서 DriverName을 "postgres"로 설정합니다. 이것이 모든 Mattermost 설치에 권장되는 기본 데이터베이스입니다.
* SqlSettings 아래에서 DataSource를 "postgres://mmuser:<mmuser-password>@<host-name-or-IP>:5432/mattermost?sslmode=disable&connect_timeout=10"으로 설정하고 mmuser, <mmuser-password>, <host-name-or-IP> 및 mattermost를 사용 중인 데이터베이스 이름으로 교체합니다.
* ServiceSettings 아래에서 "SiteURL"을 설정합니다: Mattermost 애플리케이션의 도메인 이름(예: https://mattermost.example.com).
Note
SupportSettings 아래에서 "SupportEmail"을 설정하여 지원 이메일을 구성하는 것을 권장합니다. 이것은 사용자가 도움이 필요할 때 연락할 이메일 주소입니다.
config.json 구성 파일을 수정한 후 Mattermost 서버를 시작할 수 있습니다:
요구 사항에 따라 마지막 단계로 sudo systemctl enable mattermost.service를 실행하면 시스템 부팅 시 Mattermost가 자동으로 시작됩니다. 이전 단계 후 Mattermost 시작 시 오류가 발생하지 않으면 설정이 완료된 것입니다. 오류가 발생했다면 계속 진행하세요.
강화된 RHEL 시스템에 Mattermost를 배포할 때 추가 보안 구성이 필요할 수 있습니다. 아래에서 사용 중인 보안 도구에 해당하는 탭을 선택하세요:
SELinux가 기본적으로 강제(enforcing) 모드로 활성화된 RHEL9에서 Mattermost를 배포할 때는 추가 구성이 필요합니다.
SELinux는 액세스 제어 보안 정책을 제공하는 보안 모듈입니다. RHEL 및 CentOS 시스템에서 기본적으로 활성화되어 있습니다. SELinux는 파일, 디렉터리, 포트에 대한 접근을 차단할 수 있으며, 이로 인해 Mattermost 시작 시 문제가 발생할 수 있습니다. 이러한 문제를 해결하려면 Mattermost 바이너리와 디렉터리에 적절한 SELinux 컨텍스트를 설정하고, Mattermost가 포트에 바인딩할 수 있도록 허용해야 합니다.
sestatus 명령을 실행하여 SELinux가 활성화되어 있고 강제 모드인지 확인합니다. enforcing이라면 올바르게 구성해야 합니다.
SELinux는 바이너리에 대한 보안 컨텍스트를 적용합니다. Mattermost 바이너리를 안전한 것으로 레이블 지정하려면 다음 SELinux 컨텍스트로 설정해야 합니다.
sudo semanage fcontext -a -t bin_t "/opt/mattermost/bin(/.*)?"
sudo restorecon -RF /opt/mattermost/bin
이제 다음 명령으로 Mattermost를 다시 시작해 보세요:
sudo systemctl start mattermost
오류가 없다면 Mattermost가 실행 중인지 확인합니다: curl ``http://localhost:8065``. Mattermost 서버에서 반환된 HTML이 표시되어야 합니다. 설정이 완료되었습니다!
Mattermost 시작 시 오류가 발생하면 계속 진행하기 전에 ``/opt/mattermost/logs``에 파일이 있는지 확인합니다. 해당 디렉터리에 ``mattermost.log``가 있다면 ``config.json``의 구성 문제일 가능성이 높습니다. 계속하기 전에 이전 단계를 다시 확인하세요.
/opt/mattermost에 대해 다른 컨텍스트 시도
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SELinux는 파일 및 디렉터리에 대한 보안 컨텍스트를 적용합니다. Mattermost 디렉터리를 안전한 것으로 레이블 지정하려면 적절한 SELinux 컨텍스트를 설정해야 합니다.
1. ``ls -Z /opt/mattermost``를 실행하여 현재 컨텍스트를 확인합니다. ``drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 mattermost``와 같은 내용이 반환되면 ``default_t``는 SELinux가 이 디렉터리의 용도를 알지 못한다는 것을 나타냅니다.
2. ``sudo semanage fcontext -a -t httpd_sys_content_t "/opt/mattermost(/.*)?"``를 실행하여 웹 서비스나 애플리케이션과 호환되는 SELinux 유형을 할당해 안전한 컨텍스트를 설정합니다. 일반적으로 파일 제공에 사용되는 ``httpd_sys_content_t``가 많이 쓰입니다. 디렉터리와 그 내용을 재귀적으로 일치시켜야 합니다. ``sudo restorecon -R /opt/mattermost``를 실행하여 변경 사항을 적용합니다.
Mattermost가 포트에 바인딩할 수 있도록 허용
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Mattermost에 특정 포트(예: 8065)가 필요한 경우, Mattermost가 해당 포트에 바인딩할 수 있도록 SELinux가 허용하는지 확인합니다. ``sudo semanage port -l | grep 8065`` 명령을 실행하고, 포트가 목록에 없으면 ``sudo semanage port -a -t http_port_t -p tcp 8065``를 실행하여 추가합니다. 이때 ``8065``를 필요한 포트로 교체하세요.
커스텀 정책 처리
^^^^^^^^^^^^^^^^^^^^^^
Mattermost에 SELinux가 차단하는 작업이 필요한 경우 커스텀 정책을 생성해야 합니다.
1. 먼저 ``sudo ausearch -m avc -ts recent``를 실행하거나 감사 로그(``sudo cat /var/log/audit/audit.log | grep denied``)를 확인하여 로그에서 SELinux 거부 사항을 확인합니다.
2. 필요한 경우 ``audit2allow``를 설치하여 정책을 자동으로 생성하는 정책 모듈을 만듭니다.
sudo yum install -y policycoreutils-python-utils
sudo grep mattermost /var/log/audit/audit.log | audit2allow -M mattermost_policy
sudo semodule -i mattermost_policy.pp
구성 테스트
^^^^^^^^^^^^^^^^^^^^^^
``sudo systemctl restart mattermost``를 실행하여 Mattermost를 재시작하고 구성이 예상대로 작동하는지 확인합니다. 실패하는 경우 로그를 다시 확인하여 다른 SELinux 관련 문제를 파악하세요.
테스트 목적으로 Mattermost를 빠르게 작동시켜야 하나요?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- ``sudo setenforce 0`` 명령을 실행하여 SELinux를 permissive(허용) 모드로 변경할 수 있습니다. 이 모드에서는 정책이 적용되지 않고 로그만 기록됩니다.
- 이 명령은 SELinux 모드를 "permissive"로 변경합니다. permissive 모드에서는 정책이 적용되지 않으며, 위반 사항이 차단되는 대신 기록됩니다. 이는 SELinux 정책 관련 문제를 디버깅하고 트러블슈팅하는 데 유용할 수 있습니다.
- 컨텍스트가 필요한 대로 작동하면 ``sudo setenforce 1`` 명령을 실행하여 강제(enforcing) 모드를 다시 활성화하세요.
추가 리소스
^^^^^^^^^^^^^^^^^^^^^^^
- `SELinux 사용자 및 관리자 가이드 <https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/index>`_
- `SELinux 프로젝트 위키 <https://github.com/SELinuxProject/selinux>`_
- `SELinux 소개 <https://github.blog/developer-skills/programming-languages-and-frameworks/introduction-to-selinux/>`_
- `시스템 관리자를 위한 SELinux 가이드: 주요 질문 42가지 <https://opensource.com/article/18/7/sysadmin-guide-selinux>`_
- `SELinux 마스터하기: Linux 보안 종합 가이드 <https://srivastavayushmaan1347.medium.com/mastering-selinux-a-comprehensive-guide-to-linux-security-8bed9976da88>`_</code></pre>
<div class="tabs-container" data-tabs><div class="tabs-nav"><button class="tab-button active" data-tab-index="0">firewalld</button>
firewalld가 활성화된 RHEL 시스템에 Mattermost를 배포할 때는 Mattermost 서버에 대한 접근을 허용하도록 방화벽 규칙을 구성해야 합니다.
Firewalld는 RHEL 시스템의 기본 방화벽 관리 도구로, 네트워크 영역을 지원하는 동적으로 관리되는 방화벽을 제공합니다. 기본적으로 Mattermost의 포트(8065)로 들어오는 연결을 차단할 수 있습니다.
sudo systemctl status firewalld
firewalld가 활성 상태이면 Mattermost 트래픽을 허용하도록 구성합니다.
Mattermost 서버를 위한 firewalld 구성
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1. Mattermost 서버를 위해 포트 8065를 엽니다:
sudo firewall-cmd --permanent --add-port=8065/tcp
2. 동일한 서버에서 리버스 프록시(예: nginx 또는 Apache)를 사용하는 경우 HTTP 및 HTTPS 포트도 엽니다:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
3. 변경 사항을 적용하려면 firewalld를 리로드합니다:sudo firewall-cmd --reload
4. 구성을 확인합니다:sudo firewall-cmd --list-all
출력에서 포트 8065/tcp(선택적으로 http/https 서비스)를 확인할 수 있어야 합니다.
Note
Mattermost에 사용자 지정 포트를 사용하는 경우 ``8065``를 구성된 포트 번호로 교체하세요. ``--permanent`` 플래그는 시스템 재부팅 후에도 규칙이 유지되도록 합니다.
Mattermost Calls를 위한 firewalld 구성(선택 사항)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Mattermost Calls 플러그인 또는 독립형 rtcd 서비스를 배포하는 경우 추가 포트를 열어야 합니다. Calls 아키텍처 및 배포 모드에 대한 자세한 내용은 <a href="https://docs.mattermost.com/administration-guide/configure/calls-deployment-guide" target="_blank" rel="noopener noreferrer" class="doc-ref">Calls 배포 가이드</a> 문서를 참조하세요.
통합 Calls 플러그인(Mattermost와 함께 실행되는 경우):sudo firewall-cmd --permanent --add-port=8443/udp
sudo firewall-cmd --permanent --add-port=8443/tcp
sudo firewall-cmd --reload
독립형 rtcd 서비스(추가 API 포트가 필요한 경우):sudo firewall-cmd --permanent --add-port=8443/udp
sudo firewall-cmd --permanent --add-port=8443/tcp
sudo firewall-cmd --permanent --add-port=8045/tcp
sudo firewall-cmd --reload
Note
- 포트 8443(UDP/TCP)은 RTC 미디어 트래픽(오디오/비디오/화면 공유)에 사용됩니다
- 포트 8045(TCP)는 Mattermost와 rtcd 서비스 간의 API 통신에 사용됩니다
- RTC용 TCP 지원에는 Calls v0.17+ 및 rtcd v0.11+가 필요합니다
- 사용자 지정 포트를 사용하는 경우 기본 포트 번호를 구성된 값으로 교체하세요</code></pre>
<div class="tabs-container" data-tabs><div class="tabs-nav"><button class="tab-button active" data-tab-index="0">fapolicyd</button>
fapolicyd가 활성화된 RHEL 시스템에 Mattermost를 배포할 때 Mattermost 로그에서 "operation not permitted" 오류가 발생할 수 있습니다.
Fapolicyd(File Access Policy Daemon)는 신뢰도를 기반으로 파일에 대한 접근 권한을 결정하는 사용자 공간 데몬입니다. 승인되지 않은 바이너리의 실행을 방지하기 위해 보안 환경에서 일반적으로 활성화됩니다. 기본적으로 fapolicyd는 Mattermost 바이너리 및 플러그인의 실행을 차단할 수 있습니다.
Mattermost 로그에서 "operation not permitted" 오류가 표시되면 먼저 fapolicyd를 일시적으로 중지하여 원인인지 확인합니다:
sudo systemctl stop fapolicyd
2. Mattermost 배포를 테스트합니다. 이제 정상적으로 작동한다면 fapolicyd가 Mattermost 실행을 차단하고 있는 것이므로 올바르게 구성해야 합니다.
3. fapolicyd를 디버그 모드로 시작하여 거부되는 항목을 확인합니다:
sudo fapolicyd --debug
4. 출력에서 거부 메시지를 찾습니다. 다음과 유사한 형태입니다:
rule=15 dec=deny_audit perm=execute auid=-1 pid=19735
exe=/opt/mattermost/bin/mattermost : path=/opt/mattermost/plugins/focalboard/server/dist/plugin-linux-amd64
ftype=application/x-executable trust=0
실행을 거부하는 규칙 번호를 확인하세요. 규칙 파일은 이 규칙보다 앞선 번호로 지정해야 합니다.
Mattermost를 허용하도록 fapolicyd 구성
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1. Mattermost용 규칙 파일을 생성합니다. 명명 규칙이 중요합니다. Mattermost를 거부하는 규칙보다 앞서야 합니다. 기본 fapolicyd 구성을 사용하는 경우 ``80``이 적합합니다:sudo touch /etc/fapolicyd/rules.d/80-mattermost.rules
2. 파일에 허용 규칙을 추가합니다:sudo vi /etc/fapolicyd/rules.d/80-mattermost.rules
Mattermost 실행을 허용하는 다음 규칙을 추가합니다:allow perm=execute exe=/usr/bin/sudo trust=1 : dir=/opt/mattermost/ all trust=0
allow perm=execute exe=/opt/mattermost/bin/mattermost : dir=/opt/mattermost all trust=0
allow perm=execute exe=/usr/lib/systemd/systemd trust=1 : dir=/opt/mattermost/ all trust=0
3. 규칙이 유효하고 적용될 수 있는지 확인합니다:sudo fagenrules --check
출력에서 "Rules have changed and should be updated"가 표시되어야 합니다.
4. 새 규칙을 로드합니다:sudo fagenrules --load
5. fapolicyd 서비스를 재시작합니다:sudo systemctl restart fapolicyd
6. Mattermost를 재시작하여 올바르게 작동하는지 확인합니다:sudo systemctl restart mattermost
7. Mattermost가 오류 없이 실행되고 있는지 확인합니다:curl http://localhost:8065
sudo systemctl status mattermost
Note
- 규칙 파일 번호 지정이 중요합니다. 규칙은 순서대로 처리되며, 허용 규칙은 거부 규칙보다 앞서야 합니다. 이 단계를 따른 후에도 거부 사항이 계속 발생하면 디버그 출력에서 거부 규칙 번호를 확인하고 규칙 파일 번호가 더 낮은지 확인하세요.
- Playbooks나 Calls 플러그인처럼 바이너리를 실행하는 플러그인이 있는 경우, 위의 fapolicyd 규칙은 ``/opt/mattermost`` 디렉터리 내의 모든 바이너리 실행을 허용합니다. 더 제한적인 규칙이 필요한 경우 각 플러그인 바이너리에 대한 특정 규칙을 만들 수 있습니다.
rtcd 서비스를 위한 fapolicyd 구성(선택 사항)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Mattermost Calls를 위한 독립형 rtcd 서비스를 배포하는 경우 rtcd 바이너리에 대한 별도의 fapolicyd 규칙이 필요합니다. rtcd 서비스는 Mattermost와 별도로 배포되어 자체 바이너리를 실행합니다. rtcd를 언제, 왜 사용해야 하는지에 대한 자세한 내용은 <a href="https://docs.mattermost.com/administration-guide/configure/calls-deployment-guide" target="_blank" rel="noopener noreferrer" class="doc-ref">Calls 배포 가이드</a> 문서를 참조하세요.
1. rtcd용 규칙 파일을 생성합니다. 명명 규칙이 중요합니다. 거부 규칙보다 앞서야 합니다(일반적으로 80이 적합합니다):sudo touch /etc/fapolicyd/rules.d/80-rtcd.rules
2. rtcd에 대한 허용 규칙을 추가합니다:sudo vi /etc/fapolicyd/rules.d/80-rtcd.rules
다음 규칙을 추가합니다(rtcd 설치 디렉터리에 따라 경로를 조정하세요):allow perm=execute exe=/usr/bin/sudo trust=1 : dir=/opt/rtcd/ all trust=0
allow perm=execute exe=/opt/rtcd/bin/rtcd : dir=/opt/rtcd all trust=0
allow perm=execute exe=/usr/lib/systemd/systemd trust=1 : dir=/opt/rtcd/ all trust=0
3. 규칙이 유효하고 적용될 수 있는지 확인합니다:sudo fagenrules --check
출력에서 "Rules have changed and should be updated"가 표시되어야 합니다.
4. 새 규칙을 로드합니다:sudo fagenrules --load
5. fapolicyd와 rtcd 서비스를 재시작합니다:sudo systemctl restart fapolicyd
sudo systemctl restart rtcd
6. rtcd가 오류 없이 실행되고 있는지 확인합니다:sudo systemctl status rtcd
Note
- 위의 경로는 rtcd가 ``/opt/rtcd/``에 설치되어 있다고 가정합니다. 실제 rtcd 설치 디렉터리에 따라 경로를 조정하세요.
- 이 단계를 따른 후에도 거부 사항이 계속 발생하면 ``sudo fapolicyd --debug``를 실행하여 거부되는 특정 경로를 확인하고 그에 맞게 규칙을 조정하세요.
- 설치 및 구성에 대한 자세한 내용은 <a href="https://docs.mattermost.com/administration-guide/configure/calls-rtcd-setup" target="_blank" rel="noopener noreferrer" class="doc-ref">RTCD 설정 및 구성</a> 문서를 참조하세요.
추가 리소스
^^^^^^^^^^^^^^^^^^^^^^^
- `Mattermost와 fapolicyd <https://support.mattermost.com/hc/en-us/articles/12167526545172-Mattermost-and-fapolicyd>`_ 지원 문서</code></pre>
<h3 id="step-6-서버-업데이트">Step 6: 서버 업데이트</h3>
<p>tarball을 사용하는 경우 Mattermost 서버 설치를 업데이트하려면 여러 수동 단계가 필요합니다. 자세한 내용은 <a href="/docs/mattermost/upgrade/server/" class="doc-ref">Mattermost 서버 업그레이드</a> 문서를 참조하세요.
이 Mattermost 배포에는 다음 단계가 포함됩니다: PostgreSQL 데이터베이스 설치, 데이터베이스 준비, Mattermost 서버 다운로드, 서버 설치, 서버 설정, 서버 업데이트. 데이터베이스 준비 문서를 따라 Mattermost를 위한 PostgreSQL 데이터베이스를 설정합니다.
최소 시스템 요구 사항:
운영 체제: Enterprise Linux 7+, Oracle Linux 6+, Oracle Linux 7+
터미널 창에서 Mattermost 서버를 호스팅할 시스템에 SSH로 접속합니다. wget을 사용하여 다음 명령 중 하나로 설치할 Mattermost 서버 릴리즈를 다운로드합니다. 필요에 따라 링크에서 amd64를 적절한 아키텍처(예: ARM 기반 시스템의 경우 arm64)로 교체하세요.
Mattermost 서버를 설치하기 전에 모든 저장소를 업데이트하고, 필요한 경우 다음 명령을 실행하여 기존 패키지를 업데이트하는 것을 권장합니다:
sudo dnf update
sudo dnf upgrade
업데이트 및 필요한 시스템 재부팅이 완료되면, tarball을 추출하고 사용자 및 그룹을 생성하며 파일/폴더 권한을 설정하여 Mattermost 서버를 설치합니다.
a. 먼저 tarball을 추출합니다:
tar -xvzf mattermost*.gz
b. 전체 폴더를 ``/opt`` 디렉터리(또는 원하는 경로)로 이동합니다:
sudo mv mattermost /opt
c. 기본 스토리지 폴더를 생성합니다. 기본적으로 Mattermost 서버는 ``/opt/mattermost/data``를 파일 폴더로 사용합니다. 설정 중 시스템 콘솔에서 변경할 수 있습니다(S3와 같은 대안적인 스토리지 사용 포함):
sudo mkdir /opt/mattermost/data</code></pre>
<div class="admonition note"><div class="admonition-title">Note
사용자 지정 경로를 선택하는 경우, 이후 모든 단계에서 해당 경로를 사용하세요.`
mattermost라는 사용자 및 그룹을 설정합니다:
sudo useradd --system --user-group mattermost
Note
사용자 지정 사용자 이름과 그룹 이름을 선택하는 경우, 이후 모든 단계에서 해당 이름을 사용하세요.
* SqlSettings 아래에서 DriverName을 "postgres"로 설정합니다. 이것이 모든 Mattermost 설치에 권장되는 기본 데이터베이스입니다.
* SqlSettings 아래에서 DataSource를 "postgres://mmuser:<mmuser-password>@<host-name-or-IP>:5432/mattermost?sslmode=disable&connect_timeout=10"으로 설정하고 mmuser, <mmuser-password>, <host-name-or-IP> 및 mattermost를 사용 중인 데이터베이스 이름으로 교체합니다.
* ServiceSettings 아래에서 "SiteURL"을 설정합니다: Mattermost 애플리케이션의 도메인 이름(예: https://mattermost.example.com).
Note
SupportSettings 아래에서 "SupportEmail"을 설정하여 지원 이메일을 구성하는 것을 권장합니다. 이것은 사용자가 도움이 필요할 때 연락할 이메일 주소입니다.
config.json 구성 파일을 수정한 후 Mattermost 서버를 시작할 수 있습니다:
요구 사항에 따라 마지막 단계로 sudo systemctl enable mattermost.service를 실행하면 시스템 부팅 시 Mattermost가 자동으로 시작됩니다. 이전 단계 후 Mattermost 시작 시 오류가 발생하지 않으면 설정이 완료된 것입니다. 오류가 발생했다면 계속 진행하세요.
강화된 RHEL 시스템에 Mattermost를 배포할 때 추가 보안 구성이 필요할 수 있습니다. 아래에서 사용 중인 보안 도구에 해당하는 탭을 선택하세요:
SELinux가 기본적으로 강제(enforcing) 모드로 활성화된 RHEL9에서 Mattermost를 배포할 때는 추가 구성이 필요합니다.
SELinux는 액세스 제어 보안 정책을 제공하는 보안 모듈입니다. RHEL 및 CentOS 시스템에서 기본적으로 활성화되어 있습니다. SELinux는 파일, 디렉터리, 포트에 대한 접근을 차단할 수 있으며, 이로 인해 Mattermost 시작 시 문제가 발생할 수 있습니다. 이러한 문제를 해결하려면 Mattermost 바이너리와 디렉터리에 적절한 SELinux 컨텍스트를 설정하고, Mattermost가 포트에 바인딩할 수 있도록 허용해야 합니다.
sestatus 명령을 실행하여 SELinux가 활성화되어 있고 강제 모드인지 확인합니다. enforcing이라면 올바르게 구성해야 합니다.
SELinux는 바이너리에 대한 보안 컨텍스트를 적용합니다. Mattermost 바이너리를 안전한 것으로 레이블 지정하려면 다음 SELinux 컨텍스트로 설정해야 합니다.
sudo semanage fcontext -a -t bin_t "/opt/mattermost/bin(/.*)?"
sudo restorecon -RF /opt/mattermost/bin
이제 다음 명령으로 Mattermost를 다시 시작해 보세요:
sudo systemctl start mattermost
오류가 없다면 Mattermost가 실행 중인지 확인합니다: curl ``http://localhost:8065``. Mattermost 서버에서 반환된 HTML이 표시되어야 합니다. 설정이 완료되었습니다!
Mattermost 시작 시 오류가 발생하면 계속 진행하기 전에 ``/opt/mattermost/logs``에 파일이 있는지 확인합니다. 해당 디렉터리에 ``mattermost.log``가 있다면 ``config.json``의 구성 문제일 가능성이 높습니다. 계속하기 전에 이전 단계를 다시 확인하세요.
/opt/mattermost에 대해 다른 컨텍스트 시도
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SELinux는 파일 및 디렉터리에 대한 보안 컨텍스트를 적용합니다. Mattermost 디렉터리를 안전한 것으로 레이블 지정하려면 적절한 SELinux 컨텍스트를 설정해야 합니다.
1. ``ls -Z /opt/mattermost``를 실행하여 현재 컨텍스트를 확인합니다. ``drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 mattermost``와 같은 내용이 반환되면 ``default_t``는 SELinux가 이 디렉터리의 용도를 알지 못한다는 것을 나타냅니다.
2. ``sudo semanage fcontext -a -t httpd_sys_content_t "/opt/mattermost(/.*)?"``를 실행하여 웹 서비스나 애플리케이션과 호환되는 SELinux 유형을 할당해 안전한 컨텍스트를 설정합니다. 일반적으로 파일 제공에 사용되는 ``httpd_sys_content_t``가 많이 쓰입니다. 디렉터리와 그 내용을 재귀적으로 일치시켜야 합니다. ``sudo restorecon -R /opt/mattermost``를 실행하여 변경 사항을 적용합니다.
Mattermost가 포트에 바인딩할 수 있도록 허용
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Mattermost에 특정 포트(예: 8065)가 필요한 경우, Mattermost가 해당 포트에 바인딩할 수 있도록 SELinux가 허용하는지 확인합니다. ``sudo semanage port -l | grep 8065`` 명령을 실행하고, 포트가 목록에 없으면 ``sudo semanage port -a -t http_port_t -p tcp 8065``를 실행하여 추가합니다. 이때 ``8065``를 필요한 포트로 교체하세요.
커스텀 정책 처리
^^^^^^^^^^^^^^^^^^^^^^
Mattermost에 SELinux가 차단하는 작업이 필요한 경우 커스텀 정책을 생성해야 합니다.
1. 먼저 ``sudo ausearch -m avc -ts recent``를 실행하거나 감사 로그(``sudo cat /var/log/audit/audit.log | grep denied``)를 확인하여 로그에서 SELinux 거부 사항을 확인합니다.
2. 필요한 경우 ``audit2allow``를 설치하여 정책을 자동으로 생성하는 정책 모듈을 만듭니다.
sudo yum install -y policycoreutils-python-utils
sudo grep mattermost /var/log/audit/audit.log | audit2allow -M mattermost_policy
sudo semodule -i mattermost_policy.pp
구성 테스트
^^^^^^^^^^^^^^^^^^^^^^
``sudo systemctl restart mattermost``를 실행하여 Mattermost를 재시작하고 구성이 예상대로 작동하는지 확인합니다. 실패하는 경우 로그를 다시 확인하여 다른 SELinux 관련 문제를 파악하세요.
테스트 목적으로 Mattermost를 빠르게 작동시켜야 하나요?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- ``sudo setenforce 0`` 명령을 실행하여 SELinux를 permissive(허용) 모드로 변경할 수 있습니다. 이 모드에서는 정책이 적용되지 않고 로그만 기록됩니다.
- 이 명령은 SELinux 모드를 "permissive"로 변경합니다. permissive 모드에서는 정책이 적용되지 않으며, 위반 사항이 차단되는 대신 기록됩니다. 이는 SELinux 정책 관련 문제를 디버깅하고 트러블슈팅하는 데 유용할 수 있습니다.
- 컨텍스트가 필요한 대로 작동하면 ``sudo setenforce 1`` 명령을 실행하여 강제(enforcing) 모드를 다시 활성화하세요.
추가 리소스
^^^^^^^^^^^^^^^^^^^^^^^
- `SELinux 사용자 및 관리자 가이드 <https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/index>`_
- `SELinux 프로젝트 위키 <https://github.com/SELinuxProject/selinux>`_
- `SELinux 소개 <https://github.blog/developer-skills/programming-languages-and-frameworks/introduction-to-selinux/>`_
- `시스템 관리자를 위한 SELinux 가이드: 주요 질문 42가지 <https://opensource.com/article/18/7/sysadmin-guide-selinux>`_
- `SELinux 마스터하기: Linux 보안 종합 가이드 <https://srivastavayushmaan1347.medium.com/mastering-selinux-a-comprehensive-guide-to-linux-security-8bed9976da88>`_</code></pre>
<div class="tabs-container" data-tabs><div class="tabs-nav"><button class="tab-button active" data-tab-index="0">firewalld</button>
firewalld가 활성화된 RHEL 시스템에 Mattermost를 배포할 때는 Mattermost 서버에 대한 접근을 허용하도록 방화벽 규칙을 구성해야 합니다.
Firewalld는 RHEL 시스템의 기본 방화벽 관리 도구로, 네트워크 영역을 지원하는 동적으로 관리되는 방화벽을 제공합니다. 기본적으로 Mattermost의 포트(8065)로 들어오는 연결을 차단할 수 있습니다.
sudo systemctl status firewalld
firewalld가 활성 상태이면 Mattermost 트래픽을 허용하도록 구성합니다.
Mattermost 서버를 위한 firewalld 구성
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1. Mattermost 서버를 위해 포트 8065를 엽니다:
sudo firewall-cmd --permanent --add-port=8065/tcp
2. 동일한 서버에서 리버스 프록시(예: nginx 또는 Apache)를 사용하는 경우 HTTP 및 HTTPS 포트도 엽니다:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
3. 변경 사항을 적용하려면 firewalld를 리로드합니다:sudo firewall-cmd --reload
4. 구성을 확인합니다:sudo firewall-cmd --list-all
출력에서 포트 8065/tcp(선택적으로 http/https 서비스)를 확인할 수 있어야 합니다.
Note
Mattermost에 사용자 지정 포트를 사용하는 경우 ``8065``를 구성된 포트 번호로 교체하세요. ``--permanent`` 플래그는 시스템 재부팅 후에도 규칙이 유지되도록 합니다.
Mattermost Calls를 위한 firewalld 구성(선택 사항)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Mattermost Calls 플러그인 또는 독립형 rtcd 서비스를 배포하는 경우 추가 포트를 열어야 합니다. Calls 아키텍처 및 배포 모드에 대한 자세한 내용은 <a href="https://docs.mattermost.com/administration-guide/configure/calls-deployment-guide" target="_blank" rel="noopener noreferrer" class="doc-ref">Calls 배포 가이드</a> 문서를 참조하세요.
통합 Calls 플러그인(Mattermost와 함께 실행되는 경우):sudo firewall-cmd --permanent --add-port=8443/udp
sudo firewall-cmd --permanent --add-port=8443/tcp
sudo firewall-cmd --reload
독립형 rtcd 서비스(추가 API 포트가 필요한 경우):sudo firewall-cmd --permanent --add-port=8443/udp
sudo firewall-cmd --permanent --add-port=8443/tcp
sudo firewall-cmd --permanent --add-port=8045/tcp
sudo firewall-cmd --reload
Note
- 포트 8443(UDP/TCP)은 RTC 미디어 트래픽(오디오/비디오/화면 공유)에 사용됩니다
- 포트 8045(TCP)는 Mattermost와 rtcd 서비스 간의 API 통신에 사용됩니다
- RTC용 TCP 지원에는 Calls v0.17+ 및 rtcd v0.11+가 필요합니다
- 사용자 지정 포트를 사용하는 경우 기본 포트 번호를 구성된 값으로 교체하세요</code></pre>
<div class="tabs-container" data-tabs><div class="tabs-nav"><button class="tab-button active" data-tab-index="0">fapolicyd</button>
fapolicyd가 활성화된 RHEL 시스템에 Mattermost를 배포할 때 Mattermost 로그에서 "operation not permitted" 오류가 발생할 수 있습니다.
Fapolicyd(File Access Policy Daemon)는 신뢰도를 기반으로 파일에 대한 접근 권한을 결정하는 사용자 공간 데몬입니다. 승인되지 않은 바이너리의 실행을 방지하기 위해 보안 환경에서 일반적으로 활성화됩니다. 기본적으로 fapolicyd는 Mattermost 바이너리 및 플러그인의 실행을 차단할 수 있습니다.
Mattermost 로그에서 "operation not permitted" 오류가 표시되면 먼저 fapolicyd를 일시적으로 중지하여 원인인지 확인합니다:
sudo systemctl stop fapolicyd
2. Mattermost 배포를 테스트합니다. 이제 정상적으로 작동한다면 fapolicyd가 Mattermost 실행을 차단하고 있는 것이므로 올바르게 구성해야 합니다.
3. fapolicyd를 디버그 모드로 시작하여 거부되는 항목을 확인합니다:
sudo fapolicyd --debug
4. 출력에서 거부 메시지를 찾습니다. 다음과 유사한 형태입니다:
rule=15 dec=deny_audit perm=execute auid=-1 pid=19735
exe=/opt/mattermost/bin/mattermost : path=/opt/mattermost/plugins/focalboard/server/dist/plugin-linux-amd64
ftype=application/x-executable trust=0
실행을 거부하는 규칙 번호를 확인하세요. 규칙 파일은 이 규칙보다 앞선 번호로 지정해야 합니다.
Mattermost를 허용하도록 fapolicyd 구성
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1. Mattermost용 규칙 파일을 생성합니다. 명명 규칙이 중요합니다. Mattermost를 거부하는 규칙보다 앞서야 합니다. 기본 fapolicyd 구성을 사용하는 경우 ``80``이 적합합니다:sudo touch /etc/fapolicyd/rules.d/80-mattermost.rules
2. 파일에 허용 규칙을 추가합니다:sudo vi /etc/fapolicyd/rules.d/80-mattermost.rules
Mattermost 실행을 허용하는 다음 규칙을 추가합니다:allow perm=execute exe=/usr/bin/sudo trust=1 : dir=/opt/mattermost/ all trust=0
allow perm=execute exe=/opt/mattermost/bin/mattermost : dir=/opt/mattermost all trust=0
allow perm=execute exe=/usr/lib/systemd/systemd trust=1 : dir=/opt/mattermost/ all trust=0
3. 규칙이 유효하고 적용될 수 있는지 확인합니다:sudo fagenrules --check
출력에서 "Rules have changed and should be updated"가 표시되어야 합니다.
4. 새 규칙을 로드합니다:sudo fagenrules --load
5. fapolicyd 서비스를 재시작합니다:sudo systemctl restart fapolicyd
6. Mattermost를 재시작하여 올바르게 작동하는지 확인합니다:sudo systemctl restart mattermost
7. Mattermost가 오류 없이 실행되고 있는지 확인합니다:curl http://localhost:8065
sudo systemctl status mattermost
Note
- 규칙 파일 번호 지정이 중요합니다. 규칙은 순서대로 처리되며, 허용 규칙은 거부 규칙보다 앞서야 합니다. 이 단계를 따른 후에도 거부 사항이 계속 발생하면 디버그 출력에서 거부 규칙 번호를 확인하고 규칙 파일 번호가 더 낮은지 확인하세요.
- Playbooks나 Calls 플러그인처럼 바이너리를 실행하는 플러그인이 있는 경우, 위의 fapolicyd 규칙은 ``/opt/mattermost`` 디렉터리 내의 모든 바이너리 실행을 허용합니다. 더 제한적인 규칙이 필요한 경우 각 플러그인 바이너리에 대한 특정 규칙을 만들 수 있습니다.
rtcd 서비스를 위한 fapolicyd 구성(선택 사항)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Mattermost Calls를 위한 독립형 rtcd 서비스를 배포하는 경우 rtcd 바이너리에 대한 별도의 fapolicyd 규칙이 필요합니다. rtcd 서비스는 Mattermost와 별도로 배포되어 자체 바이너리를 실행합니다. rtcd를 언제, 왜 사용해야 하는지에 대한 자세한 내용은 <a href="https://docs.mattermost.com/administration-guide/configure/calls-deployment-guide" target="_blank" rel="noopener noreferrer" class="doc-ref">Calls 배포 가이드</a> 문서를 참조하세요.
1. rtcd용 규칙 파일을 생성합니다. 명명 규칙이 중요합니다. 거부 규칙보다 앞서야 합니다(일반적으로 80이 적합합니다):sudo touch /etc/fapolicyd/rules.d/80-rtcd.rules
2. rtcd에 대한 허용 규칙을 추가합니다:sudo vi /etc/fapolicyd/rules.d/80-rtcd.rules
다음 규칙을 추가합니다(rtcd 설치 디렉터리에 따라 경로를 조정하세요):allow perm=execute exe=/usr/bin/sudo trust=1 : dir=/opt/rtcd/ all trust=0
allow perm=execute exe=/opt/rtcd/bin/rtcd : dir=/opt/rtcd all trust=0
allow perm=execute exe=/usr/lib/systemd/systemd trust=1 : dir=/opt/rtcd/ all trust=0
3. 규칙이 유효하고 적용될 수 있는지 확인합니다:sudo fagenrules --check
출력에서 "Rules have changed and should be updated"가 표시되어야 합니다.
4. 새 규칙을 로드합니다:sudo fagenrules --load
5. fapolicyd와 rtcd 서비스를 재시작합니다:sudo systemctl restart fapolicyd
sudo systemctl restart rtcd
6. rtcd가 오류 없이 실행되고 있는지 확인합니다:sudo systemctl status rtcd
Note
- 위의 경로는 rtcd가 ``/opt/rtcd/``에 설치되어 있다고 가정합니다. 실제 rtcd 설치 디렉터리에 따라 경로를 조정하세요.
- 이 단계를 따른 후에도 거부 사항이 계속 발생하면 ``sudo fapolicyd --debug``를 실행하여 거부되는 특정 경로를 확인하고 그에 맞게 규칙을 조정하세요.
- 설치 및 구성에 대한 자세한 내용은 <a href="https://docs.mattermost.com/administration-guide/configure/calls-rtcd-setup" target="_blank" rel="noopener noreferrer" class="doc-ref">RTCD 설정 및 구성</a> 문서를 참조하세요.
추가 리소스
^^^^^^^^^^^^^^^^^^^^^^^
- `Mattermost와 fapolicyd <https://support.mattermost.com/hc/en-us/articles/12167526545172-Mattermost-and-fapolicyd>`_ 지원 문서</code></pre>
<h3 id="step-6-서버-업데이트">Step 6: 서버 업데이트</h3>
<p>tarball을 사용하는 경우 Mattermost 서버 설치를 업데이트하려면 여러 수동 단계가 필요합니다. 자세한 내용은 <a href="/docs/mattermost/upgrade/server/" class="doc-ref">Mattermost 서버 업그레이드</a> 문서를 참조하세요.