현상 : 오늘 갑자기 autofs를 사용하여 server의 공유 디렉토리를 mount하였을 때(물론 auto mount이므로 cd명령으로 해당 디렉토리로 진입) 디렉토리는 보이지만 내용이 보이지 않았다.-_ -;;
auto mount를 하지않고 mount를 하였더니 다음과 같은 메세지 발생.
$ mount -t nfs 192.0.0.1:/home /nfsmount
mount: 192.0.0.1:/home failed, reason given by server: Permission denied
응? 왜 갑자기 퍼미션 에러..-_ -;;;
해결책 :
- 우선 퍼미션 에러이므로 서버의 /etc/exports의 내용을 살펴보았다.
$ cat /etc/exports
/home *(rw,sync)
>공유할 디렉토리 /home을 누구에게나 Read/Write 권한을 줌.
자세한 내용은 다음을 참고(http://www.redhat.com/docs/manuals/enterprise/RHEL-5-manual/Deployment_Guide-en-US/s1-nfs-server-config-exports.html)
대략 적으로 설명하면 export는 2개의 필드를 가지며,
1번째 필드는 공유할 디렉토리,
2번째 필드는 공유상대와 옵션(괄호안에 옵션 표기)이다.
옵션으로는
ro : read only
rw : read/write
no_root_squash, root_squash : NFS 서버에도 root 사용자가 있을 것이고, NFS 클라이언트에도 root가 있을 것이다. 그러나 두 root가 같은 root가 될 순 없다. NFS 클라이언트의 root가 NFS 서버의 root 권한을 가질 수 없다. 따라서 기본값은 root_squash로 클라이언트 root는 nobody와 같은 사용자로 맵핑되어 버린다. 서버와 클라언트의 root 사용자를 일치하도록 하려면 no_root_squash라고 적으면 된다.
no_subtree_check : 공유된 directory내에 있는 서브 directory들을 공유에서 제외시키는 경우 설정.
sync, async 등이 있다. - 네트워크 접근 퍼미션 확인 : /etc/hosts.allow, /etc/hosts.deny
$ cat /etc/hosts.allow
ALL:ALL
$ cat /etc/hosts.deny
내용없음.. 멋진 보안 마인드..-_ -;;
-> 모든 접근을 허락하였으므로 이상없다.
여기까지 이상이 없는 경우는 좀 더 까다로워진다.(오늘이 이 까다로운 경우였다..쉐..-_ -)
만약 1, 2의 내용으로 잘못되었다면 서버의 /var/log/messages내용이 다음과 같이 나타났을 것이다.
시간 어쩌구 저쩌구 mountd: refused mount request from 어쩌구 저쩌구 for /home (/home): not exported
하지만 다음과 같은 메세지면 다른 이유이다.
시간 어쩌구 저쩌구 mountd: authenticated mount request from 어쩌구 저쩌구 for /home (/home)
이것은 정상으로 mount 요청에 대해서 처리를 하였는데 실제로는 mount되지 않은것이다.
이것은 nfs데몬의 파일핸들러가 없어서 발생한 것이다.
즉, $ ls -l /proc/fs/nfsd를 실행하면 exports, filehandle, nfsv4leastime, nfsv4recoverydir, ports, threads, versions 등의 파일이 있어야 한다.
다음과 같이 mount하여 핸들러 등을 살리면 문제점이 해결된다.
- /etc/fstab에 다음의 내용을 추가.
nfsd /proc/fs/nfsd nfsd defaults 0 0 - mount 실행
$ ls -l /proc/fs/nfsd 를 실행하면 위에서 언급한 파일들이 생성됨을 확인 할 수 있을 것이다.