YPSERV(8)

명칭
ypserv - NIS 데이터 베이스 서버

서식
ypserv [-n] [-d] [-p path]

해설
NIS (은)는 복수의 UNIX 베이스의 머신간에 공통의 설정 파일의 집합을 공유하기 위한 RPC 베이스의 서비스입니다. NIS 그럼, /etc/hosts, /etc/passwd, /etc/group 그렇다고 한, 대부분의 환경에서 빈번하게 갱신되는 파일의 복수의 카피를 시스템 관리 책임자가 갱신할 필요는 없고, 계산기의 그룹에서 한 개소에서 갱신 가능한 1 조의 데이터를 공유할 수가 있습니다.

ypserv 유틸리티는 NIS 도메인 안의 클라이언트 시스템에 NIS 데이타베이스를 배포하는 서버입니다. NIS 도메인내의 클라이언트는 domainname(1) 명령을 사용해, ypserv 하지만 서비스하고 있는 도메인명을 설정하지 않으면 안됩니다. 또, 단일 NIS 도메인중에 복수의 서버가 존재할 수 있는 모아 두어 클라이언트는, ypbind(8) (을)를 실행시켜, 특정의 서버에 접속할 필요도 있습니다.

ypserv 에 의해 배포되는 데이타베이스는 /var/yp/[domainname] 에 격납됩니다. 여기서 domainname (은)는 서비스를 받는 도메인명입니다. 이와 같은 디렉토리는 여러가지 도메인명에서 복수 존재 가능합니다만, 단일의 ypserv demon에서 모두 처리 가능합니다.

데이타베이스 (혹은 자주 MAP (으)로 불립니다)는, 여러가지 시스템 파일을 소스로서 /var/yp/Makefile 에 의해 작성됩니다. 데이타베이스 파일은 db(3) 포맷이며, 레코드수가 많아도 고속으로 검색 가능합니다. FreeBSD 그럼, 보안이기 때문에, MAP의 읽고 쓰기는 root 마셔 가능합니다. 기술적으로는, 이러한 제한은 패스워드 MAP에게만 필요합니다만, 다른 MAP의 내용은 누구나가 읽을 수 있는 다른 파일에 써 있기 때문에, 이와 같은 제약은 해가 아니고, 현실적이다라고 생각되고 있습니다.

ypserv 유틸리티는 /etc/rc.conf 에서 유효하게 되고 있는 경우에 /etc/rc.network (으)로부터 기동됩니다.

특별한 사양
FreeBSD 의 패스워드 데이타베이스를 NIS 에 의해 배포하는 경우에 몇개의 문제가 있습니다. FreeBSD (은)는 통상, 암호화한 패스워드를, root 마셔 읽고 쓰기 가능한 /etc/master.passwd 에게만 격납합니다. 이 파일을 NIS MAP로 하면(자), 보안가 완전하게 깨져 버립니다.

이것에 대처하기 위해서, FreeBSD 의 ypserv 하 master.passwd.byname (와)과 master.passwd.byuid 의 MAP를 특별한 방법으로 취급합니다. 서버가 이것들 2 개의 MAP에의 액세스 요구를 받아들이면(자), 요구원의 TCP 포트를 체크해, 포토 번호가 1023 보다 큰 경우에는 에러를 돌려줍니다. 슈퍼 유저만 1024 보다 작은 TCP 포트에 바인드 하는 일이 용서되고 있기 (위해)때문에, 서버는 이것을 이용해 특권 유저로부터의 요구인가 아닌가를 판정할 수 있습니다. 비특권 유저로부터의 모든 요구는 거부됩니다.

또, FreeBSD 의 표준 C 프로그램 라이브러리중의 getpwent(3) routine는, 슈퍼 유저가 사용했을 경우에는 master.passwd.byname (와)과 master.passwd.byuid 의 MAP로부터 데이터를 취득합니다. 통상의 유저가 이러한 routine를 콜 했을 경우에는, 표준의 passwd.byname (와)과 passwd.byuid 의 MAP에 액세스 합니다. 후자의 2 개의 MAP는 /var/yp/Makefile 에 의해, master.passwd 파일을 퍼스 해, 패스워드 필드를 삭제하는 일에 의해 작성되기 때문에, 비특권 유저에게 건네주어도 안전합니다. 이와 같이 master.passwd 데이타베이스의 그림자 패스워드 기구는 NIS 냄새나도 지켜집니다.

주

  마스터 서버와 슬레이브 서버의 설정
ypinit(8) (은)는 편리한 스크립트이며, NIS 의 마스터 서버 및 슬레이브 서버의 설정이 도움이 됩니다.

  제한
NIS 환경에서 그림자 패스워드를 사용하는 것에 기인하는 문제가 2 개 있습니다. 유저는 다음 일을 조심하지 않으면 되지 않습니다.

1.  ‘TCP 포트가 1024 보다 작다’ 그렇다고 하는 테스트는 매우 간단하기 때문에, 동일 네트워크상의, 무제한의 액세스가 가능한 머신을 가지는 유저는 이것을 찢는 것이 가능합니다 (UNIX 베이스가 아닌 operating system를 실행하는 머신에서도 가능합니다).

2.  FreeBSD 시스템을, 그림자 패스워드를 서포트하지 않는 비 FreeBSD 클라이언트 (대부분이 그렇습니다)에 대한 서버로 하려고 하고 있는 경우에는, /var/yp/Makefile 의 UNSECURE=True 엔트리의 코멘트를 빗나가게 해, 그림자 패스워드를 무효로 할 필요가 있습니다. 이것에 의해, passwd.byname (와)과 passwd.byuid 의 MAP에, 비 FreeBSD 클라이언트가 NIS (을)를 통해서 유저 인증을 실시하기 위해서(때문에) 필요로 하는, 유효한 암호화된 패스워드 필드가 포함되게 됩니다.

  보안
일반적으로, 리모트 유저는, 도메인명을 알아 조차 있으면, RPC 를 ypserv 에 발행해, NIS MAP의 내용을 취득 가능합니다. 이러한 권한이 없는 트랜잭션(transaction)를 막기 위해서(때문에), ypserv 에는 securenets (으)로 불리는, 어느 호스트의 집합에게만 액세스를 제한하는 기능이 있습니다. 기동시에, ypserv (은)는 securenets 정보를 파일 /var/yp/securenets (으)로부터 읽어들입니다. (후술 하도록(듯이), 이 패스는, -p 옵션에 의해 지정하는 패스에 의해 변화하는 것에 주의해 주세요. ) 이 파일은, 공백에 의해 단락지어지는 네트워크와 네트워크 마스크로부터 된다 엔트리를 복수 포함합니다. “#” (으)로부터 시작되는 행은 코멘트라고 보여집니다. securenets 파일의 예를 이하에 나타냅니다:

    # allow connections from local host -- mandatory
    127.0. 0.1     255.255. 255.255
    # allow connections from any host
    # on the 129.168. 128.0 network
    192.168. 128.0 255.255. 255.0
    # allow connections from any host
    # between 10.0. 0.0 to 10.0. 15.255
    10.0. 0.0      255.255. 240.0

ypserv 하지만 이러한 룰에 적합하는 주소로부터의 요구를 받아들였을 경우에는, 통상 대로 요구를 처리합니다. 주소가 룰에 적합하지 않는 경우에는, 요구는 무시되어 경고가 로그 됩니다. /var/yp/securenets 파일이 존재하지 않는 경우에는, ypserv (은)는 모든 호스트로부터의 접속을 허락합니다.

ypserv 유틸리티는, Wietse Venema 의 tcpwrapper 패키지를 서포트합니다. 이것에 의해, 액세스 관리 를 위해서(때문에), 시스템 관리 책임자는 tcpwrapper 의 설정 파일 (/etc/hosts.allow (와)과 /etc/hosts.deny) (을)를 /var/yp/securenets 대신에 사용할 수 있습니다.

주: 어느 쪽의 액세스 제어도 그만한 보안를 제공합니다만, 특권 포트 테스트와 같게 “IP 사칭 (spoofing)” 공격에는 무력한 것으로 주의해 주세요.

  NIS v1 호환성
이 버젼의 ypserv 하 NIS v1 클라이언트에 대해서 어느 정도 서비스 가능합니다. FreeBSD 의 NIS 실장은 NIS v2 프로토콜만을 사용합니다만, 다른 실장에서는 낡은 시스템과의 백 워드 컴패터빌리티 (호환성)을 위해서(때문에) v1 프로토콜도 서포트하고 있습니다. 그러한 시스템으로 제공되고 있다 ypbind(8) demon는, 실제로는 아마 불필요합니다만, NIS v1 서버에 바인드 하려고 합니다. (그리고, v2 서버로부터 대답을 받아들였다고 해도 서버를 찾기 위해서(때문에) 브로드캐스트 계속 합니다. ) 이 버젼의 ypserv 그럼 통상의 클라이언트의 호출은 서포트되고 있습니다만, v1 MAP 전송 요구는 취급하지 않습니다. 즉, 낡다 NIS 서버와 함께, 마스터 혹은 슬레이브로서 사용할 수 없습니다. 행운인 일로, 오늘로는 이와 같은 서버는 존재하지 않을 것입니다.

  NIS 클라이언트이기도 한 NIS 서버
복수의 서버가 존재하는 도메인에 대해, 서버가 NIS 클라이언트이기도 한 경우에는, ypserv 의 실행에 주위를 기울일 필요가 있습니다. 바인드 요구를 브로드캐스트 시켜 서버간에 바인드 시키는 것이 아니라, 서버를 자기 자신에게 바인드 하는 것은 일반적으로는 좋은 생각입니다. 어느 서버가 다운해, 다른 서버가 그 서버에 의존하고 있었을 경우에는, 기묘한 장해가 생길 수 있습니다. (결과적으로 모든 클라이언트가 타임 아웃 해, 다른 서버에 바인드 하려고 합니다만, 지연은 무시하지 못하고, 서버는 아직 서로 바인드 하려고 하기 때문에, 장해는 남습니다. )

특정의 서버에 강제적으로 바인드 시키기 위한 자세한 것은 ypbind(8) 메뉴얼 페이지를 참조해 주세요.

옵션
이하의 옵션이 ypserv 에서 서포트되고 있습니다.

-n  이 옵션은 ypserv 하지만 hosts.byname (와)과 hosts.byaddress 의 MAP에 대한 yp_match 요구를 취급하는 방법을 조작합니다. 디폴트에서는, ypserv 하지만 주어진 호스트의 엔트리를 호스트 MAP중에 찾아낼 수 없었던 경우에는, 에러를 돌려주어 그 이상의 처리를 실시하지 않습니다. -n 플래그를 지정하면(자), ypserv (은)는 새로운 처리를 실시합니다. 곧바로 포기하지 않고 , 호스트명 혹은 주소를 DNS 네임서버에 문의해 해결하려고 합니다. 문의가 성공하면(자), ypserv (은)는 가짜의 데이타베이스 레코드를 작성해, 그것을 클라이언트에 돌려주기 때문에, 클라이언트의 yp_match 요구는 성공한 것처럼 보입니다.

    이 사양은 SunOS 4.1.x 와의 호환성을 위해서(때문에) 준비되어 있습니다. 그 시스템의 표준 C 프로그램 라이브러리에서는 resolver가 썩고 있어 호스트명과 주소의 해결을 위해서(때문에) NIS 에 의존하고 있었습니다. FreeBSD 의 resolver는 DNS 에의 문의를 직접 행할 수 있기 때문에, FreeBSD 이다 NIS 클라이언트 에 대해서만 서비스하는 경우는, 이 옵션을 유효하게 할 필요는 없습니다.

-d  서버를 디버그 모드로 실행합니다. 통상 ypserv (은)는 이상시의 에러 (액세스 위반, 파일 액세스 실패)만을 syslog(3) 기능을 사용해 보고합니다. 디버그 모드에서는, 서버는 자신을 백그라운드에서는 실행하지 않고, 리퀘스트를 받을 때마다, 상태를 나타내는 추가의 메세지를 표준 에러 출력에 표시합니다. 또, 디버그 모드로 실행하고 있는 동안은, 통상과는 달라, yp_all 요구 처리시나 DNS 검색 처리시에 ypserv 서브 프로세스를 생성하지 않습니다. (이러한 처리는 많은 경우 완료까지 시간이 걸리기 위해서(때문에) 서브 프로세스에 의해 처리되어 부모인 서버는 다른 요구를 처리할 수 있게 되어 있습니다. ) 이것에 의해 디버그 툴에 의한 서버의 트레이스가 용이하게 됩니다.

-p path
    통상 ypserv 하 NIS MAP는 /var/yp 이하에 있는 것과 상정합니다. -p 플래그를 사용해, 다른 NIS 루트 패스를 지정할 수 있기 때문에, 시스템 관리 책임자는 파일 시스템중의 다른 장소에 MAP 파일을 이동할 수 있습니다.

관련 파일
/var/yp/[domainname]/[maps]
    NIS MAP
/etc/nsswitch.conf
    이름 변환 설정 파일
/var/yp/securenets
    호스트 액세스 제어 파일

관련 항목
ypcat(1), db(3), hosts_access(5), rpc.yppasswdd(8), yp(8), ypbind(8), ypinit(8), yppush(8), ypxfr(8)

저자
Bill Paul <wpaul@ctr.columbia.edu>

역사
이 버젼의 ypserv 하지만 최초로 등장한 것은 FreeBSD 2.2 입니다.