본 문서를 작성하는데 참고한 기술사항




장치 사용 권한 (사용자/그룹) 설정

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 플러그인

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 를 위한 policy package 만들기

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 ) 파일이 생성된다.

collectd-ipmi.te
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

  • 레이블 없음