본문 바로가기

Hop the wag during working

nfs mount시 permission denied 발생

현상 : 오늘 갑자기 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
응? 왜 갑자기 퍼미션 에러..-_ -;;;

 

해결책 :

  1. 우선 퍼미션 에러이므로 서버의 /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 등이 있다.
  2. 네트워크 접근 퍼미션 확인 : /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하여 핸들러 등을 살리면 문제점이 해결된다.

  1. /etc/fstab에 다음의 내용을 추가.
    nfsd   /proc/fs/nfsd   nfsd   defaults   0 0
  2. mount 실행

   $ ls -l /proc/fs/nfsd 를 실행하면 위에서 언급한 파일들이 생성됨을 확인 할 수 있을 것이다.