목차 1. NIS 2. NIS 구성 시 고려 사항 3. NIS server 설정 4. NIS slave 설정 5. NIS client 설정
1. NIS(Network Information Service)
네트워크 정보 서비스(Network Information Service, NIS)는 썬 마이크로시스템즈(현 Oracle사에 인수됨)의 클라이언트 서버 디렉터리 서비스 프로토콜이며, 컴퓨터 네트워크 위의 컴퓨터들 사이에 있는 사용자와 호스트 이름과 같은 시스템 구성 데이터를 여러 곳에 제공합니다.(출처 )
2. NIS 구성 시 고려 사항
NIS는 secure protocol이 없습니다. 이는 네트워크 상에 passwd list가 평문(plain text)로 전송이 되어 쉽게 sniffing이 될 수 있다는 의미입니다. 그러므로, NIS 구성은 매우 제한된 network에서 구성을 해야 합니다.
Private network 상에서 구성할 것
서로 다른 Network 구간에서 연동이 필요할 경우, VPN tunnel을 이용할 것
data를 text 파일로 관리해야 하기 때문에 많은 account를 관리해야 할 경우 권장하지 않음. 꼭 해야 한다면 별도의 관리 프로그램을 만들기를 권장
Multi master 구성이 안됨
참고!NIS+ 는 secure protocol을 지원합니다만, NIS와 NIS+는 별개의 서비스 입니다. 또한, NIS+는 Solaris에서 사용되던 서비스를 Linux에서 사용할 수 있도록 porting이 된 것이 있지만 널리 사용되지 않아 개발이 더디고 문서화가 잘 안되어 있으며, 설정이 복잡하여 리눅스에서는 널리 사용되지 않습니다.
adduser script는 기본으로 MD5 방식의 암호를 생성합니다. 만약 연동할 시스템들이 sha512를 지원하는 버전으로만 구성이 되어 있다면 (예를 들어 CentOS/RHEL 5는 sha512를 지원하지 않습니다.), adduser script의 METHOD 변수 값을 sha512로 수정 하는 것을 권장 합니다.
만약 동작을 하지 않거나 에러 메시지가 나온다면, yum update 명령을 이용하여 shadow-tuils package를 최신 버전으로 업그레이드 하십시오.
!참고
Web server에서도 NIS 인증을 사용하기 위하여 apache 또는 lighttpd, nginx의 nis 모듈을 사용할 계획이라면, shadow system을 사용할 수 없습니다. yp_match call이 non-root 권한에서는 빈 값을 return 하기 때문에 웹서버를 root 권한으로 실행을 해야합니다. 그러므로 shadow system을 사용하지 말고 구성을 하십시오. 또는, 웹서버의 nis 모듈을 사용하지 말고, cronjob으로 ypcat 명령을 이용하여 .htaccess file을 주기적으로 갱신하여 사용하도록 하십시오.
또한, 보안을 고려 한다면 NIS 보다는 ldap을 이용하여 구성하는 것을 고려 하십시오.
3.3.2 /var/yp/Makefile 설정
/var/yp/Makefile 중에서 다음의 설정들을 수정합니다.
# slave NIS를 구성할 것이라면 값을 true로 변경 합니다. 기본값은 false 입니다.
# slave NIS를 구성할 것이 아니라면 false로 나두십시오.
NOPUSH=true
# 인증 통합시에 system uid/gid와 충돌할 경우가 발생할 수 있습니다. 그러므로
# 충분한 값을 주도록 합니다. 대략 10000번 이상대를 사용하면 거의 충돌할 일이
# 없습니다.
# 이 값은 passwd나 group 파일에 지정한 uid나 gid보다 작으면 database에 포함시키지
# 않음을 의미합니다.
MINUID=10000
MINGID=10000
# system의 passwd/group 을 사용하지 않을 것이기 때문에, false 로 설정 합니다.
MERGE_PASSWD=false
MERGE_GROUP=false
# system의 passswd/group을 사용하지 않을 것이기 때문에, 위에서 작업한 디렉토리로
# passwd/group file이 위치한 경로를 변경해 줍니다.
YPPWDDIR = /var/yp/etc
# If you don't want some of these maps built, feel free to comment
# them out from this list.
# passwd/group 만 다루기 때문에 생성할 DB를 제한 합니다. (제한하지 않으면 설정
# 누락으로 DB 생성 실패 되는 경우가 있습니다.) 여기서는 기존의 설정에서
# ***shadow*** 추가하고, ***netid***를 제거 하였습니다.
all: passwd shadow group hosts rpc services protocols mail \
# netgrp shadow publickey networks ethers bootparams printcap netid \
# amd.home auto.master auto.home auto.local passwd.adjunct \
# timezone locale netmasks
3.3.3 /etc/sysconfig/yppasswdd 설정
/etc/sysconfig/yppasswd 를 다음과 같이 수정 합니다.
[root@an3 ~]$ cat /etc/sysconfig/yppasswd
# The passwd and shadow files are located under the specified
# directory path. rpc.yppasswdd will use these files, not /etc/passwd
# and /etc/shadow.
ETCDIR=/var/yp/etc
.. 중략 ..
# Additional arguments passed to yppasswd
# 방화벽 설정을 위해 port를 static 하게 설정 합니다.
YPPASSWDD_ARGS="--port 836"
[root@an3 ~]$
3.4 보안 설정
NIS 질의를 할 수 있는 네트워크 대역을 제한 합니다. 형식은 NETMASK NETWORK 형식으로 설정 합니다. 다음의 설정은 127.0.0.0/8 과 192.168.0.0/24 네트워크에서 NIS 질의에 응답하도록 설정한 것입니다.
[root@an3 ~]$ service rpcbind start
[root@an3 ~]$ service ypserv start
[root@an3 ~]$ service ypxfrd start
[root@an3 ~]$ service yppasswdd start
[root@an3 ~]$ # booting 시에 시작 되도록 설정
[root@an3 ~]$ systemctl enable rpcbind ypbind ypxfrd yppasswdd
3.6 Database 초기화
daemon을 실행 했으면 database를 초기화 합니다.
[root@fork yp]# /usr/lib64/yp/ypinit -m
At this point, we have to construct a list of the hosts which will run NIS
servers. fork.kldp.org is in the list of NIS server hosts. Please continue to add
the names for the other hosts, one per line. When you are done with the
list, type a <control D>.
next host to add: nis1.domain.com
next host to add: <종료를 하기 위하여 CTRL-D 를 누릅니다.>
The current list of NIS servers looks like this:
nisdomain.com
Is this correct? [y/n: y] y
We need a few minutes to build the databases...
Building /var/yp/OOPS-NIS/ypservers...
Running /var/yp/Makefile...
gmake[1]: Entering directory `/var/yp/OOPS-NIS'
Updating passwd.byname...
Updating passwd.byuid...
Updating group.byname...
Updating group.bygid...
Updating hosts.byname...
Updating hosts.byaddr...
Updating rpc.byname...
Updating rpc.bynumber...
Updating services.byname...
Updating services.byservicename...
Updating protocols.bynumber...
Updating protocols.byname...
Updating mail.aliases...
gmake[1]: Leaving directory `/var/yp/OOPS-NIS'
fork.kldp.org has been set up as a NIS master server.
Now you can run ypinit -s nis1.domain.com on all slave server.
[root@an3 ~]$
3.7 database update
ypinit 명령은, 최초에 한번만 실행을 해 주면 됩니다. 그 이후, passwd (/var/yp/etc/passwd)나 group (/var/yp/etc/group) 파일을 수정 한 후에는 /var/yp 에서 make 명령을 실행하면 database가 갱신이 됩니다.
[root@an3 ~]$ service rpcbind start
[root@an3 ~]$ service ypserv start
[root@an3 ~]$ # booting 시에 시작 되도록 설정
[root@an3 ~]$ systemctl enable rpcbind ypserv
4.5 Slave database 초기화
/usr/lib64/yp/ypinit를 이용하여 초기화를 합니다.
[root@an3 ~]$ /usr/lib64/yp/ypinit -s nis1.domain.com
We will need a few minutes to copy the data from nis1.domain.com.
Transferring rpc.bynumber...
Trying ypxfrd ... success
Transferring passwd.byname...
Trying ypxfrd ... success
Transferring protocols.bynumber...
Trying ypxfrd ... success
Transferring mail.aliases...
Trying ypxfrd ... success
Transferring ypservers...
Trying ypxfrd ... success
Transferring shadow.byname...
Trying ypxfrd ... success
Transferring services.byservicename...
Trying ypxfrd ... success
Transferring hosts.byname...
Trying ypxfrd ... success
Transferring hosts.byaddr...
Trying ypxfrd ... success
Transferring group.byname...
Trying ypxfrd ... success
Transferring protocols.byname...
Trying ypxfrd ... success
Transferring services.byname...
Trying ypxfrd ... success
Transferring passwd.byuid...
Trying ypxfrd ... success
Transferring group.bygid...
Trying ypxfrd ... success
Transferring rpc.byname...
Trying ypxfrd ... success
nis2.domain.com''s NIS data base has been set up.
If there were warnings, please figure out what went wrong, and fix it.
At this point, make sure that /etc/passwd and /etc/group have
been edited so that when the NIS is activated, the data bases you
have just created will be used, instead of the /etc ASCII files.
[root@an3 ~]$
master와 slave의 architecure가 다를 경우에는 ypxfrd 관련 에러가 발생합니다만, slave 초기화에는 문제는 없으니 참고 하십시오. (예를 들어, master는 x86_64 machine, slave는 x86 machine 일 경우)
4.6 map 동기화 crontab 설정
NIS databse MAP 동기화를 위하여 다음의 설정을 합니다. 이 cronjob은 master에서 업데이트가 된 시점에서 slave가 다운이 되어서 업데이트가 안된 경우라도 대부분의 NIS map들이 최근 것으로 update 되는 것을 보장 합니다.
home directory 생성 실패 시 login을 불허 할 것이라면 required로 설정을 하고, home directory 생성 실패를 하더라도 login을 허락할 것이라면 optional로 설정 하십시오. 위의 예제는 4개의 파일 설정이 모두 동일함으로 password-auth-sc 만 예시를 보여 줍니다.
또한, 인증과 암호 변경을 위하여 password entry에 nis 설정을 추가 합니다. 역시 모든 파일 공통 사항입니다.
system 에 연동이 잘 되었는지 getent 명령으로 확인을 해 봅니다. /etc/passwd 내용 아라애 NIS passwd entry가 추가로 나와야 합니다. NIS에서는 10000 이상의 UID를 사용하므로, 10000대의 UID가 있는지 확인해 보시면 됩니다.
UID 확인을 쉽게 하기 위하여 pwck 명령으로 passwd file을 UID 순서대로 정렬한 후에 getent를 실행 합니다.
[root@an3 ~]$ pwck -s && grpck -s
[root@an3 ~]$ getent passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
polkitd:x:997:995:User for polkitd:/:/sbin/nologin
systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
USERID:x:10000:10000:USER NAME:/home/USERID:/bin/bash
[root@an3 ~]$
5.3.4 계정 암호 변경
NIS master server에 yppasswdd daemon이 동작하고 있다면 NIS client에서 암호 변경이 가능 합니다.
NIS account들의 암호 변경은 일반 account의 암호를 변경하는 것과 같이 passwd 명령을 이용하여 변경을 하면 됩니다.
root account를 이용하여 다른 NIS account의 암호를 변경하는 경우에는, passwd 명령으로 변경이 불가능 합니다. 이 때에는 yppasswd 명령을 이용하여 변경을 할 수 있습니다.
[root@an3 ~]$ passwd joungkyun
joungkyun 사용자의 비밀 번호 변경 중
새 암호:
새 암호 재입력:
NIS 암호는 변경할 수 없습니다.
passwd: 인증 토근 수정 오류
[root@an3 ~]$ yppasswd joungkyun
Changing NIS account information for joungkyun on cnt1.domain.com.
Please enter root password:
Changing NIS password for joungkyun on cnt1.domain.com.
Please enter new password:
Please retype new password:
The NIS password has been changed on cnt1.domain.com.
[root@an3 ~]$