Superkkt Blog

AppArmor

2009/06/16 14:40

오늘 AppArmor라는 프로그램이 있다는걸 처음 알았다.

알게 된 이유는 MySQL을 패키지로 설치하고나서 데이터 디렉토리만 스토리지가 마운트 된 디렉토리가 이동시켰는데 아무리 삽질을 해도 MySQL이 제대로 시작이 안 되는 문제가 발생했다.

그래서 strace로 mysqld 바이너리의 시스템콜까지 추적하면서 원인을 찾아봤는데 데이터 디렉토리에 파일을 읽고 쓰지 못하는 권한 문제로 실행을 못하고 있었다. 그런데 퍼미션은 제대로 다 설정이 되었는데 참 귀신이 곡할 노릇이였다.

패키지로 설치해서 내부적으로 어딘가에서 데이터 디렉토리 경로가 박혀있을거라고 스스로 달래면서 소스 컴파일을 하려고 했는데.. 아무리 생각해도 우분투에 들어가있는 패키지가 이런 문제를 가지고 있을리는 없고, 다시 /etc/mysql/my.cnf 파일을 뒤적거리다가 이유를 찾았다.

my.cnf 파일에 보면 각종 경로가 변경되는 경우, 그리고 시스템이 AppArmor를 사용하는 경우에는 /etc/apparmor.d/usr.sbin.mysqld 파일도 변경해야 한다고 적혀있더라.

그래서 그 파일을 열어보니 아래와 같이 각종 디렉토리에 대한 접근 권한이 명시되어 있었다. OS의 디렉토리 접근 권한과는 별도로 권한 설정을 하는것 같다. 여기서 새로 바뀐 데이터 디렉토리를 반영해주니 정상적으로 MySQL이 실행되었다. :-)

단, AppArmor의 변경이 반영되도록 /etc/init.d./apparmor restart를 한번 해줘야 한다.


# vim:syntax=apparmor
# Last Modified: Tue Jun 19 17:37:30 2007
#include <tunables/global>

/usr/sbin/mysqld {
  #include <abstractions/base>
  #include <abstractions/nameservice>
  #include <abstractions/user-tmp>
  #include <abstractions/mysql>
  #include <abstractions/winbind>

  capability dac_override,
  capability sys_resource,
  capability setgid,
  capability setuid,

  network tcp,

  /etc/hosts.allow r,
  /etc/hosts.deny r,

  /etc/mysql/*.pem r,
  /etc/mysql/conf.d/ r,
  /etc/mysql/conf.d/* r,
  /etc/mysql/my.cnf r,
  /usr/sbin/mysqld mr,
  /usr/share/mysql/** r,
  /var/log/mysql.log rw,
  /var/log/mysql.err rw,
  /data/mysql/ r,
  /data/mysql/** rwk,
  /var/log/mysql/ r,
  /var/log/mysql/* rw,
  /var/run/mysqld/mysqld.pid w,
  /var/run/mysqld/mysqld.sock w,
}


2009/06/16 14:40 2009/06/16 14:40

trackbacks

trackbacks rss

이 글에는 트랙백을 보낼 수 없습니다

Leave a Comment