리눅스(CentOS 6.6)에서 윈도우 공유폴더 마운트하기

|


1. 공유되어 있는 폴더 확인하기


# smbclient -L [서버ip] -U [계정]


명령어가 작동하지 않으면 # yum install samba-client 로 설치한다.

만약 Windows가 Active Directory를 사용 중이라면 [계정]에 [도메인/계정] 을 입력하면 된다.

( \가 아닌 / 이다.)





2. 마운트 시키기


# mount -t cifs //서버ip Linux_마운트_지점 -o username="계정",password="비번"


하지만 이 방법은 재부팅 시 마운트가 풀려버린다.





3. auto mount by fstab


[비추천하는 방법]


부팅 시 자동으로 마운트 시키도록 설정하는 파일은 /etc/fstab 이다.


공유폴더 접근 때에 id, pw, domain 필요 시 아래처럼 문서파일을 만든다.

(나의 경우는 /root/.credentials 에 만들었다.)


username=_____

password=_____

domain=_____


보안을 위해 # chmod 600 /root/.credentials 로 권한을 바꾼다.


이제 아래 문서에 마운트 정보를 입력하여 마운트한다.


# vi /etc/fstab

     16 //서버ip/data  /root/바탕화면/win      cifs    credentials=/root/.credentials  1 2


# mount -a

# df -h


# mount -a 명령어를 통해 마운트 되었으며 #df -h 명령어를 통해 확인 가능하다.

재부팅 후에도 여전히 마운트 되어 있는 것을 확인할 수 있다.


하지만 이 방법은 부팅이 느리다.


* autofs 방식을 쓰면 위와 같은 문제를 해결할 수 있으나 원하는 곳에 마운트가 힘들다는 단점이 있다.





[Tip]


아래 명령어를 통해 옵션에 대한 자세한 설명을 확인할 수 있다.


# man mount.cifs




And


[27] auto mount, 응급복구, nfs(1)

|


- 2014.12.12




1. auto mount


/etc/fstab : 중요파일, 백업 진행

# cp /etc/fstab /backup/


일반 mount 명령어는 다음과 같다.

# mount /dev/sda1 /mp


이 명령어를 분해해보면 /etc/fstab 안에 있는 내용도 쉽게 이해할 수 있다.



# vi /etc/fstab

     13 UUID=8e73b72d-7801-4d6e-8050-3bd32ca6c0c6 /var                    ext4    defaults        1 2

     14 UUID=1741a394-facf-4255-8708-a2b60775d79c swap                    swap    defaults        0 0


        UUID=8e73b72d-7801-4d6e-8050-3bd32ca6c0c6 : UUID=일련번호

        /var : mount point

        ext4 : 포맷형식

        defaults : 옵션. p107 참조

        0 : 가상메모리. 직접적으로 파일 만들 수 있는지 여부.

                1 : 직접적으로 파일 만들 수 있다.

        2 : 파일시스템 체크에 대한 여부. 부팅 할 순서라고 해도 된다.

                0 : 가상메모리, 1 : 최상위, 2 : 나머지 디렉터리




[복구 실습]


# vi /etc/fstab

여기에 있는 UUID 로 시작하는 내용물 삭제 후 재부팅하면 부팅 안되고 오류 메세지를 출력한다.


Ctrl + Alt + Insert 누르고 VMware 로고 뜨자마자 F2를 눌러 CMOS 메뉴로 들어간다.

(Tip_CMOS 는 ROM에 있으며 메인보드에 ROM이 박혀있다.)


CMOS 메뉴 중 Boot로 이동.

CDROM에 놓고 +를 눌러서 CDROM 을 맨 위로 올린다.

Exit Saving Changes 로 저장 후 종료


CDROM 으로 부팅 되면 3번째인 Rescue installed system을 선택하여 진행한다.

언어 : English

키보드 : us

네트워크 : no

복구모두 시작 : continue

chroot /mnt/sysimage 명령어 기억하기

shell, fakd, reboot 중 shell 선택


그러면 bash 쉘로 쉘 입력 가능하다.

/etc/fstab 내용물 수정 위해 /etc/fstab 보자.


# vi /etc/fstab


하지만 이상하다. cd 부팅에 대한 정보인듯 하다.

아까 메모해둔 명령어를 쳐보자.


# chroot /mnt/sysimage


sh 쉘(복구 전용 쉘)로 변경되었다.


# cp /backup/fstab /etc

(혹은 /backup/fstab 에 있는 내용을 /etc/fstab 으로복사)


재부팅 하려고 하는데 재부팅에 관련된 명령어가 안된다. (sh 쉘은 복구 전용 쉘이기 때문)

다시 bash 쉘로 돌아가자.


# exit




[문제]


automount -> /etc/fstab

ex)

/dev/sda1       /mp     ext4    defaults        1 2


- HDD(1G, IDE) : 100M, 200M, 200M, 300M, 200M

- mount point & users

        100M : Clang & clang1, clang2

        200M : Linux & linux1, linux2

        200M : Ms & ms1, ms2

        300M : Net & na, np

        200M : Anon


각 파티션은 모두 auto mount 설정(반드시 재부팅할것)

모든 설정 완료 후 사용자 생성 후 정상 로그인 되는지 확인




VMware 전원 off한 상태에서 1G Hdd 추가한뒤 전원 on


# fdisk -l

# fdisk /dev/sda


primary partition으로 1~3번 만든 후 4번에는 Extended를, Logical partition을 5~6번에 생성한다.


Command (m for help): n

p

Partition number (1-4): 1

First cylinder (1-130, default 1):

Using default value 1

Last cylinder, +cylinders or +size{K,M,G} (1-130, default 130): +100M


Command (m for help): n

p

Partition number (1-4): 2

First cylinder (14-130, default 14):

Using default value 14

Last cylinder, +cylinders or +size{K,M,G} (14-130, default 130): +200M


Command (m for help): n

p

Partition number (1-4): 3

First cylinder (39-130, default 39):

Using default value 39

Last cylinder, +cylinders or +size{K,M,G} (39-130, default 130): +200M


Command (m for help): n

e

Selected partition 4

First cylinder (64-130, default 64):

Using default value 64

Last cylinder, +cylinders or +size{K,M,G} (64-130, default 130):

Using default value 130


Command (m for help): n

First cylinder (65-130, default 65):

Using default value 65

Last cylinder, +cylinders or +size{K,M,G} (65-130, default 130): +300M


Command (m for help): n

First cylinder (104-130, default 104):

Using default value 104

Last cylinder, +cylinders or +size{K,M,G} (104-130, default 130):

Using default value 130


Command (m for help): p


Command (m for help): w


Mount point가 될 디렉터리 생성, 각각의 파티션 포맷.


# mkdir -p /Clang/home /Linux/home /Ms/home /Net/home /Anon


# mkfs.ext4 /dev/sda1

# mkfs.ext4 /dev/sda2

# mkfs.ext4 /dev/sda3

# mkfs.ext4 /dev/sda5

# mkfs.ext4 /dev/sda6


/etc/fstab 파일을 auto mount를 위해 추가한다.


# vi /etc/fstab

  19 /dev/sda1   /Clang  ext4   defaults   1 2

  20 /dev/sda2   /Linux  ext4   defaults   1 2

  21 /dev/sda3   /Ms     ext4   defaults   1 2

  22 /dev/sda5   /Net    ext4   defaults   1 2

  23 /dev/sda6   /Anon   ext4   defaults   1 2


(Tip - # blkid 명령어를 통해 UUID 명령어를 본 뒤 장치명에 UUID="장치의UUID" 를 넣어도 된다.)


# mount -a

# reboot


# useradd -d /Clang/home/clang1 clang1

# useradd -d /Clang/home/clang2 clang2

# useradd -d /Linux/home/linux1 linux1

# useradd -d /Linux/home/linux2 linux2

# useradd -d /Ms/home/ms1 ms1

# useradd -d /Ms/home/ms2 ms2

# useradd -d /Net/home/na na

# useradd -d /Net/home/np np


# passwd clang1

# passwd clang2

# passwd linux1

# passwd linux2

# passwd ms1

# passwd ms2

# passwd na

# passwd np





[Trouble Shooting]


/etc/fstab에 일련번호가 아닌 장치명으로 썼기 때문에 재부팅 시 부팅이 실패할 수도 있다.

복구모드에서 # chroot /mnt/sysimage 시 readonly로 뜰 때

bash쉘에서 /mnt/sysimage 를 언마운투 후 다시 마운트 하면 readonly가 풀린다.


# df -h

# umount /mnt/sysimage

# mount /dev/sdb7 /mnt/sysimage


다시 # chroot /mnt/sysimage 들어가서 복구 진행.





2. nfs


NFS : Network 를 통해 File System 빌려주는 것

        File system(=partion)

        runlevel 2 : multi user 지원하지만 nfs 지원 안하는 것.

썬 마이크로 시스템즈에서 파일시스템 공유와 서버 자원 공유를 위해 1980년대 후반에 NIS(Network Information Service)와 함께 개발되어졌다.



[장점]


분산되어 있는 데이터를 중앙 집중적으로 관리 가능 : 1개의 파일 서버에서 파일들을 관리할 수 있기 때문

투명성 확보 및 디스크 절약이 가능 : 관리자에 의해 파일이 관리되며, 공간을 쪼개어 사용하기 때문

자료의 일관성과 신뢰성 제공 : 모든 파일을 한 서버에서 관리하기 때문




[실습]


CD 안에 있는 nfs* PKG 설치

=> 실습 환경에는 설치 되어 있음.


CentOS6 오면서 portmap은 기본 설치 되어있음.

=> rpcbind 로 대체됨



구체적인 실습은 다음 시간에 진행.




'Study > CentOS' 카테고리의 다른 글

[29] autofs(2), su - 명령어 제한  (0) 2015.04.04
[28] nfs(2), nfs auto mount, autofs(1)  (0) 2015.04.04
[26] vnc(2), vnc with ssh, ftp  (0) 2015.03.28
[25] vnc(1)  (0) 2015.03.28
[24] openSSH, system-config-firewall, scp, sftp  (0) 2015.03.28
And


[26] vnc(2), vnc with ssh, ftp

|


- 2014.12.11



1. vnc


[vnc 안될 때 대처 방법]


1) samadal(내가 사용하려는) 계정으로 로그인하여 vncpasswd 설정


2) /etc/sysconfig/vncserver 설정

     18 # VNCSERVERS="2:myusername"

     19 # VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -localhost"

     20 VNCSERVERS="1:root 2:samadal"

     21 VNCSERVERARGS[1]="-geometry 800x600"

     22 VNCSERVERARGS[2]="-geometry 800x600"


3) /etc/rc.d/init.d/vncserver restart

그래도 안될 시 4) 후 다시 시도


4) # killall -9 Xvnc   and  # rm -rf /tmp/.X*(or # reboot)




[telnet, ssh, vnc 비교]


                   telnet            ssh                 vnc

보안              취약            강함                취약

속도              빠름            빠름                느림

그래픽             X                X                    O

환경              TUI           CLI(=TUI)           GUI

프로그램       os기본       Linux 기본      P/G 별도설치





2. vnc with ssh


(위 까지의 설정이 완료 됬다는 가정 하에 진행한다.)

위에서 설정한 vnc는 보안에 취약하다. 이 점을 극복하기 위해 ssh를 이용한 vnc를 설명하려고 한다.

아래 설명하는 방법은 ssh tunneling 이라는 기술이며 이 경우 말고도 ftp 등 다양한 방법으로도 사용될 수 있다.


A PC에서 B PC로의 원격 접속을 SSH로 연결할 때의 원리는 다음과 같다.


                       A와 B 사이의 SSH 통로

A PC 서비스 --------------------------------> B PC 서비스


1) A와 B 사이의 SSH 연결

Windows에서는 putty 등의 프로그램, Linux에서는 자체 ssh 명령어로 A와 B사이를 SSH로 연결해둔다.

이 때 주의할 것은 일반적인 연결이 아닌 옵션을 통한 연결을 해야한다는 것이다.

여기서 주는 옵션은 A PC의 특정 포트와 B PC의 특정 포트를 연결하는 것이다. 여기선 각각 (a포트, b포트라 하겠다.)

putty 혹은 자체 프로그램으로 이러한 옵션이 설정되있는 SSH를 실행하여 로그인 한다.


2) 프로그램 실행

A PC의 a포트와 B PC의 b 포트가 ssh로 연결되었다.

이제 A PC의 실행하려는 프로그램에서 목적지 주소를 localhost:a 로 주면 이미 만들어진 ssh 통로를 따라

데이터가 암호화 된 상태로 B PC의 b 포트에 도착, 암호화를 풀어 B PC에서 정상 작동하게 되는 것이다.



[in Windows]


대표적인 프로그램인 putty를 예로 들겠다.

Remote 될 PC의 연결 설정을 load 한다.

좌측 메뉴의

Connention - SSH - X11 - Enable X11 forwarding 체크

    - Tunnels - Source port : localhost에 연결될 포트(a) 입력

    - Destination : serverip:port

Session - Save

설정한 뒤 Open을 눌러 연결 해놓은 상태에서 vncviewer 프로그램 실행하여 serverip:포트(a) 를 입력하면 된다.



[in Linux]


# ssh -NfL 3020:localhost:5901 -N -f -l id 192.168.1.1

-Nf : SSH 연결 하지 않고 Background 에서만 연결 되어 있도록 설정. 원격 커맨드 명령을 진행하려면 # ssh id@ip 명령어 입력.

-L 3020:localhost : localhost 의 5901번 포트를 ssh로 열어두겠다는 뜻.

5901 : Remote 될 PC에서 사용중인 포트번호.

-l id : ssh 인증 위한 id

192.168.1.100(sshserver.mydomain.com) : Remote server ip


vncview program 실행하여 localhost:3020 으로 접속.



[trouble shooting]


1) -bash: ssh: command not found

openssh clients 설치가 안되서 그렇다. yum install -y openssh clients 진행.





3. ftp


ftp : File Transfer Protocol의 약자로 TCP/IP 환경에서의 파일 전송용 Application Protocal 이다.



[종류]


- 시스템에 등록되어 있는 사용자들을 위한 FTP Service

- 익명의 모든 사용자에게 개방하는 익명(Anomyous) FTP Service



[vsftpd 서버 설정]


아래 파일들이 핵심 파일들이다.


/etc/vsftpd/vsftpd.conf   :      vsftpd의 메인 환경 설정 파일

/usr/sbin/vsftpd             :      vsftpd의 실행파일

/etc/rc.d/init.d/vsftpd     :      vsftpd의 데몬파일



[/etc/vsftpd/vsftpd.conf]


vsftpd 설치가 우선이지만 내가 실습하는 환경에선 이미 설치되어있다.


실습 전에 백업하는 습관 갖기

# cp /etc/vsftpd/vsftpd.conf /backup/



* 익명연결

웹 브라우저에 ftp://자신의ip 혹은 alftp 로 익명연결하면 연결된다.

이 것은 아래에 것으로 설정 변경

12번줄 YES -> no


# vi /etc/vsftpd/vsftpd.conf

     12 anonymous_enable=no

     13 #


설정 변경 뒤에는 재시작 해야한다.

# /etc/rc.d/init.d/vsftpd restart


이젠 웹으로 시도 시 암호창을 띄우게 되고, alftp로는 접속이 안된다.

이젠 계정을 입력해서 접속하면 된다.

samadal 계정으로 접속 하면 업로드, 다운로드, 삭제 등이 가능하다.




* write 권한 no

ftp로 보는 것과 다운로드만 되고 쓰는 것(업로드 및 삭제, 수정)은 안되게 설정 변경

18번줄 YES -> no


# vi /etc/vsftpd/vsftpd.conf

     18 write_enable=no

     19 #




* 모든 유저 접속 막기

/etc/passwd 파일에 존재하는 사용자들의 접속을 막는 것 설정

15번줄 Yes -> no


# vi /etc/vsftpd/vsftpd.conf

     15 local_enable=no

     16 #




* 익명사용자 권한 부여

익명 접속자에게 업로드 및 디렉터리 생성을 가능하게 하는 설정 (삭제는 불가)

27, 31번줄 : 주석 해제

# vi /etc/vsftpd/vsftpd.conf

     27 anon_upload_enable=YES

     28 #

     29 # Uncomment this if you want the anonymous FTP user to be able to create

     30 # new directories.

     31 anon_mkdir_write_enable=YES


하지만 역시나 실패. pub 디렉터리에 o+w 권한을 줘야할 것 같다.

아래처럼 권한을 줘가면서 테스트 해보자.

/var/ftp/       /var/ftp/pub/

755             755 - 접속 가능, 업로드 및 다운로드 불가

                  757 - 접속 가능, 업로드 및 다운로드 가능

757             755 - 접속 불가

                  757 - 접속 불가


익명의 ftp 서버에선 /var/ftp/ 가 최상위이다.

그런데 익명의 사용자에게 /vaf/ftp/ 에 7 권한을 준다는 것은 root 권한이나 마찬가지다.

그렇기 때문에 접속 자체를 막는 것이다.


일부 사용자의 경우 SELinux 때문에 실패 할 수도 있다. (나는 iptables 서비스를 꺼두었다. 미니멀에선 기본설정이다.)

그 때엔 아래 명령어로 해결 가능할 수도 있다.


# setsebool -P ftp_home_dir=1

# setsebool -P allow_ftpd_full_access on

# setsebool -P ftp_home_dir on




* umask

업로드 및 다운로드 시 파일에 대한 권한 설정 - umask

     21 # if your users expect that (022 is used by most other ftpd's)

     22 local_umask=022

     23 #




* 접속 메세지

ftp 접속 시 메세지를 띄울 때 사용. 로그인하는 계정의 $HOME 에 .message 로 문서파일 만들면 됨

Alftp 의 경우 환경설정에서 알림창에 관한 설정 해줘야 함


     35 dirmessage_enable=YES

     36 #




* Active/Passive Mode 설정

ftp 서버는 별도의 데이터 전송 포트를 이용하는데 이 때 사용할 포트번호를 지정하는 옵션


     42 connect_from_port_20=YES

     43 #


Active : Client가 접속하고 싶은 포트로 접속

Passive : Server에서 지정해주는 포트로 접속하라고 알려줌




* log 기록 남기기(xferlog)

기본 저장 위치는 /var/log/xferlog 이고 저장되는 파일 명 변경 원할 때 설정


     51 # WARNING - changing this filename affects /etc/logrotate.d/vsftpd.log

     52 #xferlog_file=/var/log/xferlog

     53 #




[log 기록 분석 실습]

(p287 ~ 288 참조)


dvd/Packages/mysql*  -> ~samadal/ 로 복사

Alftp 로 d: 에다가 다운로드

~samadal 안에 있는 mysql* 삭제

다시 d:에 있는 mysql*을 ~samadal로 업로드


# vi /var/log/xferlog


Thu Dec 11 14:29:03 2014 1 192.168.1.1 9221512 /export/home/samadal/mysql-server-5.1.73-3.el6_5.i686.rpm b _ o r samadal ftp 0 * c

        Thu Dec 11 14:29:03 : 접근시간

        1 : 작업시간

        192.168.1.1 : 접속 ip

        9221512 : 용량

        /export/ho~ : 파일명

        b:바이너리파일

                일반 문서파일: a(아스키)

        o:outgoing(=downlod)

i: incoming(=upload)

r samadal : /etc/passwd 에 있는 samadal 로 접속

        a ? : 익명연결

ftp : ftp로 접속

0 : 인증방식, None (1 = rfc931)

          (rfc : 접속하는 방법들을 문서화, 931 : 일련번호)

c : complete(성공)

        i : incomplete(실패)




* vsftpd 방식 log

기본(xferlog)방식 : upload & download 만보여짐

xferfog 표준 포맷은 사용자의 로그인, 디렉터리 생성 등의 로그를 남기지 않지만 vsftpd 로그 기록 방식은 이를 포함한 보다 상세한 로그를 남길 수 있다.


     56 xferlog_std_format=YES

     57 #

no 로 바꾸고 재시작, 업로드 및 다운로드 진행


# vi /var/log/vsftpd.log

Thu Dec 11 14:47:16 2014 [pid 7515] [samadal] OK DELETE: Client "192.168.1.1", "/export/home/samadal/mysql-server-5.1.73-3.el6_5.i686.rpm"

=> vsftp 방식으로 로그 기록 남김




* idle_session_timeout

사용자가 ftp 접속 후 일정 시간 동안 아무런 작업을 하지 않으면 자동으로 접속을 끊게 되는데 이때 설정하는 시간. 단위는 초


     58 # You may change the default value for timing out an idle session.

     59 #idle_session_timeout=600




* date_connection_timeout

ftp 서버로부터 데이터 전송이 끝난 후에 또 다른 데이터의 전송이 이루어지지 않을 경우의 종료 대기시간. 단위는 초


     61 # You may change the default value for timing out a data connection.

     62 #data_connection_timeout=120




* 최상위로의 폴더 탐색 금지, 접근한 곳 외에 대한 접근 금지

접속하면 최상위로 접근하여 어디든 갈 수 있다.

거기에 /etc/passwd 파일 등의 것을 다운로드 가능하다. - 보안상 취약

접근한 곳 외에 접근 금지하게끔 하는 것, vsftpd 서버 설정 중 가장 먼저 해야 할 것이다.

96번줄 : 주석 풀기


     95 # users to NOT chroot().

     96 #chroot_local_user=YES

     97 #chroot_list_enable=YES

     98 # (default follows)

     99 #chroot_list_file=/etc/vsftpd/chroot_list

    100 #


하지만 가끔은 필요한 계정도 필요할것.

97과 99가 한 쌍으로 움직여 해당 기능 실행한다.




[실습]


위 설정 파일에서 97, 99번줄 주석 해제

user1 계정 생성

아직 데몬 재시작 안했다. alftp 통해 user1 으로 접속해보자

하지만 접속이 안되는데, 그 이유를 보니 chroot_list 를 읽을수 없다고 뜬다.


# cat > /etc/vsftpd/chroot_list

samadal


으로 samadal 을 해당 리스트에 올리니 samadal 로 접속 시 최상위까지 다 보인다.

user1으로 해보니 역시 자기 홈 디렉터리뿐이 보이지 않는다.





* ftp를 xinetd(슈퍼 데몬) 관리 하에 두기

110번 줄을 no 로 바꾸면 xinetd 를 거쳐 접속하게 된다.


    110 listen=YES

    111 #




* 접근 금지 host 목록

# vi /etc/hosts.deny


데몬명:ip:allow(혹은 deny)


ex)

vsftpd:192.168.1.*:deny

all:all:deny    <- 모든 프로그램에 대하여 거절, putty도 사용 불가


# vi /etc/hosts.allow 가 존재하며, 접근 허용하는 목록도 작성 가능하다.

기본적으로 막는 것이 우선 이지만 같은 ip를 allow나 deny 2군데 모두 쓰면 allow가 되어버린다. 그러니 deny 만 건드리는 것이 좋다.




[문제]


기본으로는 root의 ftp 접속이 막혀있다.

교재 참조하여 root의 ftp 접속을 허용해보자.


# vi /etc/vsftpd/user_list

# vi /etc/vsftpd/ftpusers


에서 root 앞에 주석 붙이면 된다.

거기에 root이니 모든 디렉터리 접근 가능하게 설정하자.


# vi /etc/vsftpd/chroot_list


루트가 구지 ftp 서버를 이용할 필요는 없으니 실습 후에는 루트에게 허락한 권한 모두 수거.




[vsftpd 추가 옵션]


* 익명 사용자 최대 전송 속도 제한

익명 계정 접근 시 다운로드할 수 있는 최대 전송속도. 0은 제한 없음이며 단위는 bps


anon_max_rate=0




* 로컬 사용자 최대 전송 속도 제한

로컬 계정 접근 시 다운로드할 수 있는 최대 전송속도. 0은 제한 없음이며 단위는 bps


local_max_rate=0




* 최대 접속자수 제한

최대 접속자수 지정 옵션, 접속할 수 있는 최대 client 수 제한


max_clicnets=0




* 접속 최대 횟수 제한

client 호스트당 접속할 수 있는 최대 회수 제한


max_per_ip=0




* 익명 사용자가 사용할 홈 디렉터리 지정

anon_root=/var/ftp




'Study > CentOS' 카테고리의 다른 글

[28] nfs(2), nfs auto mount, autofs(1)  (0) 2015.04.04
[27] auto mount, 응급복구, nfs(1)  (0) 2015.03.28
[25] vnc(1)  (0) 2015.03.28
[24] openSSH, system-config-firewall, scp, sftp  (0) 2015.03.28
[23] xinetd, telnet, krb5-telnet  (0) 2015.03.28
And