$ sudo apt install sshfs
$ mkdir sshfs_workspace
$ mkdir dhyang_workspace
$ sshfs -o reconnect -o [allow_other | IdentityFile='id_rsa'] User@HostName:<Server>/<Absolute>/<Directory> <MyDir Path>
$ sshfs -o reconnect -o IdentityFile=~/.ssh/id_rsa dhyang@10.177.227.41:/home/dhyang/sshfs_workspace ~/dhyang_workspace
$ umount <Dir>
/etc/fstab
등록dhyang@10.177.227.41:/home/dhyang/sshfs_workspace /home/markyang/dhyang_workspace fuse.sshfs defaults,_netdev,delay_connect,allow_other,uid=1000,gid=1000,IdentityFile=/home/markyang/.ssh/id_rsa,defaults 0 0
option | description |
---|---|
defaults | 설정되지 않은 값에 대해서는 기본 설정을 따릅니다. |
_netdev | 네트워크 드라이브임을 의미하며, 마운트 시도 전 네트워크가 올바르게 설정되어 있는지 검사합니다. |
delay_connect | 부팅 과정에서 아직 네트워크 설정이 끝나지 않아 마운트를 하지 못하는 경우에 대비하여 시간을 지연하여 연결합니다. |
allow_other | 마운트된 디렉토리에 일반 유저의 접근을 허용합니다. |
uid, gid | 마운트된 디렉토리의 소유(Ownership)을 지정합니다. 특정 유저의 uid및 gid는 'id {username}'명령으로 확인할 수 있습니다.markyang (uid=1001, gid=1001) dhyang (uid=1000, gid=1000) |
IdentifyFile | 인증에 사용할 Key를 지정합니다. 마운트는 root권한으로 실행되므로 Key가 root의 홈디렉토리에 존재하지 않는 경우 이렇게 수동으로 지정해 줘야 합니다. |
rpcbind
대몬에 의해 제어된다.NFSv4
의 경우 TCP 포트 2049번을 통해 요청받은 NFS 서버는 리눅스 파일 시스템에 접근하기 위해 VFS 인터페이스를 통해 파일 시스템에 접근하고, 다시 구체적으로 rpc.mountd
대몬을 통해 로컬 디스크를 NFS 클라이언트에게 전달함으로써 클라이언트 시스템이 서버의 로컬 디스크를 마치 자신의 로컬 파일 시스템처럼 사용할 수 있게 제공한다.Ubuntu 20.04.03 LTS
NFS Server IP: 10.177.227.41
NFS Client IP: 10.177.227.40
$ sudo apt install nfs-kernel-server
$ sudo cat /proc/fs/nfsd/versions
~/srv/nfs4
~/srv/nfs4/workspace
$ mkdir -p ~/srv/nfs4
$ mkdir -p ~/srv/nfs4/workspace
$ chmod 777 ~/srv/nfs4/workspace
~/workspace
$ mkdir -p ~/workspace
$ sudo mount --bind ~/workspace ~/srv/nfs4/workspace
/etc/fstab
에 영구 등록/home/dhyang/workspace /home/dhyang/srv/nfs4/workspace none bind 0 0
/etc/exports
/home/dhyang/srv/nfs4 10.177.227.0/23(rw,sync,no_subtree_check,crossmnt,fsid=0)
/home/dhyang/srv/nfs4/workspace 10.177.227.*(rw,sync,no_subtree_check)
$ sudo exportfs -ra
$ sudo ufw allow from 10.177.227.0/23 to any port nfs
$ sudo ufw status
$ sudo apt install nfs-common
$ sudo yum install nfs-utils
/home/markyang/dhyang_workspace
$ mkdir ~/dhyang_workspace
nfsver=3
로 된다.HostName:<절대경로>
$ sudo mount -t nfs -o vers=4 10.177.227.41:/home/dhyang/srv/nfs/workspace /home/markyang/dhyang_workspace
vers=4
를 명시 했어도, HostName:<절대경로>
로 지정했기 때문에 nfsver=3
로 강제 마운트된다.HostName:<NFS_root를 root로 하는 상대경로>
$ sudo mount -t nfs -o vers=4 10.177.227.41:/workspace /home/markyang/dhyang_workspace
/etc/fstab
에서 한다.# /etc/fstab
10.177.227.41:/workspace /home/markyang/dhyang_workspace nfs nfsvers=4,defaults,_netdev 0 0
추가옵션 | 설명 |
---|---|
port=<PORT> | 포트번호 지정 |
_netdev | nfs등을 사용할 때 사용되는 옵션. 이 옵션이 없으면 mount가 네트워크 연결보다 먼저 일어나기 때문에 시스템 시작 시, 자동 마운트 되지 않는다. 심한 경우 무한 블록된다. 즉, _netdev 옵션은 '네트워크에 연결후 마운트' 하라는 옵션이다. |
sudo apt install nfs-kernel-server
/home/share
에 생성 하겠음$ sudo mkdir /home/share
$ sudo chmod -R 777 /home/share
/etc/exports
/etc/exports
에서 설정NFS 옵션 | description |
---|---|
rw | client가 서버 디렉토리에 읽기, 쓰기 모두 허용 |
ro | client가 NFS 서버 디렉토리에 read-only만 허용(기본 값) |
sync | client가 NFS 서버에 write 작업을 하면 바로 반영(기본 값) |
async | client가 NFS 서버에 write 작업을 하면 바로 반영X 서버에 문제가 발생했을 때, 데이터 불일치가 발생할 수 있다. |
root_squash | client가 uid/gid 0(root )로 접속해도 서버에서는 이를 anonymous uid/gid로 취급한다 (가지고 있는 권한이 없음) |
no_root_squash | client가 root 권한을 사용할 수 있다. 즉, 클라이언트의 root와 서버의 root를 일치시킨다. |
all_squash | 모든 사용자를 nobody로 매핑 즉, 이 옵션이 set 되어 있으면 nfsnobody 소유로 파일 생성된다. |
no_all_squash | 서버의 사용자와 클라이언트의 사용자를 일치 시킨다. 헷갈리지 말자.. 서버와 클라이언트의 UID를 매칭 시키는 것이 아니고, 각자의 이름을 사용할 수 있게하는 것 |
anonuid | anonymous 계정의 uid를 해당 값으로 설정한다.예: anonuid=1001 |
anongid | anonymous 계정의 gid를 해당 값으로 설정한다.예: anongid=1001 |
nohide | 일반적으로 서버가 두 개의 파일 시스템을 제공하는 경우, nohide 옵션은 파일 시스템이 hidden 상태가 되지 않게한다.예를 들어, 하나의 명백한 파일 시스템에서 두 개의 파일이 동일한 아이노드 번호를 가질 수 있다. nohide 옵션은 현재 single host exports에게만 적용된다. 넷 그룹, 서브넷 또는 와일드카드 export에서는 안정적으로 작동하지 않는다. |
crossmnt | 이 옵션은 nohide 와 비슷하지만, 클라이언트가 crossmnt 로 표시된 파일 시스템에서 마운트된 exported 파일 시스템으로 이동할 수 있다. 따라서 하위 파일 시스템 "B"가 상위 "A"에 마운트 되었을 때, crossmnt를 설정하는 것은 nohide 를 "B"에 설정하는 것 과 같다. |
fsid=(num│root│uuid) | NFS는 export되는 각 파일 시스템을 식별할 필요가 있다. 일반적으로 파일 시스템에 대해 UUID나 파일 시스템을 보유하고 있는 device number(파일 시스템이 장치에 저장되어 있는 경우)를 사용한다. 모든 파일시스템이 device에 저장되는 것이 아니며 모든 파일 시스템에 UUID가 있는 것도 아니기 때문에 NFS에 파일 시스템을 식별하는 방법을 명시적으로 알려줘야 하는 경우가 있다. 이 작업은 fsid= 옵션으로 수행된다. NFSv4의 경우 export한 모든 파일 시스템의 루트인 고유 파일 시스템이 있다. 다른 파일 시스템은 작은 정수 또는 32개의 16진수 및 임의 구두점을 포함해야하는 UUID로 식별할 수 있다. Linux 커널 버전 2.6.20 이하에서는 UUID 설정을 이해하지 못하므로 이러한 커널에 대해 fsid 옵션을 설정해야하는 경우 작은 정수를 사용해야 한다. 이전 커널과 새커널에서 모두 작동하도록 동일한 구성을 만들 수 있도록 작은 숫자와 UUID를 모두 설정할 수 있다. |
no_subtree_check | 이 옵션은 하위 트리 검사를 중지하여 보안에 상당한 영향을 끼치지만, 경우에 따라 안정성이 향상될 수 있다. 파일 시스템의 하위 디렉토리를 export 했지만 NFS 요청이 도착할 때마다, 전체 파일 시스템을 export하지는 않는 경우, 서버는 액세스한 파일이 적절한 파일 시스템에 있는지(쉽지만) 검사해야 할 뿐만 아니라 export된 트리에도 있는지 (더 어려움) 검색해야 한다. 이것이 이 검사를 수행하려면 서버는 클라이언트에 제공된 'filehandle"에 파일 위치에 대한 일부 정보를 포함해야한다. 이로 인해 클라이언트가 열려 있는 동안 이름이 변경된 파일에 액세스 하는데 문제가 발 생 할 수 있다. (대부분의 경우는 여전히 작동한다.) subtree check는 또한 파일 시스템이 no_root_squash로 export된 경우에만 루트만 액세스 할 수 있는 디렉토리 내부의 파일에 액세스할 수 있는지 확인하는 데 사용된다. 일반적으로 루트에서 내보내고 많은 파일 이름을 볼 수 있는 홈 디렉토리 파일 시스템은 subtree check를 사용하지 않는 상태에서 export해야한다. 대부분이 읽기전용이며 적어도 많은 파일 이름(e.g., /usr, /var)이 표시되지 않고 하위 디렉토리를 내보낼 수 있는 파일 시스템은 하위트리 검사를 사용하도록 설정하여 내보내야 한다. subtree check는 그 가치보다 더 많은 문제를 일으키는 경향이 있으므로, nfs-utils release 1.1.0 부터는 no_subtree_check가 default이다. 어느 옵션도 넣지 않으면, exportfs에서 변경사항이 보류중임을 경고한다. |
insecure | 옵션을 사용하면 NFS용으로 예약된 포트를 사용하지 않는 클라이언트도 사용허가한다. |
주의!! /etc/exports
에 썼다고 내용 적용되는 것이 아니다!
1. NFS 대몬을 restart 해야 적용된다.
2. $ sudo exportfs
명령을 사용해 잘 적용되는지 체크하라!
anonuid, anongid
anonymous
의 계정의 uid를 해당 값으로 설정한다./home/joe
대한 export 항목을 고려하세요.uid 150
(user: joe)에 매핑한다.# sample /etc/exports file
1. / master(rw) trusty(rw,no_root_squash)
2. /projects proj*.local.domain(rw)
3. /usr *.local.domain(ro) @trusted(rw)
4. /home/joe pc001(rw,all_squash,anonuid=150,anongid=100)
5. /pub *(ro,insecure,all_squash)
6. /srv/www -sync,rw server @trusted @external(ro)
7. /foo 2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw)
8. /build buildhost[0-9].local.domain(rw)
rw, no_root_squash
insecure
옵션을 사용하면 NFS용으로 예약된 포트를 사용하지 않는 클라이언트도 사용허가한다.(no_|)root_squash
sudo
): NFS 서버 대몬을 다시 시작하지 않고도 공유 목록(/etc/exports
) 파일의 변경된 내용 적용시킬 수 있음$ sudo exportfs [option]
option:
-a 설정 파일(/etc/exports)을 읽어들인다. (처음 한번 사용)
-r 설정 파일(/etc/exports) 파일을 다시 읽어 들인다. = service nfs restart
-v 현재 공유되는 디렉토리 목록 출력
-u IP주소:경로 경로로 지정한 디렉토리를 익스포팅하고 IP주소로 지정한 클라이언트의 접속을 허용한다.
e.g.,:
exportfs
exportfs -v
exportfs -o rw 10.10.10.1:/home/pub
주의!! /etc/exports
에 썼다고 내용 적용되는 것이 아니다!
1. NFS 대몬을 restart 해야 적용된다.
2. $ sudo exportfs
명령을 사용해 잘 적용되는지 체크하라!
$ sudo exportfs -ra
$ sudo exportfs -ra
$ sudo rpcinfo -p
$ sudo apt install nfs-common
~/myShare
$ sudo mount -t nfs [SERVER HOSTNAME]:[NFS DIRECTORY PATH] [CLIENT DIRECTORY PATH]
df
명령어로 확인해보면 연결된 정보 확인 가능
/etc/fstab
에 계속 마운트/etc/fstab
에 위와같이 NFS 설정을 작성해 계속 마운트 시킨다./etc/fstab , nfs option | Description |
---|---|
port=<PORT> | 포트번호 지정 |
_netdev | nfs등을 사용할 때 사용되는 옵션. 이 옵션이 없으면 mount가 네트워크 연결보다 먼저 일어나기 때문에 시스템 시작 시, 자동 마운트 되지 않는다. 심한 경우 무한 블록된다. 즉, _netdev 옵션은 '네트워크에 연결후 마운트' 하라는 옵션이다. |
nfsvers=3 | nfs 버전 명시. 앞과 같은 경우는 version 3 |
nolock | block x |
fg | 첫 번째 NFS 마운트 시도에서 타임아웃이 발생하면, 마운트 시도를 즉시 중단한다. (기본 값) |
hard | 타임아웃이 발생하면 Server not responding 이라는 메시지 출력하고 무한정 재시도한다.주의!! 이 때문에, 시스템이 부팅못할 수도 있다. |
soft | 타임 아웃이 발생하면 프로그램에 오류를 보고하고 부팅을 진행 |
timeo=n | This sets the time (in tenths of a second) the NFS client will wait for a request to complete. The default value is 7 (0.7 seconds). What happens after a timeout depends on whether you use the hard or soft option. |
hard | Explicitly mark this volume as hard-mounted. This is on by default. This option causes the server to report a message to the console when a major timeout occurs and continues trying indefinitely. |
soft | Soft-mount (as opposed to hard-mount) the driver. This option causes an I/O error to be reported to the process attempting a file operation when a major timeout occurs. |
/etc/fstab
수정 후, 바로 Mount 적용 시키려면 $ sudo mount -a
$ nfsstat -s
...
Server nfs v4
...
$ nfsstat -c
/etc/idmapd.conf
server: linux
client: win
server: win
client: linux
$ sudo apt install samba
$ mkdir $HOME/sambaDirectory
$ chmod 777 $HOME/sambaDirecotry
$ sudo useradd sambauser1
$ sudo passwd sambauser1
새 암호:
새 암호 재입력:
passwd: 암호를 성공적으로 업데이트 했습니다.
$ sudo smbpasswd -a sambauser1
New SMB password:
Retype new SMB password:
Added user sambauser1.
/etc/samba/smb.conf