관리 메뉴

Heizelnut의 IT이야기

useradd & passwd 명령어 이용시 계정 길이 제한 늘리기 본문

IT_Engineer/Linux

useradd & passwd 명령어 이용시 계정 길이 제한 늘리기

Heizelnut 2012.08.07 13:04
크리에이티브 커먼즈 라이선스
Creative Commons License

일반적으로 서버를 운영하다보면 계정이름이 31자를 넘을 일은 없지만

필자는 호스팅 회사에서 근무를 하다보니 한글도메인을 세팅할때는 한글이 아니라 영문자로 엄청 긴 계정을 세팅할 일이 있었다.

보아하니 총 35자. 필자가 운영하는 OS는 CentOS 4.4 ~ 9 인데 31자로 제한이 걸려있었다.

( 이 계정 이름 길이는 시스템마다 다른듯했다. 제한이 없는 시스템도 있고 8자 또는 12자 , 16자 등등 )

그래서 이러한 상황은 처음 겪는 일이기에 구글링을 열심히 했다. 정말 열심히 했다. 해외 사이트도 뒤지고 안 뒤져본 곳이 없었다. 그러나 결과는 제한이 있네 없네 길이가 몇 자까지 되네 안되네 이러한 이야기들 뿐이었다.

그래서 문득 떠오르는 생각.

"useradd 프로그램은 오픈소스잖아?! 소스 가져다가 스트링 길이 검사하는 부분을 고치면 되지않을까?!" 란 생각이 났고 곧 바로 실행에 옮겼고 결국 해결했다. 아무리 찾아도 없는 내용이라(고수분들은 필자와 같은 생각을 했겠지만, 그렇다고 필자가 고수는 아니다...^^;) 괜히 엄한데 삽질하여 시간 뺏기는 일이 없도록 하기 위하여 필요한 분들을 위해 포스팅을 하였다. 

1. useradd 

일단 소스 파일을 구해야 했다.

http://vault.centos.org - 현재 CentOS 4.x 는 지난 3월? 4월? 공식 지원이 종료되었다.

자신이 운영하는 버젼에 맞춰 받는것이 좋겠다. 필자는 그냥 4.4로 작업하였다.

4.4 -> os -> SRPMS -> shadow-utils-4.0.3-60.RHEL4.src.rpm

편하게 콘솔에서 wget으로 다운 받았다.


$ rpm -Uvh shadow-utils-4.0.3-60.RHEL4.src.rpm

하면 메시지들이 쭈욱 뜨면서 끝난다.

$ cd /usr/src/redhat/SPEC

들어가면 shadow-utils-4.0.3.spec 파일이 보인다.

$ vi /usr/include/bits/utmp.h

#define UT_NAMESIZE 32 -> 원하는 길이 값으로 수정

동일 경로의 utmpx.h 도 똑같이 변경해준다.

$ pwd 치면 현재 위치는 /usr/src/redhat/SPEC 이어야 한다.

$ rpmbuild -ba shadow-utils-4.0.3.spec

컴파일이 될 것이다.(* 의존성 메시지가 뜰 수 도 있다. yum으로 설치 하거나 업데이트 시켜주면 된다.)

컴파일이 완료되면

$ cd /usr/src/redhat/BUILD/shadow-4.0.3/src

useradd 바이너리 파일이 보인다. 저것을 /usr/sbin/ 에다가 복사하면된다.

( 원본 바이너리 파일은 꼭 백업해 놓자 )


 2. passwd 

역시 상단글의 사이트에서 passwd 소스를 받자.

passwd-0.68-10.1.src.rpm 파일을 받으면 된다.

상단글에서 /usr/src/redhat/SPEC 들어가기전 과정까진 같다.

다만 SPEC 으로 들어가는게 아니라 /usr/src/redhat/SOURCE 폴더로 접근한다.

여럿 *.patch 파일등과 함께 passwd-0.68.tar.bz2 파일이 보인다.

$ tar xvjf passwd-0.68.tar.bz2

$ cd passwd-0.68

$ vi pwdb.c

MAX_NAMESIZE 32 -> useradd때 수정한 값으로 수정

$ cd ..

$ rm passwd-0.68.tar.bz2

$ tar cvjf passwd-0.68.tar.bz2 passwd-0.68

$ cd /usr/src/redhat/SPEC

$ rpmbuild -ba passwd-0.68.spec

$ cd ../BUILD/passwd-0.68

passwd 바이너리 파일이 보인다. /usr/bin 으로 복사한다. ( 역시 원본은 꼭 백업해 놓기 )


이렇게 작업을 하면 31자 이상 계정 이름을 생성 할 수가 있다.


* 필자 주관적 의견 : 왜 계정 이름에 제한을 두었는지는 예상하기론 버퍼오버플로우를 방지하기위함과 다른 프로그램과의 호환성 때문인것 같다. 따라서 너무 말도 안되는 길이의 계정명은 아예 만들때 피하는게 좋지만 필자와 같이

피치 못 할 경우일때만 적당히 수정해서 사용해야겠다. 물론 수정하고 다른 프로그램등 호환성 테스트도 진행하여야 할것이다.

신고
1 Comments
댓글쓰기 폼