NFS 서버와 SAMBA 서버
✒️ 2025-05-22 15:23 내용 수정
NFS(Network File System) 서버
네트워크 상에서 파일 및 디렉터리를 공유하기 위한 프로토콜 및 시스템
- Unix 및 Unix 계열 운영체제, 리눅스에서 주로 사용한다.
- 보안을 지원하지만 만약 보안 없이 사용한다면 매우 위험하니 주의해야 한다.
- 실습할 때 서버의 방화벽을 해제하고 진행했다. (systemctl 명령어#방화벽 관리 참고)
- NFS는 마운트 프로토콜을 사용하기 때문에 서버의 공유 폴더를 클라이언트 컴퓨터로 가져와서 작업한다. 때문에 동기화를 걸어두면 서버 측의 디렉터리와 파일이 변경된다.
서버 설정
- nfs 패키지를
yum install -y nfs-utils으로 다운 받는다.- 패키지에 서버와 클라이언트가 모두 포함되어 있다.
rpm -aq | grep nfs로 패키지가 설치되었는지 확인한다.
- 서버의 설정 파일을 수정한다. (원본 파일은 빈 파일이다.)
vi /etc/exports에 공유할 디렉터리와 접근을 허가할 컴퓨터의 접근 권한을 설정한다.- 공유할디렉터리(tab)공유할아이피(옵션) 순서대로 작성한다.
- tab은 키보드 tab
| 옵션 | 설명 |
|---|---|
| rw | 읽기(다운로드), 쓰기(업로드) 허용 |
| ro | 읽기(다운로드)만 허용 |
| secoure | 클라이언트에서 마운트 요청시 1024 포트 이하로 설정 |
| root_squash | 클라이언트가 마운트할 때 root 권한 차단 |
| no_root_squash | 클라이언트가 마운트할 때 root 권한 허용 |
| sync | 서버와 클라이언트간의 동기화 허용 |
| all_squash | root를 제외한 서버와 클라이언트의 권한을 동일하게 적용(user 계정으로) |
| no_all_squash | root를 제외한 서버와 클라이언트의 권한을 통일(전원 guest로 통일) |
- 공유할 디렉터리가 존재하지 않으면
mkdir 디렉터리로 생성해준다. - 생성한 디렉터리에
chmod 707 디렉터리로 퍼미션을 설정한다.- 클라이언트로 접속해서 확인해보기 위해 1.txt라는 파일에 nfs test라고 작성해서 저장했다.
systemctl start nfs-server로 서비스를 실행하고,systemctl enable nfs-server로 재부팅 옵션을 설정한다.systemctl status nfs-server로 현재 서비스의 작동 상태를 확인한다.
서버 관리
- 네트워크 관련 명령어#NFS도 참고
exportfs -v: 공유 목록을 확인할 수 있다.
exportfs -a: 데몬 재실행 없이 파일을 실시간으로 적용할 수 있다.exportfs -r: /etc/exports와 /etc/exports.d의 파일들을 읽어온다.exportfs -u 아이피주소:/디렉터리: 지정한 폴더를 목록에서 제거한다.
클라이언트 설정
- 서버와 마찬가지로 nfs 패키지를
yum install -y nfs-utils으로 다운 받는다. showmount -e 서버아이피로 서버에 공유된 디렉터리 목록을 확인한다.
- 서버 공유 폴더와 마운트를 할 디렉터리를
mkdir 디렉터리로 생성한다. - 서버 공유 폴더를
mount -t nfs 서버아이피:디렉터리경로 마운트포인트로 마운트한다.- 디스크 관련 명령어#마운트의 mount 옵션 참고.
- 중간에 디렉터리 이동 없이 ls를 잘못 입력했다.
- 마운트한 디렉터리로 이동하면 서버에서 테스트를 위해 만든 1.txt 파일을 확인할 수 있다.
- 이번엔 역으로 클라이언트에서 파일을 생성하고 서버에서 확인해본다.
cat > client.text로 client mount success! 라는 문구를 저장했다. - 서버 컴퓨터에서
cd /share로 이동해 해당 파일을 확인한다.- client.txt라는 파일에 아까 클라이언트에서 입력했던 내용을 확인할 수 있다.
- 다시 클라이언트 컴퓨터에서 마운트한 디렉터리 내의 1.txt 파일을 /home에 복사하면 서버에 있는 파일을 성공적으로 클라이언트 서버에 다운로드할 수 있다.
- 컴퓨터를 종료하면 마운트가 풀리기 때문에 자동 마운트를 걸어준다.
- 하드디스크 추가#5. 자동 마운트 설정 참고.
- 4번에서
mount -t nfs 서버아이피:디렉터리경로 마운트포인트로 걸었기 때문에 fstab에서 장치명은서버아이피:디렉터리경로, 파일 시스템은nfs이다.
- 확인을 위해
init 6로 재부팅한 후cd 마운트포인트로 해당 디렉터리가 마운트된 걸 확인하거나,mount | grep 마운트포인트,df -h로 확인한다.
SAMBA 서버
Windows 운영체제와 Unix 및 Linux의 파일 및 프린터 공유를 할 때 주로 사용
- 윈도우끼리는 사용자 없이 공유 폴더에 접근 가능하지만 다른 운영체제에서 윈도우로 접근할 때는 사용자를 만들어야 한다.
- Unix와 Linux 운영체제간의 파일 공유도 가능하지만 NFS가 더 편리하다.
- SMB/CIFS 네트워킹 프로토콜을 다시 구현한 소프트웨어다.
- SMB(Server Message Block)은 파일 및 프린터 공유를 위한 프로토콜
- CIFS(Common Internet File System)은 SMB를 확장한 프로토콜
- 참고 자료 : 위키백과 삼바(소프트웨커)
- SAMBA는 서버의 공유 폴더에 접속해서 작업한다.
Linux에서 Windows로 공유
1. Linux에서 작업(CentOS 7)
- samba 패키지들을
yum install -y samba samba-clinet samba-common cifs-utils로 다운 받는다.- 패키지 관리 명령어#CentOS 패키지의 samba 패키지 참고
rpm -aq | grep samba와rpm -aq | grep cifs로 패키지가 설치 되었는지 확인한다.
- 공유할 디렉터리를
mkdir 디렉터리로 생성한 후gedit /etc/samba/smb.conf로 SAMBA 설정 파일을 연다. - 환경 설정을 원하는 대로 설정한다.
- /etc/samba/smb.conf에 다른 옵션에 대한 예시문들이 존재한다.
- 참고 자료 : inpa dev's 삼바(SAMBA) 설치 & 설정 방법
[공유이름]
comment = 팝업용 주석
path = 공유할 폴더 절대 경로
force user = 접근 가능 사용자 지정(유저1 유저2)
force group = 접근 가능 그룹 지정(그룹1 그룹2)
valid users = 접근 가능 사용자 지정, 그룹으로 지정도 가능(유저1 @그룹1)
read only = 읽기 전용 여부(yes/no)
writeable = 쓰기 권한 여부(yes/no)
public = 게스트 허용 여부(yes/no)
browseable = 공유 리스트 출력 여부(yes/no)
printable = 프린트 공유 여부(yes/no)
guest ok = 기타 사용자 허용 여부(yes/no)
write list = 쓰기 가능한 유저 지정(유저1 유저2)
create mask = 파일 생성 시 부여되는 권한, 사용자 그룹 기타사용자
directory mask = 폴더 생성 시 부여되는 권한, 사용자 그룹 기타사용자
testparm으로 변경된 설정을 확인한다.
systemctl start smb nmb로 서비스를 실행한다. 만약 실행중이라면systemctl restart smb nmb으로 재시작한다.- 퍼미션을
chmod -R 707 디렉터리로 설정하여 사용자가 접근할 수 있도록 한다.
- 윈도우에서 리눅스로 접근할 계정을
useradd 계정명으로 추가해준다. - 반드시
passwd 계정명으로 비밀번호도 생성해준다. grep 계정명 /etc/passwd로 계정이 생성되었는지 확인한다.
- SAMBA의 공유 계정을 생성해줘야 하기 때문에 /etc/passwd에 등록된 계정을 SAMBA 계정으로 설정해준다.
smbpasswd -a 계정명로 SAMBA 계정을 설정하고 SAMBA용 비밀번호도 등록한다.- 해당 계정의 원본 비밀번호와 SAMBA 비밀번호는 다르다.
- 기타 옵션은 네트워크 관련 명령어
-
SAMBA 서비스를
systemctl start nmb와systemctl start smb로 실행한다.- 만약 서비스들이 켜져 있는 상태라면
systemctl restart nmb와systemctl restart smb로 재실행한다.
- 만약 서비스들이 켜져 있는 상태라면
-
공유 폴더에서 공유 테스트를 위해
cat > linux.txt로 linux to windows file sharing을 입력했다.
2. window에서 작업
- 파일 탐색기에서 주소에
\\리눅스아이피\공유폴더를 입력하거나, 파일 탐색기에서 좌측 라이브러리에 네트워크에서 우클릭 - 네트워크 드라이브 연결을 선택한다.- 네트워크 드라이브 연결을 선택했다면 새로 뜨는 창에서
\\리눅스아이피\공유폴더를 입력한다. - 실습할 때 집에서 사용하는 컴퓨터로는 접속이 안됬었다. 그래서 윈도우 가상 머신을 따로 설치해서 리눅스와 동일한 게이트 웨이를 가지는 ip를 잡아서 연결했다.
- 네트워크 드라이브 연결을 선택했다면 새로 뜨는 창에서
- 리눅스에서 생성했던 SAMBA 계정의 아이디와 비밀번호를 입력한다. (리눅스에서 만든 사용자의 암호가 아니라
smbpasswd -a 사용자로 생성한 비밀번호다)
- 접속이 되었다면 파일 전송을 확인하기 위해 테스트용 파일을 만든다.
- 리눅스에서 해당 파일이 생성된 것을 확인할 수 있다.
Windows에서 Linux로 공유
1. window에서 작업
-
윈도우에서 공유할 폴더를 선택해서 우클릭 - 속성을 선택한다.
-
속성 메뉴 중에서 공유 - 암호 보호 - 네트워크 및 공유 센터를 선택한다.
- 모든 네트워크 설정을 다음과 같이 변경한다.
- 공용 폴더 공유 : 1번 항목
- 파일 공유 연결 : 1번 항목
- 암호로 보호된 공유 : 2번 항목
- 모두 설정이 되었다면 변경 내용 저장을 누른다.
- 다음은 공유 메뉴에서 네트워크 파일 및 폴더 공유 - 공유를 선택한다.
- 이름으로 Everyone을 선택하거나 화살표를 눌러 나온 항목 중 Everyone을 선택하고 추가 버튼을 누른다.
- Everyone의 사용 권한을 원하는 대로 선택한다. 실습을 위해 읽기/쓰기를 선택했다.
- 선택이 완료되었다면 공유 버튼을 누르고, 폴더가 공유되었다는 창이 뜨면 완료 버튼을 누른다.
- 이번엔 공유 메뉴에서 고급 공유를 선택한다.
- 선택한 폴더 공유 체크박스를 선택하고, 공유 이름에 공유하려는 폴더 이름이 맞는지 확인한다.
- 권한 버튼을 눌러 공유할 사용자의 사용 권한을 설정한 후 적용 버튼 - 확인 버튼을 누른다.
- 6)번에서 선택한 권한대로 수정한다.
- 적용 버튼 - 확인 버튼을 누르면 폴더의 공유 설정이 완료된다.
- 이번엔 명령 프롬프트(cmd)를 열어
ipconfig로 윈도우 아이피를 확인한다. 이는 리눅스에서 접근할 때 사용할 예정이다.
- 리눅스에서 윈도우에 접근하려면 사용자가 필요하므로 사용자를
net user root 비밀번호 /add로 추가한다.- cmd가 관리자의 권한으로 실행된 상태여야만 해당 명령어가 작동한다. cmd를 열기 전에 우클릭을 눌러 자세히 보기 - 관리자의 권한으로 실행을 선택해서 cmd를 연다
- 사용자 제거할 땐
net user 유저명 /del을 사용한다.
2. Linux에서 작업(CentOS 7)
- 서버 구축 때 samba-client 패키지도 함께 설치했다.
- 만약 클라이언트 패키지가 없다면
yum install -y samba samba-clinet samba-common cifs-utils로 다운 받는다. - 패키지가 설치 되었는지
rpm -aq | grep samba로 확인한다.
- 만약 클라이언트 패키지가 없다면
- 공유 폴더를 마운트할 디렉터리를
mkdir 디렉터리로 만든다.
smbclient -L //윈도우아이피로 윈도우 컴퓨터에서 공유한 폴더 목록을 확인한다. 이 때 Enter SAMBA\root's password가 뜨는데, 이는 윈도우에서 만든 root 사용자의 비밀번호를 말한다. NFS 서버와 SAMBA 서버#1. window에서 작업의 13)번에서 만든 비밀번호를 입력하면 공유 목록 폴더를 확인할 수 있다.
-
mount -t cifs //윈도우아이피/공유폴더이름 마운트포인트로 윈도우 공유 폴더를 리눅스에 마운트한다.- 윈도우 폴더에 있던 파일을 확인할 수 있다.
- 윈도우 폴더에 있던 파일을 확인할 수 있다.
-
윈도우 공유 폴더로 파일 업로드가 되는지 확인해본다.
cat > linux.txt로 linux file share success!를 입력한 후, 윈도우 공유 폴더에서 파일을 확인한다.