/ NFS

RHCE : NFS – Provide network shares to specific clients.

NFS mount command rhce-new redhat-new firewall-cmd command rpcbind nfs-server nfs-idmap nfs-idmapd nfs-utils exportfs command /etc/exports
https://4am.kr/rhce-nfs-provide-network-shares-to-specific-clients/

RHCE : NFS – 특정 클라이언트에 네트워크 공유 제공

RHCE 주제입니다. 아래 참조된 사이트를 번역 및 내용 추가하였습니다.

시작하기 전에

이 튜토리얼에서 NFS서버는 server1.example.com이고, NFS 클라이언트는 server2.example.com이라고 가정한다.

NFS 서버 설정

1. file-server 패키지를 그룹으로 설치한다.
[root@server1 ~]# yum groupinstall -y file-server
Loaded plugins: fastestmirror, langpacks
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
base                                                            | 3.6 kB  00:00:00     
extras                                                          | 3.4 kB  00:00:00     
updates                                                         | 3.4 kB  00:00:00     
updates/7/x86_64/primary_db                                     | 4.1 MB  00:00:00     
Loading mirror speeds from cached hostfile
 * base: centos.mirror.cdnetworks.com
 * extras: centos.mirror.cdnetworks.com
 * updates: centos.mirror.cdnetworks.com
Resolving Dependencies
...
Dependency Updated:
  device-mapper.x86_64 7:1.02.107-5.el7_2.1                                            
  device-mapper-event.x86_64 7:1.02.107-5.el7_2.1                                      
  device-mapper-event-libs.x86_64 7:1.02.107-5.el7_2.1                                 
  device-mapper-libs.x86_64 7:1.02.107-5.el7_2.1                                       
  device-mapper-persistent-data.x86_64 0:0.5.5-1.el7                                   
  krb5-libs.x86_64 0:1.13.2-12.el7_2                                                   
  libsmbclient.x86_64 0:4.2.10-6.el7_2                                                 
  libtalloc.x86_64 0:2.1.5-1.el7_2                                                     
  libtdb.x86_64 0:1.3.8-1.el7_2                                                        
  libtevent.x86_64 0:0.9.26-1.el7_2                                                    
  libwbclient.x86_64 0:4.2.10-6.el7_2                                                  
  lvm2.x86_64 7:2.02.130-5.el7_2.1                                                     
  lvm2-libs.x86_64 7:2.02.130-5.el7_2.1                                                
  pytalloc.x86_64 0:2.1.5-1.el7_2                                                      
  samba-common.noarch 0:4.2.10-6.el7_2                                                 
  samba-libs.x86_64 0:4.2.10-6.el7_2                                                   

Complete!
2. 방화벽에 새 서비스를 추가한다.
[root@server1 ~]# firewall-cmd --permanent --add-service=nfs
success
[root@server1 ~]# 
3. 방화벽 설정을 다시 로드한다.
[root@server1 ~]# firewall-cmd --reload 
success
[root@server1 ~]# 
4. NFS 서비스를 시작할 때 활성화한다
[root@server1 ~]# systemctl enable rpcbind nfs-server
ln -s '/usr/lib/systemd/system/nfs-server.service' '/etc/systemd/system/nfs.target.wants/nfs-server.service'
[root@server1 ~]# 

노트: nfs-idmap/nfs-idmapd(RHEL 7.1에서 변경됨), nfs-lock 서비스는 nfs-server서비스에 의해 자동으로 시작된다. nfs-idmap/nfs-idmapdNFSv4에서 필요하지만, 클라이언트와 서버 사이에 어떤 UID/GID 불일치도 허용하지 않는다. 이것은 이름으로 ACL을 설정할 때나, 사용자/그룹 이름을 표시하려고 할 때에만 사용된다.
아직도 모든 권한 체크는 서버UID/GID를 통해 한다(더 자세한 내용은 nfs-idmap과 관련된 스레드를 통해 확인할 수 있다.)

5. NFS 서비스를 실행한다.
[root@server1 ~]# systemctl start rpcbind nfs-server
[root@server1 ~]#

노트: 기본으로 8개의 NFS 스레드가 사용된다(RPCNFSCDOUNT=8/etc/sysconfig/nfs파일에 정의되어 있다).
프로덕션 환경에서는 이 변수를 최소 32이상으로 올려야 한다(참조: http://initrd.org/wiki/NFS_Setup).

6. 내보내고 접근 권한을 정의할 디렉토리를 생성한다.
[root@server1 home]# mkdir -p /home/tools
[root@server1 home]# chmod 0777 /home/tools
[root@server1 home]# mkdir -p /home/guests
[root@server1 home]# chmod 0777 /home/guests
[root@server1 home]# 
7. 올바른 SELinux 컨텍스트를 새 디렉토리들에 정의한다.
[root@server1 home]# yum install -y setroubleshoot-server
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: centos.mirror.cdnetworks.com
 * extras: centos.mirror.cdnetworks.com
 * updates: centos.mirror.cdnetworks.com
Resolving Dependencies
--> Running transaction check
---> Package setroubleshoot-server.x86_64 0:3.2.17-2.el7 will be updated
--> Processing Dependency: setroubleshoot-server = 3.2.17-2.el7 for package: setroubleshoot-3.2.17-2.el7.x86_64
---> Package setroubleshoot-server.x86_64 0:3.2.24-1.1.el7 will be an update
--> Running transaction check
---> Package setroubleshoot.x86_64 0:3.2.17-2.el7 will be updated
---> Package setroubleshoot.x86_64 0:3.2.24-1.1.el7 will be an update
--> Finished Dependency Resolution

Dependencies Resolved

=======================================================================================
 Package                      Arch          Version                  Repository   Size
=======================================================================================
Updating:
 setroubleshoot-server        x86_64        3.2.24-1.1.el7           base        345 k
Updating for dependencies:
 setroubleshoot               x86_64        3.2.24-1.1.el7           base        127 k

Transaction Summary
=======================================================================================
Upgrade  1 Package (+1 Dependent package)

Total size: 472 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Updating   : setroubleshoot-server-3.2.24-1.1.el7.x86_64                         1/4 
  Updating   : setroubleshoot-3.2.24-1.1.el7.x86_64                                2/4 
  Cleanup    : setroubleshoot-3.2.17-2.el7.x86_64                                  3/4 
  Cleanup    : setroubleshoot-server-3.2.17-2.el7.x86_64                           4/4 
  Verifying  : setroubleshoot-server-3.2.24-1.1.el7.x86_64                         1/4 
  Verifying  : setroubleshoot-3.2.24-1.1.el7.x86_64                                2/4 
  Verifying  : setroubleshoot-3.2.17-2.el7.x86_64                                  3/4 
  Verifying  : setroubleshoot-server-3.2.17-2.el7.x86_64                           4/4 

Updated:
  setroubleshoot-server.x86_64 0:3.2.24-1.1.el7                                        

Dependency Updated:
  setroubleshoot.x86_64 0:3.2.24-1.1.el7                                               

Complete!
[root@server1 home]# 
[root@server1 home]# semanage fcontext -a -t public_content_rw_t "/home/tools(/.*)?"
[root@server1 home]# semanage fcontext -a -t public_content_rw_t "/home/guests(/.*)?"
[root@server1 home]# restorecon -R /home/tools
[root@server1 home]# restorecon -R /home/guests
[root@server1 home]# 

노트: public_content_rw_t컨텍스트 뿐만 아니라 public_content_ro_t(읽기 전용) 또는 nfs_t(더 제한적임) 컨텍스트도 필요에 따라서 사용이 가능하다.

8. 아래와 같이 NFS에 사용되는 SELinux boolean 확인해 볼 수 있다.
[root@server1 ~]# semanage boolean -l | egrep "nfs|SELinux"
SELinux 부울                     상태   디폴트  설명 
xen_use_nfs                    (비활성  , 비활성 )  Allow xen to use nfs
virt_use_nfs                   (비활성  , 비활성 )  Allow virt to use nfs
mpd_use_nfs                    (비활성  , 비활성 )  Allow mpd to use nfs
nfsd_anon_write                (비활성  , 비활성 )  Allow nfsd to anon write
ksmtuned_use_nfs               (비활성  , 비활성 )  Allow ksmtuned to use nfs
git_system_use_nfs             (비활성  , 비활성 )  Allow git to system use nfs
virt_sandbox_use_nfs           (비활성  , 비활성 )  Allow virt to sandbox use nfs
logrotate_use_nfs              (비활성  , 비활성 )  Allow logrotate to use nfs
git_cgi_use_nfs                (비활성  , 비활성 )  Allow git to cgi use nfs
cobbler_use_nfs                (비활성  , 비활성 )  Allow cobbler to use nfs
httpd_use_nfs                  (비활성  , 비활성 )  Allow httpd to use nfs
sge_use_nfs                    (비활성  , 비활성 )  Allow sge to use nfs
ftpd_use_nfs                   (비활성  , 비활성 )  Allow ftpd to use nfs
sanlock_use_nfs                (비활성  , 비활성 )  Allow sanlock to use nfs
samba_share_nfs                (비활성  , 비활성 )  Allow samba to share nfs
openshift_use_nfs              (비활성  , 비활성 )  Allow openshift to use nfs
polipo_use_nfs                 (비활성  , 비활성 )  Allow polipo to use nfs
use_nfs_home_dirs              (비활성  , 비활성 )  Allow use to nfs home dirs
nfs_export_all_rw              (활성   ,  활성 )  Allow nfs to export all rw
nfs_export_all_ro              (활성   ,  활성 )  Allow nfs to export all ro
[root@server1 ~]# 
9. 필요하다면, 알맞은 설정을 SELinux boolean들을 통해 정의할 수 있다.
[root@server1 ~]# setsebool -P nfs_export_all_rw on
[root@server1 ~]# setsebool -P nfs_export_all_ro on
[root@server1 ~]# setsebool -P use_nfs_home_dirs on
[root@server1 ~]# 
10. /etc/exports파일을 수정하고, 아래의 줄들을 클라이언트들의 도메인(또는 ip주소)와 함께 추가해준다.
[root@server1 ~]# vim /etc/exports
/home/tools server2.example.com(rw,no_root_squash)
/home/guests server2.example.com(rw,no_root_squash)
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
~                                                                                      
-- 끼워넣기 --                                                       2,52         모두

노트: 절대 어떤 빈칸도 괄호 전에 입력하면 안된다. 줄의 의미를 바꿀 수 있기 때문이다.

11. 디렉토리를 내보낸다.
[root@server1 ~]# exportfs -avr
exporting server2.example.com:/home/guests
exporting server2.example.com:/home/tools
[root@server1 ~]# systemctl restart nfs-server
[root@server1 ~]# 

노트: 마지막 커맨드는 나중에 필요로 하지 않는다. 하지만, 하는 동안 리부팅을 방지해준다.

12. 설정을 확인한다.
[root@server1 ~]# showmount -e localhost
Export list for localhost:
/home/guests server2.example.com
/home/tools  server2.example.com
[root@server1 ~]# 

NFS 클라이언트 설정

1. 클라이언트(여기서는 server2.example.com을 의미)에서 다음 커맨드를 입력한다.
[root@server2 ~]# yum install -y nfs-utils
Loaded plugins: fastestmirror, langpacks
RHELREPO                                                        | 3.6 kB  00:00:00     
Determining fastest mirrors
Package 1:nfs-utils-1.3.0-0.el7.x86_64 already installed and latest version
Nothing to do
[root@server2 ~]# mount -t nfs server1.example.com:/home/tools /mnt
[root@server2 ~]# df -h
Filesystem                       Size  Used Avail Use% Mounted on
/dev/mapper/centos-root          8.5G  3.7G  4.9G  44% /
devtmpfs                         905M     0  905M   0% /dev
tmpfs                            914M   80K  914M   1% /dev/shm
tmpfs                            914M  8.9M  905M   1% /run
tmpfs                            914M     0  914M   0% /sys/fs/cgroup
/dev/sda1                        497M  119M  379M  24% /boot
server1.example.com:/home/tools  8.5G  3.7G  4.9G  44% /mnt
[root@server2 ~]# 

추가 자료