· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Linuxdoc Sgml/NIS-HOWTO

The Linux NIS(YP) / NYS / NIS+ HOWTO

The Linux NIS(YP) / NYS / NIS+ HOWTO

Thorsten Kukuk

v1.0, 9 March 1999 김형찬 zenix@air.knu.ac.kr 1999년 10월 3일
본 문서는 리눅스에서 NIS(YP) 혹은 NIS+ 클라이언트를 어떻게 설정하는지 그리 고, NIS서버를 어떻게 설치하는지에 대한 설명입니다.

1. 서두

리눅스는 컴퓨터 네트웍의 한 구성원으로서 계속해서 설치되고 있다. 네트웍 관 리를 간단하게 하기 위하여, 대부분 네트웍들은(거의 선 기반의 네트웍들) 네트 웍 정보 서비스(Network Information Service)를 가동하고 있다. 리눅스는 존재 하고 있는 NIS에 대해 서비스를 받을 수 있고, 또한 그것들 자체로 NIS 서비스 를 제공해 줄 수도 있다. 리눅스는 또한 NIS+의 클라이언트의 기능을 다할 수 있으나, 이것의 제공은 베타의 단계이다.

본 문서는 당신의 리눅스 머쉰에 NIS(YP) 와 NIS+를 세팅하는 방법에 대한 궁금 중에 답하려고 노력할 것이다. RPC Portmapper 부분을 읽는 것을 잊어버리지 마라 The RPC Portmapper.

NIS-Howto 원본 문서는 다음의 사람에 의해 편집되고 유지된다.

        Thorstem Kukuk, <kukuk@suse.de>

다음은 NIS-Howto 문서를 쓸 수 있게 우선적인 정보를 제공해 준 사람들이다.

        Andrea Dell'Amico       <adellam@ZIA.ms.it>
        Mitchum DSouza          <Mitch.DSouza@NetComm.IE>
        Erwin Embsen            <erwin@nioz.nl>
        Peter Ericsson          <peter@ifm.liu.se>

위 사람들에 대해 이 문서의 첫 버전이 나올 수 있었던데 대해 감사해야 한다.

1.1 본 문서의 새 버전

여러분은 본 문서의 가장 최근 버전을 다음 World Wide Web URL을 통하여 구할 수 있다. http://www.suse.de/~kukuk/linux/HOWTO/NIS-HOWTO.html

본 문서의 새로운 버전은 또한, LDP(Linux Document Project) 홈페이지를 비롯 한 다양한 Linux 관련 웹 사이트나 FTP 사이트에서 구할 수 있다.

본 문서의 다양한 번역본에 대한 링크는 다음 URL에서 찾을 수 있다.

http://www.suse.de/~kukuk/linux/nis-howto.html

1.2 권리의 포기

비록 본 문서가 내 지식에 대한 모든 최선을 다하였다 하더라도, 오류가 있을 가능성도 배제할 수 없다. 보다 더 자세하고 정확한 정보를 얻기 위하여, 본 문서를 설명하고 있는 여러가지 관련 소프트웨어에 같이 포함되어 있는 README 파일을 읽기바란다. 나는 가능한 이 문서에 오류가 없도록 계속 노력할 것이다.

kukuk@suse.de 에게 메일을 보내는 데 대해 주저하지 말기를 바란다. 나는 어떠한 제안이나 혹 은 비난들도 환영한다. 만약 여러분이 본 문서에 대한 오류를 발견하였을 경우, 내가 본 문서의 다음 버전에서 수정될 수 있도록 나에게 알려주기를 바란다. 감 사합니다. 나에게 여러분이 사용하는 리눅스 배포판에 대한 특별한 문제에 대해서 질문하 기 위해 메일을 보내지는 말기를 바란다. 하지만 보내준 것에 대한 해결책 을 추가하도록 노력은 할 것이다.

1.4 본문서에 대하여 감사하는 사람들

직접적으로나 간접적으로 본 문서에 공헌해 준 분들에 대해 감사하게 생각한다. 알파벳 순서로 나열하면:

        Byron A Jeff                    <byron@cc.gatech.edu>
        Markus Rex                      <msrex@suse.de>
        Miquel Van SmoorenBurg          <miquels@cirtron.nl>

Theo de Raadt가 yp-client 코드에 대한 본래적 책임을 가지고 있다. Swen Thue mmler는 yp-client 코드를 리눅스용으로 포팅했으며, 또한 yp-routine을 libc(T heo의 작업에 의한)에서 포팅하기도 했다. Thorsten Kukuk은 스크래치로부터 GN U libc 2.x를 위한 NIS(YP) 그리고 NIS+ 루틴을 작성하여왔다.

2. 용어와 일반적인 사항들

2.1 사용되는 용어에 대하여

본 문서에서는 많은 두문자어(예를들어 DBM하면 Data Base Management식으로)들 을 사용한다. 여기에서는 가장 중요한 두문자어들에 대한 설명을 할 것이다.

DBM

DataBase Management, 데이터베이스에서 key-contents의 쌍을 유지하 는 함수 라이브러리이다.

DLL

Dynamic Linked Library, 프로그램이 런타임시(실행될 때), 링크가되 는 라이브러리.

domainname

NIS 클라이언트에의해 사용되는 key역할을 하는 이름으로, dom ainname key를 제공하는 NIS서버의 위치를 찾는데 사용된다.

FTP

File Transfer Protocol, 두 개의 컴퓨터간에 파일전송에 대한 규약.

ibnsl

Name 서비스 라이브러리로, SVR4 유닉스들에서 getpwnam, getservby name등을 호출한다. GNU libc는 NIS(YP)와 NIS+함수(기능,구현)들을 위하여 이 라이브러리를 사용한다.

libsocket

소켓 서비스 라이브러리, SVR4 유닉스들에서 socket, bind, lis ten등을 호출하는 소켓 서비스 라이브러리이다.

NIS

Network Information Service, 네트웍을 통하여 알려진 네트웍상의 모 든 머쉰들에게 Information을 제공하는 서비스이다. 다음에 오는 "traditional NIS"라고 명시된 부분에서는 리눅스의 표준 libc 라이브러리에서의 NIS에 대한 지원이 있다.

NIS+

Network Information Service (Plus :-), NIS가 녹아들어간 격인데, NIS+는 선 마이크로시스템즈 Inc. 가 NIS의 대안으로 디자인한 것으로, NIS보 다 보안성과 많은 수의 Installation에 대한 핸들링을 하기에 좋게 만든 것이다.

NYS

이것은 프로젝트 이름으로, NIS+를 나타낸다. YP와 Switch는 Peter Eri ksson <peter@ifm.liu.se>에 의해 이끌어진다. NYS는 NYS 라이브러리의 Name Services Switch 기능을 사용하는 NIS(=YP)코드를 거의 완전히 다시 작성된 것이다.

NSS

Name Service Switch, /etc/nsswitch.conf 파일은 어떤 정보가 요청되 었을 때, 수행되는 lookup들의 순서를 결정한다.

RPC

Remote Procedure Call. RPC 루틴은 C 프로그램이 네트웍의 다른 머쉰 상에서 프로시저 콜을 할 수있게 한다. 사람들이 일반적으로 RPC에 대해 말할때 는, 그것은 Sun RPC의 변종을 말하는 것이다.

YP

Yellow Pages(tm), 영국의 British Telecom plc.의 등록상표이다.

TCP-IP

Transmission Control Protocol/Internet Protocol. 이것은 유닉스 머쉰들 사이에서 가장 널리 사용되는 데이터 통신 규약이다.

2.2 일반적인 사항들

다음 3줄의 구문은 선 마이크로시스템즈와 네트워크 관리 메뉴얼에서 발췌한 것 이다.

        "NIS는 원래 Sun Yellow Pages(YP) 로 알려졌으나,
        Yellow Pages(tm)이라는 이름은 대영제국의 British Telecom plc
        의 트레이드마크로 등록되어 있어서 허가 없이는 사용할 수 없다."

NIS는 네트워크 정보 서비스(Network Information Service)을 의미한다. 그것 의 목적은 네트워크상에 있는 모든 머쉰들에게, 네트워크를 통애 알려진 정보 를 제공하는데 있다. NIS에 의해 제공되는 정보들은 대략 다음과 같은 것들이다.

  • login names/passwords/home directories (/etc/passwd)
  • group information (/etc/group)

만약, 예들들어 당신계정의 패스워드가 NIS passwd 데이터베이스에 기록되어 있 다면, 당신은 NIS 클라이언트 프로그램이 실행되고 있는 네트워크상의 모든 머쉰 에서 로그-인 할 수 있다.

선(Sun)은 선소프트(SunSoft, Inc.)에 라이센드된 선 마이크로시스템즈(Sun Mic rosystems, Inc.)의 등록상표이다.

3. NIS, NYS 혹은 NIS+?

3.1 libc 버전4/5 에서의 traditional NIS 혹은 NYS ?

"전통적인 NIS" 혹은 NYS 라이브러리의 NIS 코드를 선택하는 것은, 게으름과 성 숙 대 유연함과 사랑의 모험에서 선택화는 것과 유사하다.

표준 C 라이브러리에 있는 "전통적인 NIS" 코드는 오랫동안 사용되어 왔지만, 나 이(오래됨?)와 약간의 비유연함때문에 고생을 하고 있다.(약간 문제가 있다)

NYS 라이브러리에 있는 NIS 코드는 NYS 코드를 libc 라이브러리에 포함시키기 위 해 libc 라이브러리를 다시 컴파일 해야한다.

또 다른 한가지는, 전통적인 NIS 코드는 NIS 네트워크 그룹을 어느 정도 지원한 다.(NYS는 안됨.) 반면에, NYS 코드는 투명한 방법으로 쉐도우 패스워드들을 핸 들링하는 것을 허락한다. "전통적인 NIS" 코드는 이런 쉐도우 패스워드를 지원 하지 않는다.

3.2 glibc 2 그리고 NIS/NIS+

만약 여러분이 새로운 GNU C Library 2.x (aka libc6)를 사용하고 있다면 건너 뛰어도 좋다. 이 새 버전은 실제로 NSS(name switch service, 이것은 매우 유연 하고 다음과 같은 NIS/NIS+ map을 지원한다. : aliases, ethers, group, hosts, netgroups, networks, protocols, publickey, passwd, rpc, services and shado w)를 지원한다. GNU C 라이브러리는 NIS를 통한 쉐도우 패스워드를 사용하는 데 아무런 문제가 없다.

3.3 NIS or NIS+ ? ( 어떤 것을 선택할 것인가? )

NIS와 NIS+ 간의 선택은 쉽다. NIS+를 사용할 필요가 없거나, 강력한 보안이 필 요한 경우에는 NIS를 사용하라. NIS+ 는 관리자들에게 NIS에 비해 상당히 문젯 거리이다.(NIS+는 클라이언트쪽에서는 다루기 쉽지만, 서버쪽에서는 무시무시할 만큼 어렵다.) 또 다른 문제는 리눅스 환경에서의 NIS+는 아직 개발중이라는 것 이다. -- 여러분은 최신버전인 glibc 2.1이 필요하다. 거기에는 libc5를 위한 g libc NIS+ 의 지원되지 않는 포트가 있다.

4. 어떻게 작동하는가

4.1 NIS는 어떻게 작동하는가

네트워크 상에서, 적어도 하나의 NIS 서버가 있을 것이다. 여러분의 머쉰은 여러 개의 다른 NIS "도메인들"의 여러개의 NIS 서버를 사용할 수 있다. 혹은 하나는 master NIS 서버로, 다른 것들은 slave NIS 서버(특정한 NIS "domain"을 위한.. )라 불리는 것들로서 협동적인 NIS 서버들을 사용할 수가 있다. 혹은 그것들의 혼합형을 사용 할 수도 있다.

Slave 서버는 단지 NIS 데이터베이스의 카피를 가지고 있으며, 이것들이 갱신될 때마다, Master 서버로 부터 이 카피들을 받는다. 여러분 네트워크 상의 머쉰 수와 네트워크의 유연성에 따라서, 하나 혹은 여러개의 slave 서버를 설치할 것 인지를 결정하면 된다. NIS서버가 다운 되거나, 클라이언트에 대한 요구가 지연 될 때마다, NIS클라이언트는 돌아가고 있거나 혹은 더 빠른 slave에 접속되어진다.

NIS 데이터베이스들은 ASCII 데이터베이스로부터 상속된 DBM 포맷안에 있다. 예 를 들어, /etc/passwd/etc/group 파일은 직접적으로 ASCI I-to-DBM 번역 소프트웨어(서버 소프트웨어에 포함된, "makedbm")를 사용하여 D BM포맷으로 만들어질 수 있다. NIS서버는 ASCII 데이터베이스와 DBM 데이터베이 스를 동시에 가지고 있어야 한다.

Slave 서버들은 NIS 맵을 통해("yppush"프로그램을 통해) 변경 사항을 알 수 있 다. 그리고는 그것들의 데이터베이스에 동조되기 위해 자동적으로 필요한 변경사 항들을 갱신한다. NIS 클라이언트들은 항상 서버로 부터 서버의 DBM 데이터베이 스에 저장된 정보들을 읽기 때문에, 이러한 것들이 필요가 없다.

옛 버전의 ypbind 프로그램들은 NIS 서버를 찾기 위해 broadcast를 한다. 이것 은 누구나 NIS서버를 설치하여 그 broadcast 쿼리에 응답을 할 수 있으므로 안전 하지 못하다. 새로운 버전의 ypbind(yp-bind-3.3 or ypbind-mt)는 configuratio n파일로 부터 서버를 찾기 때문에 broadcast를 할 필요가 없어 보다 안전하다.

4.2 NIS+는 어떻게 작동하는가

NIS+는 선에서 개발한 새로운 버전의 network information service이다. NIS와 NIS+ 사이의 가장 큰 차이점이라면 NIS+는 secure RPC를 통해 데이터의 암호화 와 인증(encryption and authentication)을 지원한다는 것이다.

NIS+의 모델은 tree구조에 근간하고 있다. 트리의 하나의 노드는 하나의 NIS+ 오 브젝트에 대응한다. 그 오브젝트들은 다음의 6개의 타입을 가지고 있다.(direct ory, entry, group, link, table, private)

NIS+ namespace 의 root를 형성하는 NIS+디렉토리를 root 디렉토리라고 한다. N IS+디렉토리에는 특별한 두 가지가 있다: org_dir 고 groups_dir. org_dir 디렉 토리는 passwd, hosts 그리고 mail_aliases같은 관리 테이블로 이루어져 있다. groups_dir 디렉토리는 접근 제어(access control)을 위해 사용되는 NIS+ 그룹 오브젝트들로 이루어져 있다. org_dir, groups_dir 그리고 그들의 상위 디렉토 리는 NIS+ domain에 의해 참조된다.

5. RPC Portmapper

다음에 소개될 프로그램(yp툴들..)을 실행하기위해서, 여러분은 /usr/sbin/port map을 실행시켜야 한다. 어떤 리눅스 배포판들은 이미 /sbin/init.d/ 혹은 /etc /rc.d/ 디렉토리안에 있는 파일에서 portmap 데몬을 띄우도록 코딩되어 있다. 여러분이 해야할 것은 단지 이것을 활성화시키고 리부팅하는 것이다. 이것을 위 해 여러분이 가지고 있는 리눅스 배포판의 문서를 참조하라.

RPC portmapper (portmap(8))은 RPC 프로그램 번호를 TCP/IP(혹은 UDP/IP) 프로 토콜 포트 번호로 변환하는 서버이다. 이것은 머쉰상의 RPC 서버들(NIS 혹은 NI S+와 같은)을 위해 RPC CALL들(이것은 NIS/NIS+ 클라이언트 소프트웨어들이 하 는 것이다.)을 만든다. RPC서버가 시작되면, 이것은 Listen되고있는 port 번호 를 portmap에게 알려준다. 클라이언트가 주어진 프로그램 번호에게 RPC프로그램 번호를 만들려고 할 때, 클라이언트는 먼저 서버에 접속하여 RPC 패킷이 어디로 보내져야 하는지 결정한다.

보통, 표준 RPC 서버는 inetd(8)에 의해 시작되기 때문에, portmap은 inetd가 시작되기 전에 실행되어야 한다.

Secure(안전한?) RPC를 위하여, portmapper는 Time Service를 필요로 한다. Tim e Service는 모든 hosts에 대해 /etc/inetd.conf에서 가능하다는 것을 확실히 해 두어라.

#
# Time service is used for clock syncronization
#
time    stream  tcp     nowait  root    internal
time    dgram   udp     wait    root    internal

중요사항 : Configuration 파일 변경후에, inetd를 재실행 하는 것을 잊지마라!

6. NIS를 설치하기 위해 필요한 것들은 무엇인가?

6.1 여러분이 Server, Slave혹은 Client인지 결정하라.

이 문제에 답하기 전에, 다음 두가지를 고려해야 한다.

  1. 여러분의 머쉰은 존재하는 NIS 서버와 함께하는 네트워크의 일원이 될 것 이다.
  2. 여러분은 아직 네트워크에 NIS 서버가 없다.

첫 번째 경우에는, 단지 ypbind, ypswitch, ypcat, yppoll, ypmatch 같은 클라이 언트 프로그램만을 필요로 한다. 가장 중요한 프로그램은 ypbind이다. 이 프로그 램은 항상 실행 중에 있어야 한다. 그것은 그 프로그램이 항상 프로세스의 리스 트에 있어야 한다는 말이다. 이것은 데몬 프로세스로 시스템 시작 파일에 의해 시작되어야 한다. (예로, /etc/init.d/nis, /sbin/init.d/ypclinet, /etc/rc.d/ init.d/ypbind, /etc/rc.local)여러분의 시스템은 ypbind가 시작되자 마자 NIS의 클라이언트가 되는 것이다.

두 번째 경우에, NIS 서버가 존재하지 않을 때, 여러분은 분명 NIS 서버 프로그 램(보통 ypserv라 불림)이 필요할 것이다. NIS세팅하기 부분에서 Peter Eriksson과 Thorsten Kukuk에 의해 만들어진 "ypserv" 를 이용하 여 여러분의 리눅스 머쉰에 NIS를 어떻게 설치하는지를 설명할 것이다. 버전 0. 14부터는 4.1부분에서 언급한 바 있는 master-slave개념이 지원된 다는 것을 염 두해 두어라.

독일의 Tobias Reber가 만든 yps라는 NIS 서버 프로그램도 master-slave 개념 을 지원하지만, 오래전부터 지원하지 않은 다른 제약들이 있다.

6.2 소프트웨어

시스템 라이브러리인 "/usr/lib/libc.a" (버전 4.4.2이후의 것) 혹은, 공유라이 브러리인 "/lib/libc.so.x"는 NIS 클라이언트, 서버 프로그램을 성공적으로 컴 파일 하기 위한 시스템 콜을 모두 가지고 있다. GNU C 라이브러리 2(glibc2)에 대해서는 /lib/libnsl.so.1을 필요로한다.

어떤 이들은 NIS가 버전 4.5.21이후의 "/usr/lib/libc.a"와만 작동된다고 하기 때문에, 안전하게 작동하길 원한다면 옛날 버전의 libc들을 쓰지 않는게 좋다. NIS 클라이언트 소프트웨어는 다음의 장소에서 얻을 수 있다.

Site                    Directory                       File Name

ftp.kernel.org          /pub/linux/utils/net/NIS        yp-tools-2.2.tar.gz
ftp.kernel.org          /pub/linux/utils/net/NIS        ypbind-mt-1.4.tar.gz
ftp.kernel.org          /pub/linux/utils/net/NIS        ypbind-3.3.tar.gz
ftp.kernel.org          /pub/linux/utils/net/NIS        ypbind-3.3-glibc5.diff.gz
ftp.uni-paderborn.de    /linux/local/yp                 yp-clients-2.2.tar.gz

소프트웨어를 구했을 때, 소프트웨어에 포함된 인스트럭션을 읽고 따르길 바란 다. yp-clients 2.2는 libc4와 libc5 에서 5.4.20까지를 위한 것이다. libc 5.4 .21과 glibc 2.x는 yp-tools 1.4.1과 그 이후 버전을 필요로 한다. 새로나온 yp -tools 2.2는 모든 리눅스의 libc에서 작동된다. 단, NIS 코드에 버그가 있어서 , 여러분은 5.4.21 - 5.4.35 버전의 libc는 사용하면 안된다. 대신 5.4.36 이후 버전을 사용하는게 좋다. 그렇지 않으면 대부분의 YP프로그램은 작동하지 않을 것이다. ypbind 3.3도 역시 모든 라이브러리에서 작동한다. 만약 gcc 2.8.x혹은 그 이후 버전,egcs 혹은 glibc 2.x를 사용한다면, ypbind-3.3-glibc5.diff patc h를 ypbind-3.3에 추가해 줘야한다. yp-clients 2.2에서 나온 ypbind를 사용하지 말라. ypbind-mt는 새로나온 멀티 쓰레드 데몬이다. 이것은 Kernel 2.2와 glibc 2.1혹은 이후 버전을 필요로 한다.

6.3 ypbind 데몬

소프트웨어를 성공적으로 컴파일을 했으면, 이제 인스톨을 할 준비가 된 것이 다. ypbind 데몬의 적당한 디렉토리는 /usr/sbin 이다. 어떤 이들은 NYS를 이용 하는 시스템에서는 ypbind가 필요 없을 것이라고 말할 수도 있다. 이것은 틀린 것이다. ypwhich와 ypcat은 항상 ypbind를 필요로 한다.

설치 단계의 가장 첫번째로 이것을 해야한다. 다른 바이너리들(ypwhich, ypcat , yppasswd, yppoll, ypmatch)은 보통 /usr/bin과 같은 다른 모든 유저들이 접 근 가능한 곳에 있어야 한다.

새로운 버전의 ypbind는 /etc/yp.conf라는 설정파일을 가지고 있다. 여러분은 그 파일에서 NIS서버를 하드코드해 줄 수 있다. 좀 더 상세한 내용은 manual pa ge의 ypbind(8)을 참조하기 바란다. NYS를 위해서도 이 파일이 필요하다. 예를들면:

        ypserv votager
        ypserv defiant
        ypserv ds9

만약 시스템에서 NIS없이 호스트 네임을 알아낼 수 있다면 그냥 그 이름을 사용 하면 되지만, 그렇지 않은 경우에는 IP address를 사용해야 한다. ypbind 3.3은 버그가 있어서, 위 예의 마지막인 ypserv ds9만을 사용해야 한다. 모든 다른 것 들은 무시된다. ypbind-mt는 이것을 수정하여 사용한다.

스타트 업 파일에서 실제로 적용해 보기전에, ypbind를 테스해 보는 것은 좋다. ypbind를 테스트 해 보기 위해 다음과 같이 할 수 있다.

  • YP-domain name을 설정했는지 확인하라(Make sure you have your YP-domain name set). 이것이 설정되어 있지 않다면 다음의 명령으로 설정할 수 있다.
                    /bin/domainname nis.domain
            
    
    nis.domain은 보통 여러분의 머쉰의 DNS 도메인 이름(DNS-domain)과 연관되지 _ 않는_ 문자열이다! 그 이유는 외부의 크래커가 NIS서버의 패스워드 데이 터베이스를 수정하는데 좀 더 힘들게 할 수 있게 되기 때문이다. 만약 여러분이 여러분 네트워크의 NIS 도메인 네임을 모른다면, 시스템 네트 워크 관리자에게 문의해 보라.
  • 만일 portmap 데몬이 띄어져 있지 있다면, "/usr/bin/portmap"을 실행시켜라.
  • 만일 "/var/yp" 디렉토리가 없다면 그것을 만들어라.
  • "/usr/bin/ypbind"를 실행시켜라.
  • ypbind가 portmapper의 서비스에 등록될 수 있는지 살펴보기 위해 "rpcin fo -p localhost"명령을 사용하라 그것의 결과는 다음과 비슷할 것이다.
            program vers proto   port
             100000    2   tcp    111  portmapper
             100000    2   udp    111  portmapper
             100007    2   udp    637  ypbind
             100007    2   tcp    639  ypbind
            
    
    혹은
            program vers proto   port
             100000    2   tcp    111  portmapper
             100000    2   udp    111  portmapper
             100007    2   udp    758  ypbind
             100007    1   udp    758  ypbind
             100007    2   tcp    761  ypbind
             100007    1   tcp    761  ypbind
            
    
    이것은 여러분이 사용하는 ypbind의 버전에 따라 약간의 차이가 있다.
  • 여러분은 또한 "rpcinfo -u localhost ypbind"를 실행할 수도 있다. 이 명령에 의해 다음과 비슷한 결과가 나와야만 한다.
            program 100007 version 2 ready and waiting
            
    
    혹은
            program 100007 vsrsion 1 ready and waiting
            program 100007 version 2 ready and waiting
    
            
    
    결과는 여러분이 설치한 ypbind버전에 따라 달라질 수도 있다. 중요한 것은 "version 2"라는 메시지이다.

이제 여러분은 ypcat등과 같은 NIS클라이언트 프로그램들을 실행시킬 수 있다. 예를 들어 "ypcat passwd.byname"은 여러분에게 전체 NIS 패스워드 데이터베이 스를 제공해 줄 것이다.

중요사항 : 만약 여러분이 테스트를 그냥 건너뛰었다면, domain 네임을 세팅하 는 것과, 다음 디렉토리 만드는 것을 확실히 하라.

        /var/yp

이 디렉토리는 ypbind가 성공적으로 수행되기 위하여 "반드시" 존재해야 한다.

domainnmae이 올바르게 세팅되었는지를 보기위해, yp-tools 2.2의 /bin/ypdomai nname 을 사용하라. 이것은 보다 엄격한 yp_get_default_domain()함수를 사용 한다. 이것은 리눅스에 기본으로 설정되어 많은 문제를 일으키는 (none) domain name을 허용하지 않는다.

이제 테스트가 되었다면, 여러분은 부팅시 ypbind가 수행되어 여러분의 머쉰이 NIS 클라이언트가 될 수 있도록 시작 파일을 수정하길 원할 지도 모른다. ypbin d가 시작되기 전에 domainname이 세팅된다는 것을 확실히 알아 두자.

바로 그거다. 머쉰을 리부트하고, ypbind가 실제로 시작되었는지 부트 메시지 를 살펴보아라.

6.4 Traditional NIS에서의 NIS세팅하기

호스트 lookup을 위해 /etc/host.conf 파일의 lookup order 줄에 "nis" 를 붙여 넣어라. 자세한 내용을 위하여 man페이지의 "resolv+.8"을 참조하라.

여러분 NIS클라이언트의 /etc/passwd파일에 다음 줄을 추가하여라.

+::::::

여러분은 +와 -문자들을 사용하여 사용자들을 포함/제외 혹은 변경할 수 있다. 만약 guest유저를 사용하고 싶다면, 단지 -guest를 /etc/passwd파일에 넣어주면 된다. "linux"라는 유저에게 ksh과 같은 다른 쉘을 사용하게 하고 싶다해도 아 무 문제 없다. 단지 "+linux::::::/bin/ksh" ( ""는 제외하고 )을 /etc/passwd 에 추가하면 된다. 변경하고 싶은 않은 필드에 대해서는 그냥 빈칸으로 놓아 두 면 된다. 여러분은 또한 사용자들을 관리하기 위해 Netgroup을 사용 할 수 있다.

예를 들어, miquels와 dth, ed 그리고 모든 sysadmin netgroup의 모든 멤버들에 게만 로긴 접근을 허용하지만, 다른 모든 유저들의 계정 데이터를 사용가능한 상태로 남겨 두기 위해서는 다음과 같이 하면 된다.

        +miquels:::::::
        +ed:::::::
        +dth:::::::
        +@sysadmins::::::
        -ftp
        +:*::::::/etc/NoShell 

리눅스에서는 위의 예제와 같이 패스워드 필드를 중첩 할 수 있다. "ftp" 로긴 을 제거 했기 때문에, 이것은 더이상 알려지지 않아 anonymous ftp는 더이상 작 동하지 않을 것이다.

netgroup는 다음과 같다.

sysadmins (-,software,) (-,kukuk,)

중요사항 : netgroup의 기능은 libc 4.5.26부터 만들어졌기 때문에, 4.5.26 이 전 버전을 사용하게 된다면, ypbind가 살아 있는 한 NIS 패스워드 데이터베이스 에 있는 모든 유저들이 여러분의 리눅스 머쉰에 로긴 할 수 있다!!!

6.5 NYS에서의 NIS세팅하기

NIS 설정 파일인 /etc/yp.conf에서 필요한 설정은 단지 올바른 서버를 가리키 는 것이다. 또한 Name Services Switch 설정 파일( /etc/nsswitch.conf )도 올 바르게 셋업 되어 있어야 한다.

여러분은 ypbind를 설치해야 한다. libc가 이것을 필요로 하지는 않지만, NIS(Y P) 툴들은 이것을 필요로 한다.

여러분이 사용자 포함/제외의 기능(+/-guest/+@admins)을 사용하길 원한다면, n sswitch.conf 파일에서 "passwd: compat"과 "group :compat"을 사용해야 한다. "shadow: compat"이 없다는 것을 확실히 알아 두자. 이런 경우에 그것 대신 "sh adow: files nis"를 사용한다.

NYS 소스들은 libc 5 소스들의 일부분이다. 설정을 할 때, 처음에 "Values corr et"의 물음에 "NO"라고 하고, "Build a NYS libc from nys"라는 물음에는 "YES" 라고 답하라.

6.6 glibc 2.x에서의 NIS세팅하기

glibc는 "전통적인 NIS"를 사용한다. 그래서 ypbind를 사용해야할 필요가 있는 것이다. Name Services Switch설정 파일( /etc/nsswitch.conf ) 파일이 올바르게 셋업 되어 있어야 한다. 만약 여러분이 passwd, 쉐도우 혹은 group에 대하여 co mpat 모드를 사용한다면 파일 맨 마지막에 "+"를 추가해 줘야 한다. 그러면 유저 의 포함/제외 기능을 사용할 수 있다. 설정은 솔라리스 2.x에서 하는 것과 정확 하게 일치한다.

6.7 nsswitch.conf 파일에 대해서

/etc/host.conf가 호스트를 찾는 방법을 결정하는 것과 같이, Network Service switch파일 /etc/nsswitch.conf는 어떤 정보가 요구되었을 때, lookup하는 순서 를 결정한다. 예를 들면 다음 라인

        hosts: files nis dns

host를 lookup(찾는)하는 기능은 먼저 /etc/hosts 파일을 찾아보고 NIS lookup을 한 후에 마지막으로 도메인 네임 서비스( /etc/resolv.conf와 named )를 통한 다. 이 때, 실패했을 경우에는 에러를 리턴한다. 이 파일은 모든 유저에게 읽기 권한이 주어져야 한다! 여러분은 man-page의 nsswitch.5혹은 nsswitch.conf.5에 서 좀 더 많은 정보를 얻을 수 있을 것이다.

NIS를 위한 /etc/nsswitch.conf 의 좋은 예이다.

#
# /etc/nsswitch.conf
#
# An example Name Service Switch config file. This file should be
# sorted with the most-used services at the beginning.
#
# The entry '[NOTFOUND=return]' means that the search for an
# entry should stop if the search in the previous entry turned
# up nothing. Note that if the search failed due to some other reason
# (like no NIS server responding) then the search continues with the
# next entry.
#
# Legal entries are:
#
#   nisplus or nis+     Use NIS+ (NIS version 3)
#   nis or yp       Use NIS (NIS version 2), also called YP
#   dns         Use DNS (Domain Name Service)
#   files           Use the local files
#   db          Use the local database (.db) files
#   compat          Use NIS on compat mode
#   [NOTFOUND=return]   Stop searching if not found so far
#

passwd:         compat
group:          compat

# For libc5, you must use shadow: files nis
shadow:         compat

passwd_compat: nis
group_compat: nis
shadow_compat: nis

hosts:          nis files dns

services:   nisplus [NOTFOUND=return] files
networks:   nisplus [NOTFOUND=return] files
protocols:  nisplus [NOTFOUND=return] files
rpc:        nisplus [NOTFOUND=return] files
ethers:     nisplus [NOTFOUND=return] files
netmasks:   nisplus [NOTFOUND=return] files
netgroup:   nisplus
bootparams: nisplus [NOTFOUND=return] files
publickey:  nisplus [NOTFOUND=return] files 
automount:  files nisplus
aliases:    nisplus [NOTFOUND=return] files

passwd_compat, group_compat 그리고 shadow_compat은 glibc 2.x에서만 지원된 다. 만약 /etc/nsswitch.conf에 쉐도우에 대한 규칙들이 없다면, glibc는 look up을 위해 passwd 규칙을 사용할 것이다. glibc를 위해 hesoid같은 다른 looku p 모듈들이 있다. 좀더 많은 정보를 위해, glibc 문서를 참조하기 바란다.

6.8 NIS에서의 쉐도우(Shadow) 패스워드

NIS에서의 쉐도우 패스워드는 항상 좋지 않은 아이디어이다. 쉐도우가 주는 보안 을 잃을 뿐만 아니라, 이것은 아주 적은 몇몇의 리눅스 C 라이브러리에서만 지원 된다. NIS에서의 쉐도우 패스워드를 피하는 좋은 방법은 오직 로컬 시스템의 유 저만 /etc/shadow에 넣는 것이다. 이렇게 함으로써 여러분은 root 로긴시 쉐도우 를 이용할 수 있고, 일반 NIS 유저들에게는 보통의 passwd 방법을 사용할 수 있 다. 이것으로 모든 NIS클라이언트와 함께 작동하는 이점을 얻을 수 있다.

Linux

NIS에서 쉐도우 패스워드를 지원하는 리눅스 libc는 GNU C Library 2.x밖에 없 다. 리눅스 libc 5는 이것을 지원하지 못한다. 리눅스 libc 5가 NYS가 가능한 코드와 함께 컴파일 되었지만, 그 코드는 어떤 경우에 있어서 심각하게 깨져버 리고, 모든 올바른 쉐도우 엔트리에 대하여 작동하지 않는다.

Solaris

솔라리스는 NIS를 통한 쉐도우 패스워드를 지원하지 않는다.

PAM

PAM은 유난히 pam_pwdb/libpwdb에서 NIS를 통한 패스워드를 지원하지 않는다. 이것은 RedHat 5.x 유저들에게 있어서 큰 문제이다. 만약 glibc와 PAM을 가지 고 있다면, 여러분은 /etc/pam.d/* 엔트리들을 변경할 필요가 있다. 모든 pam_p wdb 규칙들을 pam_unix_* 모듈들로 교체해라. pam_unix_auth.so 모듈의 버그 때 문에, 이것은 언제나 작동하지는 않는다.

/etc/pam.d/login 파일의 예는 다음과 유사하다:

#%PAM-1.0
auth       required     /lib/security/pam_securetty.so
auth       required     /lib/security/pam_unix_auth.so
auth       required     /lib/security/pam_nologin.so
account    required     /lib/security/pam_unix_acct.so
password   required     /lib/security/pam_unix_passwd.so
session    required     /lib/security/pam_unix_session.so

인증을 위하여 여러분은 pam_unix_auth.so 모듈이 필요하다. 계정을 위해서는 p am_unix_acct.so가 필요하고 패스워드를 위해서 pam_unix_passwd.so 그리고 세 션처리를 위해 pam_unix_session.so모듈이 필요하다.

7. NIS+를 설치하기 위해 필요한 것들은 무엇인가?

7.1 필요한 소프트웨어

리눅스 NIS+코드는 GNU C 라이브러리 2를 위해 만들어졌다. 대부분의 상업용 어 플리케이션들이 libc5에 링크를 걸어 놓고 있어서, 리눅스 libc5용으로도 포팅 되어 있다. 여러분은 libc를 가지고 그것을 다시 컴파일 할 수 없다. libc5와 N IS+에는 다음과 같은 문제가 있다. static 프로그램들은 그것과 링크될 수 없고 ,이 라이브러리에 의해 컴파일 된 프로그램들은 다른 libc5버전에서 실행되지 않을 것이다.

여러분은 인텔기반의 플랫홈을 위해, GNU C 라이브러리 2.1로 수정하고 컴파일 해야 할 필요가 있다. 64bit 플랫폼에서는 GNU C 라이브러리 2.1.1로 해야한다. 근간 시스템으로는 데비안 2.x, 레드햇 5.x, 수세 6.x 같은 glibc가 근간인 배 포판을 필요로 할 것이다.

모든 배포판을 위하여, gcc/g++ 컴파일러와 libstc++, ncures를 다시 컴파일할 필요가 있다. 레드햇에서, 여러분은 많은 경우 PAM 설정을 변경하는 것을 많이 하게 된다. 수세 리눅스 6.0 에서는 쉐도우 페키지를 다시 컴파일 할 필요가 있 다.

NIS+ 클라이언트 소프트웨어는 다음으로 부터 얻을 수 있다:

Site            Directory                       File Name

ftp.funet.fi    /pub/gnu/funet                  libc-*, glibc-crypt-*,
                                                glibc-linuxthreads-*
ftp.kerbel.org  /pub/linux/utils/net/NIS+       nis-utils-19990223.tar.gz
ftp.kerbel.org  /pub/linux/utils/net/NIS+       pam_keylogin-1.2.tar.gz

배포판의 glibc는 다음으로 부터 패치할 수 있다.

Site            Directory

ftp.debian.org  /pub/debian/dists/slink
ftp.redhat.com  /pub/redhat/redhat-5.2
ftp.suse.de     /pub/SuSE-Linux/6.0

GNU C 라이브러리를 고쳐서 만든 소프트웨어들에 대해서는 포함된 지시문을 잘 읽어 보길 바란다. 여러분은 NYS에 근간한 libc5 패치를 찾을 수 있다. 표준 li bc5를 대체한 그 소스는 다음 장소에 있다:

Site            Directory               File Name

ftp.kernel.org  /pub/linux/utils/NIS+   libc-5.4.44-nsl-0.4.10.tar.gz

여러분은 http://www.suse.de/~kukuk/linux/nisplus.html 에서 더 많은 정보와 최신 버전의 소스를 얻을 수 있다.

7.2 NIS+ 클라이언트 설치하기

중요사항 : NIS+ 클라이언트를 세팅하기 위하여 서버쪽에서 어떻게 되는지 나와 있는 솔라리스 NIS+ 문서를 읽어보라! 이 문서는 단지 클라이언트 쪽에서 무엇 을 하는지에 대하여만 나와있다!

새로운 glibc와 nis-tool들을 설치한 후에, NIS+ 서버의 새로운 클라이언트들 을 위하여 보증을 해라. portmap이 돌아가고 있다는 것을 확인해라. 그리고 여 러분의 리눅스PC가 NIS+ 서버와 같은 시간이 설정되었는지 체크를 하라. 안전 한 RPC를 위해, 보증이 유효한 약 3분정도 단지 하나의 작은 윈도우를 가진다. 모든 호스트에 xntpd를 실행시키는 좋은 방법이 있다. 이것을 한 후에 다음을 실행하라.

domainname nisplus.domain.
nisinit -c -H <NIS+ server>

아무런 옵션이 없는 시작파일을 초기화하기 위해, nisinit 맨 페이지를 참조하 라. domainname은 항상 리부트 후에 세팅 된다는 것을 명심하라. 만일 네트웍에 서 NIS+ 도메인 네임이 무엇인지 모르면, 여러분의 시스템/네트워크 관리자에게 문의하라.

이제 /etc/nsswitch.conf파일을 변경해야 한다. 단지 publickey뒤에 오는 서비 스는 nisnis밖에 없다는 것을 명심하라. ( "publickey: nisnis" )

그리고 keyserv를 실행시켜라. 명심할 것은 이것이 시스템이 부트될 때, portma p이 실행되고 나서 바로 처음으로 실행되는 데몬이라는 것이다. 시스템에서 roo t의 비밀키를 저장하기 위해, 다음과 같이 실행하라.

keylogin -r
(나는 여러분이 NIS+ 서버에 대한 새로운 호스트를 위해 publickey를 추가 했을 거라 기대한다?)

"niscat passwd.org_dir"은 패스워드 데이터베이스의 모든 엔트리를 나타내야 한다.

7.3 NIS+, keylogin, login 그리고 PAM

유저가 로긴을 했을 때, keyserv를 위해 각 유저의 비밀키를 세팅할 필요가 있 다. 이것은 "keylogin"이라 것에 의해 된다. 쉐도우 패키지에서의 로긴은 glibc 2.1에 의해 컴파일되어 있다면 알아서 세팅한다. PAM aware 로긴를 위하여, 여 러분은 NIS+를 지원하지 않는 pwdb가 아닌 pam_unix_auth 를 사용하기 위해, pam-keylogin-1.2.tar.gz를 설치하고 /etc/pam.d/login파일을 수정해야 한다. 예 를 들어:


#%PAM-1.0
auth            required        /lib/security/pam_securetty.so
auth            required        /lib/security/pam_keylogin.so
auth            required        /lib/security/pam_unix_auth.so
auth            required        /lib/security/pam_nologin.so
account         required        /lib/security/pam_unix_acct.so
password        required        /lib/security/pam_unix_passwd.so
session         required        /lib/security/pam_unix_session.so

7.4 nsswitch.conf 파일

네트워크 서비스 스위치( network service switch ) 파일 /etc/nsswitch.conf 는 /etc/host.conf파일이 호스트를 찾는 방법들을 결정하는 것과 같이, 어떤 정보가 요구 되어졌을때, 그것을 찾는 순서를 결정한다. 예를 들어서 다음 라 인을 보면,

        hosts: files nisplus dns

이것은 호스트를 찾는 펑션에서 먼저 로컬의 /etc/hosts 파일에서 먼저 찾고, 그 다음 NIS+에 의해 찾고, 마지막으로 도메인 네임 서비스(/etc/resolv.conf 와 named)를 통해 찾는다. 이 경우 맞는 것을 못찾았을 경우 에러가 리턴된다.

다음은 NIS+를 위한 /etc/nsswitch.conf의 좋은 예이다.

#
# /etc/nsswitch.conf
#
# An example Name Service Switch config file. This file should be
# sorted with the most-used services at the beginning.
#
# The entry '[NOTFOUND=return]' means that the search for an
# entry should stop if the search in the previous entry turned
# up nothing. Note that if the search failed due to some other reason
# (like no NIS server responding) then the search continues with the
# next entry.
#
# Legal entries are:
#
#   nisplus or nis+     Use NIS+ (NIS version 3)
#   nis or yp       Use NIS (NIS version 2), also called YP
#   dns         Use DNS (Domain Name Service)
#   files           Use the local files
#   db          Use the local database (.db) files
#   compat          Use NIS on compat mode
#   [NOTFOUND=return]   Stop searching if not found so far
#

passwd:         compat
# for libc5: passwd: files nisplus
group:          compat
# for libc5: group: files nisplus
shadow:         compat
# for libc5: shadow: files nisplus

passwd_compat: nisplus
group_compat: nisplus
shadow_compat: nisplus

hosts:          nisplus files dns

services:   nisplus [NOTFOUND=return] files
networks:   nisplus [NOTFOUND=return] files
protocols:  nisplus [NOTFOUND=return] files
rpc:        nisplus [NOTFOUND=return] files
ethers:     nisplus [NOTFOUND=return] files
netmasks:   nisplus [NOTFOUND=return] files
netgroup:   nisplus
bootparams: nisplus [NOTFOUND=return] files
publickey:  nisplus
automount:  files
aliases:    nisplus [NOTFOUND=return] files

8. NIS 서버 세팅하기

8.1 서버 프로그램 ypserv

본 문서는 "ypserv" NIS 서버의 세팅에 대해서만 언급한다.

NIS 서버 소프트웨어는 다음에서 구할 수 있다:

Site            Directory                       File Name

ftp.kernel.org  /pub/linux/utils/net/NIS        ypserv-1.3.6.tar.gz

여러분은 http://www.suse.de/~kukuk/linux/nis.html 에서 더 많은 정보를 얻을 수 있다.

서버의 셋업은 전통적인 NIS나 NYS모두 같다.

ypservmakedbm 프로그램을 얻기 위해 소프트웨어를 컴파 일하라. securenet 파일 혹은 tcp_wrapper를 사용하기 위해서 ypserv를 설정할 수 있다. tcp_wrapper는 보다 더 유연하나, 많은 이들이 그것을 이용하는 데 있어 문제를 일으킨다. 그리고 tcp_wrapper를 위한 어떤 설정은 메모리 누출까 지 일으킬 수 있다. 만약 여러분이 tcp_wrapper를 위해 컴파일 된 ypserv와 문 제를 일으킬 경우, securenet 파일을 이용하여 다시 그것을 컴파일 하라. ypse rv --version 명령이 여러분이 어떤 버전을 가지고 있는지 가르쳐 줄 것이다.

여러분의 서버를 master로 사용하고 있다면, NIS를 사용 가능하게 하기 위해 어 떤 파일을 요구할 것인지를 결정하고, /var/yp/Makefile에 모든 rule 에 대한 적절한 엔트리들을 추가하거나 혹은 제거하라. 여러분은 항상 Makefile 을 보고 파일의 앞부분의 옵션들을 수정해야 한다.

ypserv 1.1 과 ypserv 1.2사이에는 하나의 큰 변화가 있었다. 버전 1.2에서는 파 일의 핸들들이 캐쉬가된다. 이것은 여러분이 새로운 map을 만들때, 항상 -c 옵션 으로 makedbm을 호출해야한다는 의미이다. 여러분이 ypserv 1.2혹은 그 이후버전 에서의 새로운 /var/yp/Makefile을 사용하던지 아니면, Makefile에서 m akedbm을 하는 부분에 -c 플래그를 추가해 줘야한다. 이렇게 하지 않으면, ypser v는 계속 이전의 map을 사용하게 되어 업데이트된 map을 사용하지 않을 것이다.

이제 /var/yp/securents/etc/ypserv.conf 파일을 작성해라 . 보다 많은 정보를 위하여, 메뉴얼 페이지 ypserv(8)과 ypserv.conf(5) 를 참조 하라.

portmapper (portmap(8))이 돌아가고 있는 것을 확인하라. 그리고 서버인 yp serv를 실행하라. 명령

        % rpcinfo -u localhost ypserv

을 실행하면 다음과 비슷한 결과를 출력해야 한다.

        program 100004 version 1 ready and waiting
        program 100004 version 2 ready and waiting

"version 1" 라인은 ypserv의 버전과 여러분의 confiuration에 따라서 없을 수 도 있다. 이것은 여러분이 예전의 SunOS 4.x의 클라이언트일 때만 필요하다.

이제 NIS (YP) 데이터베이스를 생성하자. master상에서, 다음을 실행하라.

        % /usr/lib/yp/ypinit -m

slave에서 ypwhich -m 명령이 작동하는지 확인하라. 이것은 여러분 의 slave가 다음 명령을 실행하기전에 NIS 클라이언트로서 configure되야 하는 지를 의미한다. 다음 명령은 호스트가 NIS slave가 되도록 인스톨한다.

        % /usr/lib/yp/ypinit -s masterhost

만약 여러분에게 어떤 더 큰 문제가 있다면, 서로 다른 xterm에서 디버그 모드 로 ypservypbind를 시작할 수 있다. 디버그의 출력은 여러분에게 무엇이 잘못되었는지를 보여준다.

map을 업데이트할 필요가 있다면, NIS master의 /var/yp 디렉토리에서 make를 해준다. 이것은 소스 파일이 새로운 것이면 새롭게 업데이트를 해줄 것이고, slave 서버들에게 파일들을 전해줄 것이다. map을 업데이트 하는 데 ypinit를 사용하지 마라.

*slave 서버에서* 루트의 crontab을 작성하기를 원한다면 다음 라인들을 추가하라.

        20 *    * * *   /usr/lib/yp/ypxfr_1perhour
        40 6    * * *   /usr/lib/yp/ypxfr_1perday
        55 6,18 * * *   /usr/lib/yp/ypxfr_2perday

이것은 master에서 업데이트가 된 시점에서 slave가 다운이 되어서 업데이트가 안된 경우라도 대부분의 NIS map들이 최근것으로 되는 것을 보장한다.

여러분은 나중 언제라도 slave를 추가할 수 있다. 먼저, 새로운 slave 서버가 NIS master 서버에 접속(contact)할 권한(permission)이 있는지 확인하라(At first, make sure that the new slave server has permissions to contact the NIS master). 그리고 새로운 slave 서버에서 다음을 실행하라.

        % /usr/lib/yp/ypinit -s masterhost

master 서버의 /var/yp/ypservers 에 새로운 salve서버를 추가하고 /var/yp 디렉토리에서 make를 실행시켜 map을 업데이트하라.

여러분의 NIS 서버에서 사용자들에 대하여 접근제한을 두고 싶다면, NIS 서버에 서도 ypbind를 실행시키고, /etc/passwd 패스워드 파일 중간에 플러스 엔트리를 추가하는 방법으로 세팅을 해줘야 한다. 라이브러리 function들은 NIS 엔트리 뒤 에 오는 모든 일반 엔트리들은 무시한다. 그리고 NIS를 통하여 그 다음에 오는 정보들을 취한다. 이런방법으로 NIS 접근 규칙들이 유지된다. 예를 들어:

        root:x:0:0:root:/root:/bin/bash
        daemon:*:1:1:daemon:/usr/sbin:
        bin:*:2:2:bin:/bin:
        sys:*:3:3:sys:/dev:
        sync:*:4:100:sync:/bin:/bin/sync
        games:*:5:100:games:/usr/games:
        man:*:6:100:/usr/games:
        lp:*:7:7:lp:/var/spool/lpd:
        mail:*:8:8:mail:/var/spool/mail:
        news:*:9:9:news:/var/spool/news:
        uucp:*:10:50:uucp:/var/spool/uucp:
        nobody:*:65534:65534:noone at all....:/dev/null:
        +miquels::::::
        +:*:::::/etc/NoShell
        [ All normal users AFTER this line! ]
        tester:*:299:10:Just a test account:/tmp:
        miquels:1234567890123:101:10:Miquel van Smoorenburg:/home/miquels:/bin/zsh

"tester"라는 유저가 존재하지만, /etc/NoShell을 가지고 있다. miquels는 일반 적인 액세스를 할 수 있다.

다르게, /var/yp/Makefile을 고쳐서 다른 패스워드 파일을 소스로 이용 하도록 NIS를 세팅할 수 있다. 규모가 큰 시스템에서는 NIS 패스워드와 그룹파일 들은 보통 /etc/yp/디렉토리에 저장되어 있다. 여러분이 이렇게 하기를 원한다면 passwd, chfn, adduser같은 일반적인 관리 툴은 더이상 작동하지 않는다. 따라서 이것들을 위해 어떤 특별한 툴을 만들어야 한다.

그렇지만 yppasswd, ypchsh 그리고 ypchfn이 대신 작 동할 것이다.

8.2 서버 프로그램 yps

"yps" NIS서버를 세팅할 때, 이전 문단을 참조하기 바란다. "yps" 서버 세팅은 비 슷하다. _그렇지만_ 정확하게 일치하지 않기 때문에 "ypserv" 명령을 "yps"에 적 용을 시도할 때 각별히 조심해라! "yps"는 어떤 저작자들로 부터도 지원되지 않으 며, 어느 정도 보안의 취약점을 가지고 있다. 여러분은 정말 이것을 사용하면 안 된다!

"yps" NIS 서버 소프트웨어는 다음에서 찾을 수 있다:

        Site                    Directory                       File Name

        ftp.lysator.liu.se      /pub/NYS/servers                yps-0.21.tar.gz
        ftp.kernel.org          /pub/linux/utils/net/NIS        yps-0.21.tar.gz

8.3 rpc.ypxfrd 프로그램

rpc.ypxfrd는 NIS master에서 NIS slave서버들로 전송되는 매우 큰 NIS map들에 대한 전송 속도를 향상시키기 위한 것이다. 만약 NIS slave가 새로운 map의 내용 을 가진 메시지를 받았을 때, 이것은 새로운 map의 전송을 위해서 ypxfr을 실행시 킬 것이다. ypxfr은 yp_all()함수를 사용하여, master서버로부터 map의 내용을 읽을 것이다. 이 프로세스는 데이터베이스 라이브러리에 저장 되어야할 map이 굉 장히 큰 것들이라면 몇 분 정도 소요된다.

rpc.ypxfrd서버는 NIS slave 서버들에게 각각들의 scartch로 부터 빌드하는 것보 다 간단히 master 서버의 map 파일들을 복사하는 것을 허용함으로써 전송 프로세 스의 속도를 향상시킨다. rpc.ypxfrd는 RPC기반의 파일 전송 규약을 사용한다. 따 라서 다시 새롭게 map 파일을 빌드하지 않아도 된다.

rpc.ypxfrd는 inted에 의해서 시작될 수 있다. 하지만 이것은 매우 늦게 시작될 것이기 때문에, ypserv와 같이 시작되어야 한다. 여러분은 rpc.ypxfrd를 NIS ma ster서버에서만 실행시켜야 한다.

8.4 rpc.yppasswdd 프로그램

사용자들이 그들의 패스워드를 바꿀때마다, NIS 패스워드 데이터베이스와 그에 의지하는 다른 NIS 데이터베이스들은 업데이트 되어야 한다. "rpc.yppasswdd"프 로그램은 패스워드의 변경을 다루고 NIS 정보들이 적절하게 업데이트 되도록 하 게 하는 서버이다. rpc.yppasswd 는 현재 ypserv에 통합되어 있다. 여러분은 따 라서 분리되었던 옛날의 yppasswd-0.9.tar.gz 혹은 yppasswd-0.10.tar.gz를 필 요로하지 않는다. 그리고 더이상 그것을 사용하면 안된다. ypserv 1.3.2에 있는 rpc.yppasswdd는 shadow의 모든 것을 지원한다. yppasswd는 이제 yp-tools-2.2. tar.gz의 부분이다.

여러분은 NIS master서버에서만 rpc.yppasswdd를 실행시키면 된다. 기본적으로, 사용자들은 그들의 완전한 이름이나 로긴 쉘을 바꾸지 못하도록 되어있다. 여러 분은 -e chfn 혹은 -e chsh옵션으로 이것을 가능하게 할 수 있다.

만약 여러분의 passwd와 shadow파일들이 다른 디렉토리 말고 /etc에 있다면, 여러 분은 -D 옵션을 추가하면 된다. 예를 들어 모든 소스 파일들을 /etc/yp에 있고 사용자들이 그들의 쉘을 바꾸는 것을 허용하게 한다면, rpc.yppasswdd를 다음과 같 은 파라미터와 함께 실행시키면 된다.

        rpc.yppasswdd -D /etc/yp -e chsh

혹은

        rpc.yppasswdd -s /etc/yp/shadow -p /etc/yp/passwd -e chsh

더이상 할것이 없다. 여러분은 단지 rpc.yppasswdd/var/yp/Make file에서 사용하는 같은 파일을 사용한다는 것만 확실히 해 두면 된다. 에 러는 syslog에 의해 기록될 것이다.

9. NIS/NYS 인스톨 확인하기

모든것이 잘 되었다면(꼭 그래야 되는 것처럼), 여러분은 간단한 명령으로 여러분 의 인스톨을 한것을 검증할 수 있어야한다. 예를 들어, 여러분의 passwd파일이 NIS에 의해 제공된다고 가정하고 명령어인

        % ypcat passwd

는 NIS passwd 파일의 내용을 제공해 줘야 한다. 명령어인

        % ypmatch userid passwd

(userid는 어떤 유저의 로긴 이름이다.)은 NIS 패스워드 파일에 있는 유저들의 엔트리를 제공해 주어야 한다. "ypcat"과 "ypmatch" 프로그램은 여러분의 전통 적인 NIS 혹은 NYS배포판에 포함되어 있다.

만약 어떤 유저가 로긴 할 수 없을 경우, 다음과 같은 프로그램을 클라이언트에 서 실행시켜 보라.

#include <stdio.h>
#include <pwd.h>
#include <sys/types.h>

int
main(int argc, char *argv[])
{
    struct passwd *pwd;

    if(argc != 2)
      {
        fprintf(stderr,"Useage: getwpnam username\n");
        exit(1);
      }

    pwd=getpwnam(argv[1]);

    if(pwd != NULL)
      {
        printf("name.....: [%s]\n",pwd->pw_name);
        printf("password.: [%s]\n",pwd->pw_passwd);
        printf("user id..: [%s]\n",pwd->pw_uid);
        printf("group id.: [%s]\n",pwd->pw_gid);
        printf("gecos....: [%s]\n",pwd->pw_gecos);
        printf("directory: [%s]\n",pwd->pw_dir);
        printf("shell....: [%s]\n",pwd->pw_shell);
      }
    else
      fprintf(stderr,"User \"%s\" not found!\n",argv[1]);

    exit(0);
}
유저 이름의 파라미터와 함께 이 프로그램을 실행시키면, 이 유저에 대한 getpw nam함수가 알려줄 수 있는 모든 정보들을 출력한다. 이것은 여러분에게 어떤 엔 트리가 잘못 되었는지 알려줄 것이다. 가장 일반적인 문제는, 패스워드 필드가 "*"와 함께 중복된 경우이다.

GNU C 라이브러리 2.1 (glibc 2.1)이 getent라고 불리는 툴과 같이 나온다. 아 까 같은 문제가 있던 시스템에서 위의 것 대신 이 프로그램을 사용하라. 다음과 같이 할 수 있다.

        getent passwd

혹은

        getent passwd login

10. 일반적인 문제들과 해결

여기에 다양한 사용자들로 부터 알려진 일반적인 문제들이 몇가지 있다.

  1. 버전 4.5.19를 위한 라이브러리는 망가졌다. NIS는 이것으로 작동하지 않 는다.
  2. 버전 4.5.19에서 4.5.24로 라이브러리를 업그레이드 하는 경우 su 명령어 가 망가진다. 여러분은 slackware 1.2.0 배포판으로부터 su 명령어를 얻 으면 된다. 덧붙여 말하면, 그것이 업데이트된 라이브러리들을 얻을 수 있는 곳이다.
  3. NIS 서버가 죽었는데 ypbind에서 다음과 같은 메시지가 나올 경우가 있다.
            yp_match: client_call:
                            RPC: Unable to receive: errno = Connection refused
    
            그리고는 NIS 데이터베이스에 등록된 사용자들이 로긴할 수 없는 경우
            가 있다. 이럴때 root로 로긴을 시도하고 ypbind를 죽인다음 다시 실행
            시켜라. 그리고 ypbind를 3.3 혹은 그 이상버전으로 업데이트하는 것도 
            도움이 될 것이다.
    
    <item>libc를 5.4.20이상으로 업그레이드를 하면, YP 툴들은 더이상 작동하지 않
            을 것이다. libc >= 5.4.21 버전과 glibc 2.x버전은 yp-tools 1.2 이상
            을 요구한다. 이전 버전의 libc를 위해서는 yp-clients 2.2 가 필요하다
            . yp-tools 2.x는 모든 라이브러리에서 잘 작동한다.
    
    <item>libc 5.4.21 - 5.4.35 yp_maplist는 망가졌다. 5.4.36 이후 버전이 필요하
            다. 그렇지 않을 경우 ypwhich같은 YP 프로그램들은 segfault를 일으킬 
            것이다.
    
    <item>전통적인 NIS와 함께 쓰이는 libc 5는 NIS를 통한 쉐도우 패스워드를 지
            원하지 않는다. 이것을 위해서는 libc + NYS 혹은 glibc 2.x가 필요하다.
    
    <item>ypcat shadow는 쉐도우 map을 보여주지 못한다. 이것은 옳은 것으로 쉐도
            우 map의 이름은 shadow.byname이지 shadow가 아니다.
    
    <item>솔라리스(Solaris)는 항상 특권을 가진 포트를 사용하지 않는다. 따라서 
            솔라리스 클라이언트를 가지고 있는 경우, 패스워드를 분리하지 말기
            를 바란다.
    

11. 자주 질문되는 것들(FAQ)

이제까지 대부분의 질문들은 답해졌다. 여전히 해결되지 않은 의문점이 남아있 다면 다음 뉴스그룹에 궁금중을 적어 놓으면 된다.

        comp.os.linux.networking




sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2005-04-23 13:29:04
Processing time 0.0041 sec