본문 바로가기

서버 리뷰

MySQL User Shell 변경 가이드: `/bin/bash`에서 `/sbin/nologin`으로

728x90

변경에 대한 영향도

MySQL 사용자의 셸을 /bin/bash에서 /sbin/nologin으로 변경하면 다음과 같은 영향이 발생할 수 있습니다:

1. 보안 강화

  • 영향: /sbin/nologin은 사용자가 시스템에 로그인하지 못하도록 제한합니다. MySQL 사용자 계정(mysql)은 일반적으로 데몬 프로세스를 실행하는 데만 사용되므로, 로그인 셸이 필요하지 않습니다. 이를 통해 악의적인 사용자가 mysql 계정을 통해 시스템에 접근하는 것을 방지할 수 있습니다.
  • 이점: 시스템 보안이 강화되며, mysql 계정이 악용될 가능성이 줄어듭니다.

2. MySQL 서비스 동작

  • 영향 없음: MySQL 데몬은 셸 로그인을 요구하지 않으므로, /sbin/nologin으로 변경해도 MySQL 서비스의 실행에는 영향을 주지 않습니다.
  • 주의사항: MySQL 서비스가 정상적으로 실행되기 위해 필요한 권한(파일/디렉토리 접근 권한 등)이 유지되어야 합니다.

3. 시스템 관리

  • 영향: 관리자가 mysql 계정으로 직접 로그인하거나 su - mysql 명령을 사용하여 셸에 접근할 수 없게 됩니다. 이는 의도적인 보안 조치로, 관리자가 mysql 계정으로 직접 작업해야 할 경우 다른 방법을 사용해야 합니다(예: sudo -u mysql).
  • 대안: 필요한 경우 sudo를 통해 mysql 사용자로 명령을 실행할 수 있습니다.

4. 잠재적 문제

  • MySQL 관련 스크립트나 작업이 mysql 계정의 셸에 의존하는 경우(드물게 발생), 해당 작업이 실패할 수 있습니다. 하지만 대부분의 MySQL 설치 환경에서는 이런 의존성이 없으므로 영향은 미미합니다.
  • 변경 전, 시스템에서 mysql 계정이 셸을 사용하는 특정 작업(예: cron 작업)이 있는지 확인해야 합니다.

보안 조치 방법 가이드

/bin/bash/sbin/nologin으로 변경하여 MySQL 사용자 계정의 보안을 강화하는 절차는 다음과 같습니다.

1. 현재 설정 확인

mysql 사용자의 현재 셸을 확인합니다:

grep ^mysql /etc/passwd
  • 출력 예: mysql:x:999:999:MySQL Server:/var/lib/mysql:/bin/bash
  • /bin/bash가 셸로 설정되어 있는지 확인합니다.

2. 셸 변경

mysql 사용자의 셸을 /sbin/nologin으로 변경합니다:

sudo usermod -s /sbin/nologin mysql
  • 또는 /etc/passwd 파일을 직접 편집:
    sudo vipw
    • mysql 사용자 항목에서 :/bin/bash:/sbin/nologin으로 변경.
    • 예: mysql:x:999:999:MySQL Server:/var/lib/mysql:/sbin/nologin
    • 편집 후 저장하고 종료.

3. 변경 확인

변경이 올바르게 적용되었는지 확인합니다:

grep ^mysql /etc/passwd
  • 출력 예: mysql:x:999:999:MySQL Server:/var/lib/mysql:/sbin/nologin

4. MySQL 서비스 테스트

변경 후 MySQL 서비스가 정상적으로 작동하는지 확인합니다:

sudo systemctl restart mysql
sudo systemctl status mysql
  • 서비스가 정상적으로 시작되고 오류가 없는지 확인합니다.

5. 추가 보안 조치

  • 계정 잠금: 추가로 mysql 계정을 잠가 로그인 자체를 차단할 수 있습니다:
    sudo passwd -l mysql
  • 권한 점검: MySQL 데이터 디렉토리(/var/lib/mysql 등)와 설정 파일(/etc/my.cnf 등)의 소유자가 mysql 사용자와 그룹으로 설정되어 있는지 확인:
    ls -ld /var/lib/mysql
    ls -l /etc/my.cnf
    • 필요 시 권한 수정:
      sudo chown -R mysql:mysql /var/lib/mysql
      sudo chmod -R 750 /var/lib/mysql
  • 불필요한 권한 제거: mysql 계정이 불필요한 시스템 권한(예: sudo 권한)을 가지지 않도록 확인:
    sudo visudo
    • mysql 계정 관련 항목이 없어야 합니다.

6. 모니터링 및 로깅

  • 변경 후 시스템 로그를 모니터링하여 예상치 못한 오류가 발생하는지 확인:
    sudo tail -f /var/log/syslog
    # 또는
    sudo tail -f /var/log/messages
  • MySQL 관련 오류 로그도 확인:
    sudo tail -f /var/log/mysql/error.log

7. 롤백 계획

만약 변경 후 문제가 발생하면, 셸을 원래대로 복구할 수 있습니다:

sudo usermod -s /bin/bash mysql
  • 복구 후 MySQL 서비스를 다시 테스트합니다.

추가 권장 사항

  • 최소 권한 원칙: mysql 계정은 MySQL 서비스 실행에 필요한 최소한의 권한만 가져야 합니다.
  • 정기 점검: /etc/passwd/etc/shadow 파일을 주기적으로 점검하여 의도하지 않은 변경이 있는지 확인합니다.
  • SELinux/AppArmor: SELinux 또는 AppArmor가 활성화된 경우, mysql 계정의 동작이 제한될 수 있으므로 관련 정책을 점검합니다.
반응형