본 문서를 작성하는데 참고한 기술사항
IPMI 장치 ( /dev/ipmi* )는 root 사용자만 이용할 수 있으며, 그룹권한이 없다. 이를 특정 그룹에서 사용할 수 있도록 udev 에서 변경할 수 있다.
https://github.com/influxdata/telegraf/issues/3332
https://www.linuxserver.io/blog/2017-11-25-how-to-give-telegraf-ipmitool-permissions-via-udev
collectd 는 여러가지 플러그인들을 이용할 수 있다.
https://collectd.org/wiki/index.php/Plugin:Exec
https://collectd.org/wiki/index.php/Plugin:IPMI
https://github.com/jabl/collectd-plugin-dcmi
SELinux (Security Enhanced Linux)는 특정 프로세스가 특정 자원(파일/포트/프로세스)에만 접근하는 것을 허용한다.
때문에 특정 프로세스를 해킹되어도 코인채굴 프로그램과 같은 특정 프로그램을 실행시킬 수 없어 보안에 유리하다.
하지만 SELinux 를 고려하지 않은 오픈소스가 많이 있어, 설치 후 보안문제가 발생하는 경우가 많다.
대개는 이런 문제가 발생하면 selinux 를 off 하지만, 그리 좋은 방법은 아니다.
위의 보안에러는 리눅스의 저널로그와 보안감사로그(/var/log/audit/audit.log)에 남는다.
그리고 이 로그에는, 해당 프로세스의 특정 자원 접근을 allow 할 수 있는 명령어도 친히 알려준다.
journalctl -xe sealert -l SECURITY_EVENT_ID |
보안감사로그(/var/log/audit/audit.log)에서 특정 보안 policy 를 만드려면 다음과 같이 입력한다.
cat /var/log/audit/audit.log | audit2allow -m my-app > my-app.te |
그러면 하기와 같은 te ( Type Enforcement ) 파일이 생성된다.
module my-app 1.0;
require {
type collectd_t;
type ipmi_device_t;
class chr_file { ioctl open read write };
}
allow collectd_t ipmi_device_t:chr_file { ioctl open read write }; |
te 파일로부터 모듈 파일을 만든다.
checkmodule -M -m -o my-app.mod my-app.te |
모듈 파일로부터 pp (Policy Package) 파일을 만든다.
semodule_package -o my-app.pp -m my-app.mod |
지금까지 te → mod → pp 파일을 만들었다.
만든 Policy Package 를 머신의 selinux 에 등록한다.
semodule -i my-app.pp |
프로세스나 서비스를 다시 시작해본다.
또 다시 권한 문제가 발생하면, audit2allow 명령어부터 semodule 명령어까지 입력을 반복한다. 서비스가 정상적으로 동작할 때까지 반복한다.
한번 실행할 때마다, my-app.te 와 my-app.pp 파일에는 권한이 누적되는 것을 확인할 수 있다.
마지막으로 성공한 Policy Package 파일은 다른 머신으로 복사하여 적용할 수 있다.
https://relativkreativ.at/articles/how-to-compile-a-selinux-policy-package
https://ibigbug.online/dell-r720-poweredge-server-hardware-monitoring