[리눅스마스터 1급] 이기적 이론서 12회차 정리 - 파일 관련 서비스
🏁 이기적 이론서 학습 범위
- PART 03 네트워크 및 서비스의 활용
- CHAPTER 01 네트워크 서비스 (SECTION 03 파일 관련 서비스)
파일 관련 서비스
☑️ 삼바(SAMBA) 서비스
삼바 서비스의 개요
- 삼바 서비스의 특징
- GPL 기반의 자유 소프트웨어로 리눅스와 윈도우 간 디렉터리, 파일, 프린터, USB 등을 공유하는데 사용할 수 있다.
- TCP/IP를 기반으로 NetBIOS 상에서 동작하는 SMB(Server Message Block) 프로토콜을 이용한다.
- 삼바에서 설정한 그룹과 호스트명이 윈도우의 Network Neighborhood에 컴퓨터 이름으로 표시된다.
- 상대 호스트의 IP 주소 대신 컴퓨터 이름을 이용하여 접속할 수 있다. 이를 WINS(Windows Internet Name Service)라고 한다.
- CIFS(Common Internet File System)는 SMB를 인터넷까지 확장한 표준 프로토콜로, 유닉스와 윈도우 환경을 동시 지원한다.
- 삼바 서버의 구성 요소
크기 smbd와 nmbd로 구성된다.
구성요소 설명 nmbd - UDP 137, 138번 포트를 이용하여 컴퓨터(호스트)를 브로드캐스팅 방식으로 검색한 후, TCP 139번 포트를 이용하여 컴퓨터 이름을 접속한다.
- nmbd를 이용하지 않고 삼바 서비스를 구성할 수 있지만 Network Neighborhood에 표시되지 않고 컴퓨터 이름으로 접속할 수 없게 된다. 즉, WINS 서비스를 위한 데몬이다.smbd - 삼바 프로토콜의 주요 기능을 담당하여, TCP 445번 포트를 이용한다.
- 삼바 서버의 IP 주소만 알고 잇어도 IP 주소를 이용한 직접 접속 방법으로 삼바 서비스를 사용할 수 있다.삼바 서버의 구성 내용에 따라 TCP 139, 445번 포트와 UDP 137, 138번 포트를 방화벽에서 열어줘야 한다.
삼바 서비스 설치와 구성
- 삼바 관련 패키지 설치
패키지 관리 프로그램(yum)을 이용하여 삼바 관련 패키지를 설치한다.
$ yum -y install samba samba-common samba-client # yum을 통해 삼바 관련 패키지 설치
삼바 관련 주요 패키지
패키지 이름 설명 samba 삼바 데몬 관련 라이브러리 및 스크립트 등을 포함하는 핵심 패키지 samba-common - 삼바 서버 및 클라이언트에서 공통으로 사용하는 설정 및 명령어를 포함한다.
- 대표적으로smb.conf
설정 파일과 설정 파일을 검사하는testparm
등이 있다.samba-client smbclient
,smbtree
등 삼바 클라이언트 관련 명령어를 포함한다.삼바 관련 패키지
- samba-swat(Samba Web Administration Tool): 삼바의 설정 파일인 smb.conf를 웹을 이용해 관리할 수 있도록 지원하는 패키지
- TCP 901번 포트를 이용해서
http//youngjin-smbtest.com:901
의 형식으로 접근할 수 있다.
- 삼바 서비스 실행
주요 서비스 데몬인 smb와 nmb를 시작하고 동작을 확인한다.
$ systemctl start smb.service nmb.service # smb와 nmb 시작 $ systemctl -l status smb.service nmb.service # 동작 확인
자동실행 설정
$ systemctl enable smb.service nmb.service # 부팅 시 자동 실행하도록 설정 $ systemctl disable smb.service nmb.service # 자동실행 해제 가능
- 서비스 설정 변경 시,
systemctl restart <service>
로 서비스를 재실행 해야 한다.
- 서비스 설정 변경 시,
- smb.conf를 이용한 삼바 서비스 설정
- 삼바 서버는
/etc/samba/smb.conf
를 환경설정 파일로 이용한다. smb.conf
설정 파일은 Global Section과 Share Definition 영역으로 구분된다.[ ]
기호를 사용하여 세부 섹션을 구성한다.
smb.conf
의 주요 구성항목구성항목 설정 주석 #
이나;
으로 시작하는 행은 주석이다.섹션 []
를 이용해 섹션을 정의한다. 이후 정의한 값들은 섹션 내에서 유효하다.
-[global]
: 삼바 서비스의 전체 설정을 담당
-[디렉터리명]
: 해당 디렉터리에 대한 공유 설정 등을 지정한다.
-[printers]
: 프린터 공유 방식을 설정한다.값 설정 name = value
형식으로 옵션에 대한 값 설정Global Section의 주요 설정 항목
설정 항목 설정 workgroup - 공유 그룹명을 지정하며, 윈도우의 작업 그룹과 같이 동작한다.
- 기본값: workgroup = MYGROUPserver string - 서버에 대한 설명
- 기본값: server string = Samba Server Version %vnetbios name - 이름을 이용하여 접속할 때 사용하는 명칭
- ex. netbios name = MYSERVERinterfaces - 여러 개의 네트워크 인터페이스를 갖고 있을 경우 어떠한 것을 이용할 지 설정한다.
- localhost(lo)는 생략할 수 없다.
- ex. interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24hosts allow - 삼바 서버에 접근할 수 있는 호스트를 지정하며, 접근 통제의 역할을 수행한다.
- ex. hosts allow = 127.192.168.12. 192.168.13. EXCEPT 192.168.1.11 → 127.0.0.0 대역, 192.168.13.0 대역의 호스트만 접속할 수 잇고 192.168.1.11 호스트는 제외. 192.168.12.0/255.255.255.0과 같이 사용할 수도 있다.
-hosts allow = smbHost
와 같은 형식을 이용하여 접속 가능한 호스트 이름을 지정할 수 있다.log file - 삼바 서버의 로그 파일 지정
- 기본값: log file = /var/log/samba/log.%mmax log size - 로그 파일의 최대 크기를 KB 단위로 설정한다. 설정값 초과시 .old 확장자를 갖는 파일로 변환된 후 새로운 로그 파일을 이용하게 된다.
- 0으로 설정시 크기 제약 없이 사용
- 기본값: max log size = 50security - 클라이언트가 삼바 서버에 접근할 때 인증 레벨을 부여하는 보안 옵션 설정
- 세부 내용은 별도의 표 참고
- 기본값: security = userpassdb backend - security가 user일 경우 사용하는 패스워드 저장방식을 지정한다.
- 기본값: passdb backend = tdbsamhide dot files = no 리눅스의 숨길 파일이 윈도우 운영체제의 파일 목록에 표시된다. smb.conf의 security 옵션
옵션 설명 user - 삼바 서버에 접속할 시, OS에 로그온한 사용자명으로 패스워드를 확인한다.
- 기본 설정값임share - 인증 없이 삼바 서버에 접근 가능
- deprecated (이후 사용하지 않도록 권장)됨server - 윈도우 서버와 같은 다른 삼바 서버에 사용자명과 패스워드를 전달하여 확인한다.
- deprecated (이후 사용하지 않도록 권장)됨domain - 윈도우 서버의 도메인 컨트롤러에 사용자명과 패스워드를 전달하여 확인한다.
- samba 3.0부터 ads를 지정하여 Active Directory Service를 이용할 수 있다.Share Definition: 공유 폴더의 주요 설정 옵션
설정 옵션 설명 [디렉터리 이름] - []
사이에 공유 폴더 이름 지정
- ex. [homes]comment - 공유 폴더에 대한 설명 기술
- ex. comment = Home Directoriespath - 공유 디렉터리의 절대 경로 지정
- ex. path = /var/www/htmlread only = yes 읽기만 가능하도록 설정 writable = yes 쓰기 가능하도록 설정 write list = [사용자명] - 쓰기 가능한 사용자 지정
- @를 앞에 붙여서 그룹 지정
- ex. write list = smbuser @managervalid users = [사용자명] 접근 가능한 사용자를 지정하고, 별도로 지정하지 않는 경우 전체 사용자가 접근 가능하다. public = no 개인 사용자만 사용할 수 있도록 설정 browseable = no 이용 가능한 공유 리스트에 표시되지 않도록 설정 create mask = 값 파일 생성 시 사용되는 기본 접근 모드를 지정 (ex. 0644) follow symlinks = no 심볼릭 링크를 따르지 않도록 설정하여 잠재적 보안 위협 제거 printable = yes 삼바 프린터를 네트워크 프린터로 공유
- 삼바 서버는
- 삼바를 이용할 사용자 등록과 패스워드 설정
삼바를 이용할 리눅스 계정을 등록한다.
$ adduser smbuser $ passwd smbuser
- 필요시
/etc/samba/smbusers
설정 파일을 이용하여 리눅스 계정과 삼바 이용자명을 매핑한다./etc/samba/smbusers
: 시스템 계정과 관계 없는 삼바의 고유한 설정 파일
$ vi /etc/samba/smbusers
smbpasswd
를 통해 삼바 계정과 패스워드를 설정한다.- 삼바 계정은 리눅스 시스템에 등록된 계정이어야 한다.
smbpasswd
: 삼바 사용자의 생성과 삭제, 패스워드 변경, 사용자 활성 및 비활성화 등을 수행한다.- 형식 :
smbpasswd [옵션][사용자계정]
- 아무런 옵션을 지정하지 않으면 패스워드를 변경하며, 사용자 계정을 지정하지 않으면 현재 로그인한 사용자를 대상으로 한다.
smbpasswd의 주요 옵션(root 권한 필요)
옵션 설명 -a - 삼바 사용자 계정을 추가하고 패스워드를 설정한다.
- 추가하는 삼바 계정은 리눅스 시스템에 등록된 계정이어야 한다.-x 삼바 사용자 계정을 제거한다. -d 삼바 사용자 계정을 비활성화한다. -e 삼바 사용자 계정을 활성화한다. -n - 패스워드를 제거하여, 패스워드 없이 로그인 가능하도록 설정한다.
-smb.conf
설정 항목으로null passwords = yes
를 추가해야 한다.
$ smbpasswd -a smbuser
pdbedit
을 통해 삼바 사용자 목록 및 세부 내용을 확인한다.- 형식 :
pdbedit [옵션][사용자계정]
- 삼바 사용자 계정과 패스워드가 기록된
pssdb.tdb
의 내용을 보거나 정보를 설정한다. pdbedit 명령의 주요 옵션
옵션 설명 -L 등록된 삼바 사용자 목록 출력 -v 사용자 목록 출력 시 상세 정보 표시 -u 사용자 이름 지정 -a - 삼바 사용자 계정을 추가하고 패스워드를 설정
- 추가하는 삼바 계정은 리눅스 시스템에 등록된 계정이어야 함-r 삼바 사용자 계정 변경 -x 삼바 사용자 계정 제거 $ pdbedit -L $ pdbedit -v -u smbuser
- 형식 :
삼바 서비스 이용하기
- 삼바 클라이언트 패키지 설치
삼바 서버에 접속하여 삼바 서비스를 이용할 클라이언트 호스트에 samba-common samba-client 패키지를 설치한다.
$ yum -y install samba-common samba-client
- 삼바 서버 접속
smbclient
를 통해 삼바의 공유 디렉터리 정보를 확인하고 서버에 접속한다.형식
smbclient [옵션][호스트명]
- 접속 후
?
명령 입력시 사용 가능한 명령어 리스트를 확인할 수 있다.
- 접속 후
- 호스트의 공유 폴더 이름은
//172.30.1.12/[공유폴더]/
,\\172.30.1.12\[공유폴더]\
와 같이 지정할 수 있다.\
를 이용할 경우 실제 입력시\\\\172.30.1.12\\[공유폴더]\\
와 같이\
를 2개씩 이용해야 한다.
smbclient의 주요 옵션
옵션 설명 -L, —list 삼바 서버의 공유 디렉터리 정보 표시 -M, —message Ctrl + d
와 함께 사용하여 메시지를 전송-U[사용자이름], —user 사용자 이름 지정 -p [TCP 포트], —port 서버의 TCP 포트 번호 지정 $ smbclient -L 192.168.45.223 -U smbuser $ smbclient //192.168.45.223/smbuser/ -U smbuser
smbclient
를 이용하여 서버 접속 시%
를 추가하여 계정과 패스워드를 함께 지정할 수 있다.$ smbclient //192.168.45.223/smbuser/ -U smbuser%패스워드
- SMB 파일 시스템 마운트
mount
를 통해 삼바 공유 디렉터리를 로컬 시스템에 마운트하여 로컬 디렉터리인 것처럼 사용할 수 있다.마운트할 디렉터리를 만든 후 마운트한다.
$ mkdir /smbuser # 마운트할 디렉터리 생성 $ mount -t cifs //192.168.45.223/smbuser /smbuser -o user=smbuser.password=userpassword # mount를 통해 마운트 진행 (mount -t cifs 대신 mount.cifs 사용 가능) $ df # df 또는 ls를 통해 파일 시스템 확인
mount
를 통해 삼바 공유 폴더를 로컬 시스템에 마운트 할 때, permission deny가 발생할 수 있다.- 서버 시스템의 SELinux 설정에 따랐기 때문이다.
- 서버 시스템에서
setenforce 0
을 통해 문제를 해결할 수 있다. (보안상 권장 X)
삼바 관련 기타 명령어
명령어 | 설명 |
---|---|
smbstatus | 삼바의 현재 접속 정보 확인 |
testparm | 삼바의 설정 정보 확인 |
nmblookup | 삼바 서버의 NetBIOS 이름으로 IP 주소를 조회 |
smbcontrol | 삼바 데몬에 메시지를 보내 제어 |
☑️ NFS(Network File System) 서비스
NFS 서비스
- 특징
- TCP/IP를 이용하여 원격 호스트(컴퓨터)의 파일 시스템을 로컬 호스트(PC)에 있는 것처럼 마운트(Mount)하여 사용할 수 있는 서비스
- RPC(Remote Procedure Call)을 이용하여 NFS 관련 명령어를 전달하므로 rpcbind 데몬이 필요하다.
- NFS 서비스를 위한 주요 패키지
- rpcbind: rpcbind, rpcinfo 등의 명령어를 포함하며 RPC 서비스를 위해 사용한다.
- nfs-utils: NFS 관련 데몬 및 명령어를 포함한다.
NFS 서비스 설치와 구성
- NFS 관련 패키지 설치
패키지 관련 프로그램(yum)을 통해 NFS 관련 패키지를 설치한다.
$ yum -y install rpcbind nfs-utils
- NFS 서버 설정
/etc/exports
파일을 이용하여 NFS 서비스를 설정한다.[공유 디렉터리][접속 허가 호스트](옵션)…
의 형식으로 공유할 목록을 하나씩 지정한다.접속 허가 호스트는 IP 주소, 도메인 이름 등을 사용할 수 있고, 와일드카드(*)를 이용하여 모든 호스트를 허가한다.
/home/younjin-nfs 172.30.1.0/24(rw.no_root_squash) # 설정 예시
위 설정 예시와 같이 rw(읽기 및 쓰기)로 옵션 지정 시, 해당 디렉터리의 퍼미션에 rw 권한이 있어야 한다.
$ echo "/var/youngjin-nfs 192.168.45.0/24(rw.no_rrot_squash)" >> /etc/exports $ cat /etc/exports /var/youngjin-nfs 192.168.45.0/24(rw.no_rrot_squash) $ mkdir /var/youngjin-nfs $ chmod 777 /var/youngjin-nfs
/etc/exports
파일의 주요 옵션옵션 설명 ro 읽기 전용으로 지정한다(기본값) rw 읽기 및 쓰기로 지정한다. no_subtree_check 하위 디렉터리 검사를 금지한다. async 데이터 변경을 기록할 때 비동기적으로 처리한다. sync 기본 설정값이며, 데이터 변경을 기록할 때 동기적으로 처리한다. 변경된 사항이 기록된 후 응답한다. secure 기본 설정값이며, 포트 번호가 1024 이하의 요청만 허가한다. no_root_squash root 권한 접근을 허용한다. root_squash root 권한 접근을 거부하기 위해 클라이언트의 root 요청을 nobody
(또는nfsnobody
)로 매핑시킨다.(기본값)all_squash NFS 클라이언트에서 접근하는 모든 사용자(root 포함)의 권한을 nobody(또는 nfsnobody)로 매핑시킨다. anonuid 특정 계정의 권한(uid)을 할당한다.
- NFS 관련 데몬 실행
rpcbind와 nfs 데몬을 실행하고 확인한다.
$ systemctl start rpcbind nfs-server # nfs-server 대신 nfs-server.service 사용 가능 $ systemctl enable rpcbind nfs-server
NFS 서비스 이용
- NFS 서버에 연결
mount
를 통해 NFS 서버에 연결한다.- 형식
mount - nfs
대신mount.nfs
도 가능하다.
mount -t nfs [NFS 서버] : [대상 디렉터리][마운트 디렉터리]
예시
$ mkdir /var/youngjin-local $ mount -t nfs 192.168.45.223:/var/youngjin-nfs /var/youngjin-local $ df /var/youngjin-local
unmount
를 통해 마운트한 디렉터리를 제거할 수 있다.unmount [마운트 디렉터리]
- /etc/fstab을 이용한 마운트
/etc/fstab
파일은 장치를 마운트할 때 참조하는 파일이다./etc/fstab
에 관련 정보를 설정하여 부팅 시 자동으로 마운트되도록 구성할 수 있다.설정 예시
[a]192.168.45.223/var/youngjin-nfs [b]/var/youngjin-local [c]nfs [d]timeo=15.soft.retrans=3 [e]0 [f]0
/etc/fstab
의 주요 설정 옵션옵션 설명 [a] 파일 시스템 장치명 파티션 또는 장치의 위치를 지정한다. [b] 마운트 포인트 어떠한 디렉터리로 연결할 것인지 지정한다. [c] 파일 시스템 종류 nfs. NTFS. ext3. iso9660 (DVD) 등을 지정한다. [d] 마운트 옵션 - timeo: 타임아웃 후 첫 번째 재전송 요구 시간을 지정한다.
- retrans: 타임아웃 후 재전송 요청 회수를 지정한다.
- soft: retrans에 설정한 값만큼 요청한다.
- hard: 무한 반복하여 요청한다.
- auto: 부팅 시 자동 마운트로 지정한다.
- rw(읽기/쓰기), nouser(root만 마운트 가능), exec(실행 허용), Set-UID(SetUID, SetGID 허용), quota(Quota 설정 가능) 등을 추가 지정할 수 있다.[e] 덤프 백업 여부 지정(0: 불가능, 1: 가능) [f] 무결성 검사 fsck
에 의한 무결성 검사 우선순위를 지정한다. (0: 하지 않음)
NFS 관련 기타 명령어
명령어 | 설명 |
---|---|
rpcinfo | RPC 관련 정보를 표시하는 명령어 |
exportfs | - NFS 서버의 익스포트된 디렉터리 정보, 즉 공유 목록을 관리한다. - exports [옵션][호스트명] 의 형식이다. - -v : 상세 내용을 출력한다. - -r : /etc/exports 설정 파일을 다시 읽어들인다. - -a : 모든 디렉터리를 대상으로 한다. - -u : export 된 디렉터리를 해제한다. |
showmount | - 마운트 관련 정보를 표시한다. - NFS 서버의 익스포트된 정보를 확인하기 위해 사용할 수 있다. - showmount [옵션][호스트명] 의 형식이다. - -a : 호스트명:디렉터리 형식으로 모든 내용을 출력한다. - -e : 지정한 호스트에서 익스포트된 정보를 출력한다. - -d : NFS 클라이언트 호스트(PC)에서 마운트한 목록을 출력한다. |
nfsstat | NFS 관련 상태 정보를 표시한다. |
☑️ FTP(File Transport Protocol) 서비스
FTP 서비스
- 특징
- TCP/IP를 이용하여 FTP 서버와 FTP 클라이언트 간 파일을 전송(Transport) 하기 위한 프로토콜
- 기본적으로 등록된 사용자(계정)만 접속하여 사용할 수 있으나, 익명의 사용자를 지원하는 경우도 있다.
- CentOS 등 리눅스에서 기본 제공하는 vsftpd(Very Secure FTP Daemon)는 가장 대표적인 FTP 프로그램이다.
- 보안을 중요시하여 익명 사용자 디렉터리의 권한이 777이면 로그인을 제한한다.
명령전달을 위한 제어 포트와 데이터 전달을 위한 전송 포트를 각각 사용하며, 동작방식으로 능동 모드(Active mode)와 수동 모드(Passive mode)가 있다.
포트명 설명 FTP 능동 모드 - 클라이언트가 데이터 포트로 사용할 포트 번호를 서버에게 알려주며, 이를 이용하여 서버가 클라이언트로 접속한다.
- 서버는 자신의 데이터 포트로 20번을 사용한다. 클라이언트 호스트가 방화벽 뒤(내부)에 있을 경우 접속에 문제가 발생할 수 있다. 이를 해결하기 위해 수동 모드를 사용한다.FTP 수동 모드 - 서버가 데이터 포트로 사용할 포트 번호를 클라이언트에 알려주며, 이를 이용하여 클라이언트가 서버로 접속한다.
- 포트 번호는 보통 1024 이후의 번호를 사용한다.- 제어 포트: 21번 포트를 이용하여 사용자 인증, 명령 등을 전달한다.
FTP 서비스 설치와 구성
- FTP 관련 패키지 설치
vsftpd
패키지를 설치한다.$ yum -y install vsftpd
vsftpd
관련 파일 목록파일 목록 설명 /etc/vsftpd/vsftpd.conf vsftpd의 주 설정 파일 /etc/pam.d/vsftpd vspftd의 PAM(Pluggable Authentication Module) 설정 파일 /etc/vsftpd/ftpusers PAM과 연관된 설정 파일로 FTP 서비스에 접근할 수 없는 사용자(계정)를 지정한다. /etc/vsftpd/user_list - 주 설정 파일인 vsftpd.conf
의 설정 내용에 따라 다르게 동작한다.
-userlist_enable=YES
로 설정되어야 user_list를 사용하게 된다. 기본값은 설정된 상태이다.
-userlist_deny=YES
로 설정하면 user_list 등록된 사용자(계정)은 FTP 서비스에 접근할 수 없다. 기본 설정값은 YES이며, user_list는 거부 목록으로 적용된다.
-userlist_deny=NO
로 설정되면, user_list에 등록된 사용자는 FTP 서비스를 사용할 수 있다.
- FTP 서버 설정
/etc/vsftpd/vsftpd.conf
파일을 이용하여vsftpd
의 동작 환경을 설정한다.vsftpd.conf
의 주요 설정 항목항목 설명 anonymouns_enable=YES 익명 사용자의 접속 허가 anon_upload_enable=YES 익명 사용자의 업로드 허가 anon_mkdir_write_enable=YES 익명 사용자가 새로운 디렉터리를 만드는 것을 허가 local_enable=YES 로컬 계정 사용자의 접속 허가 write_enable=YES FTP 쓰기 명령 허가 - 이외는 생략
- vsftpd 데몬 실행
데몬을 실행한다.
$ systemctl start vsftpd.service $ ps aux | grep vsftpd $ systemctl enable vsftpd.service
FTP 서비스 이용하기
- FTP 클라이언트 설치
ftp 클라이언트를 설치한다.
$ yum -y install ftp
- vsftpd 서버에 접속 및 명령 확인
서버에 접속한다.
$ ftp 192.168.45.223 ftp> help # 사용할 수 있는 ftp 관련 명령어들을 확인
- 서버 접속 과정 중
500 OOPS: cannot directory:/home/master
메시지와 함께 접속 실패의 경우, SELinux(Security-Enhanced Linux)의 FTP 관련 보안 설정을 확인한다. 아래 명령으로 관련 문제를 해결할 수 있다.
$ setsebool allow_ftpd_full_access on $ systemctl restart vsftpd.service # vsftpd 재실행