Unix/CentOS

Pam MySQL로 계정 관리

ForceCore 2007. 1. 27. 02:03

미완성 -_-...

아직 성공 못함

 

새 학부서버에는 계정 관리를 어떻게 할지 고민해봤다.

/etc/passwd ?

Open LDAP이나 기타 디렉토리?

MySQL ?

 

/etc/passwd가 가장 안정적이기는 한데 -_-a...

디렉토리 계통은 쉽게 다루기가 어려운듯 :S ??

사용자 데이터베이스가 좀 더 안전하게 저장되면서 나중에 다른 컴퓨터로 migrate 하기 쉬운 것...

 

뭐 일단은 새로운 것을 시도해본 뒤 결정해도 늦지 않겠지.

 

MySQL로 계정을 돌리되, 다른 프로그램과 쉽게 연동이 되도록 PAM으로 접근하도록 한다.

그래서 PAM-MySQL로 gogogo.

 

http://pam-mysql.sourceforge.net/

http://savannah.nongnu.org/projects/nss-mysql

 

pam-mysql을 들어가보니 다른 사용자의 정보...

홈이 어딘지 실명이 뭔지는...  nss mysql을 참고하라고 한다.

 

그리고

http://libnss-mysql.sourceforge.net/

libnss-mysql도 존재한다 (!)

 

nss mysql을 붙들고 반나절 있었는데 실패 -_-;;

 

프로젝트나 홈페이지를 보니 libnss-mysql이 더 active한듯.

그것으로 gogogo...

 

소스코드를 받았다.

 

$ ./configure

를 했는데 안 된다.

mysql library가 어디 있는지 못 찾는 것이다 -.-!

 

$ ./configure --with-mysql=[여러가지]

여러가지 부분에

locate mysql | grep .so

에서 나오는 결과를 시도해봤는데 죽어도 인식 못하더군 -.-;;

 

configure파일을 컨닝해서

$MYSQL_LIB_DIR

를 잘 설정해주면 된다는 것을 알아내었다.

 

$ export MYSQL_LIB_DIR=/usr/lib64/mysql

로 설정하고

 

$ ./configure 를 했다.

 

$ make

 

이상 없음

 

# make install

 

MySQL DB를 설정해야지;;;

일단은

/etc/libnss-mysql.cfg

/etc/libnss-mysql-root.cfg

 

에서 유저의 비번을 설정해준다.

 

컴파일 한 디렉토리의 sample디렉토리로 들어가면

linux가 있을 것이다.

그 안의

sample_database.sql

이 파일에서

 

# The permissions ...
GRANT USAGE ON *.* TO`nss-root`@`localhost` IDENTIFIED BY 'rootpass';
GRANT USAGE ON *.* TO`nss-user`@`localhost` IDENTIFIED BY 'userpass';

 

'rootpass'

'userpass'부분을 적절히 설정해준다.

 

$ mysql -u root -p < sample_database.sql

 

이렇게 하면 auth라는 db가 만들어지고, 그 안에 샘플로 유저와 그룹을 하나 넣어 줄 것이다.

권한 설정도 잘 되어있다 -_-;;;;

 

그 다음이 문제.

 

$ getent passwd

명령을 치면 유저가 나오지를 않는다 (!)

 

그게 왜 그런고 하니...

 

http://libnss-mysql.sourceforge.net/libnss-mysql/DEBUGGING

이 글을 따라가보면서 디버그 해보자.

 

$ strace -e read=all -e write=all -x -o trace.out id cinergi

( cinergi는 샘플로 생성되는 유저이다. 유용하니까 일단은 db에 놔두도록 하자. )

 

이 명령을 실행하면 id cinergi명령이 수행하는 것을 추적해서 trace.out파일에 저장한다.

 

디버그 매뉴얼에 있는대로 일단은 libnss계열 파일이 로드되는지 체크해봤는데 없다.

필자의 trace.out

open("/lib64/tls/x86_64/libnss_mysql.so.2", O_RDONLY) = -1 ENOENT

 

엉뚱한데서 libnss_mysql.so.2를 찾고 있다 :(

+---------------------------------------+

| $ locate libnss_mysql

| /lib/libnss_mysql.so
| /lib/libnss_mysql.la
| /lib/libnss_mysql.so.2
| /lib/libnss_mysql.so.2.0.0

+---------------------------------------+

 

다른 libnss 계열 파일들이 /lib64 디렉토리에 있으니 이들을 옮겨주도록 하자.

 

다시 strace 명령을 한뒤 trace.out을 읽음.

라이브러리는 잘 읽어들인다.

mysqlclient 계열 라이브러리도 읽어들일 것이다.

 

이 정도 되면 된다고 매뉴얼에 있는데 :S