ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Windows 클라이언트 , Linux 서버 간의 SMB (공유파일) 설정방법 (100% 구동확인) (1)
    개발/개발환경구축 2020. 3. 10. 17:22

     

    본 내용은 클라우드 서버를 이용한 리눅스와 윈도우 간의 공유폴더 연결을 다루고 있습니다.

    만약 클라우드 환경이 아닐 경우, 본문의 내용중의 리다이렉트 작업은 필요 없을 수도 있습니다.

     

    +2022-11-20 필요없는 내용 생략 및 문맥 대량 수정


    1.Windows 에서 리눅스에 ssh 접속

     

    Windows 는 10 환경 기준으로

    Linux 는 AWS 의 EC2 Linux 환경을 기준으로 작성되었습니다.

     

    환경이 달라도 저 환경보다 어려울 수는 없으니 따라하면 무조건 될껍니다.

     

    일단 윈도우에 ssh먼저 깔아봅시다.

     

    https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

     

    puTTy 입니다.

     

     

     

    자신의 리눅스 ip를 입력하고 서버에 접속해 줍니다.

    VMWare로 접속해있다거나.. 다른 ssh를 쓰신다면

    그냥 그거 쓰시면 됩니다.

     

    단. 필자의 방법은 나중에 ssh가 반드시 필요합니다.

     


    ⑴VMWare 사용자

     

    VMWare 로 리눅스 가상환경에 접속할 수 있다면

    ssh 로 접속하기보단 공유파일 설정만 건드리는 쪽이 좋다고 생각합니다.

     

    그럼에도 본 글의 방법을 따라오고 싶다면,

    VMWare 프로그램 내부에서 ip를 할당 받아 온 뒤에

    방화벽을 개방합니다.

     

    sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT 

    sudo iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT 

     


    ⑵클라우드 사용자

     

    만약에 AWS를 사용하면서 사용하던 키가 있다면 등록 해야합니다.

    없다면 넘어갑니다.

     

    먼저 puTTygen.exe 를 실행하세요.

     

     

    Load > 우측하단에 파일 필터를 All Files 로 바꾸시고 키파일을 등록하세요 (아마 pem파일 입니다.)

     

     

    이제 Save private key 버튼을 눌러서 ppk 파일을 저장합니다.

     

     

    여기 Auth 의 Browse 버튼을 눌러서 ppk 파일을 등록하고 실행하면 됩니다.

     

    aws 인스턴스를 사용 중이라면 유저명은 ec2-user

    오라클 클라우드를 사용 중이라면 유저명은 opc 입니다.

     


    2.리눅스 설정

     

    (이후부터 괄호안의 내용은 치면 안됩니다.)

    처음으로 접속에 성공 했다고 가정하여 먼저 관라자 모드의 비밀번호를 지정해야합니다.

    >sudo passwd root

    >su(비밀번호를 입력후 관리자 모드로 변경)

     

    여기서 만약 관리자 모드로 변경이 막혀있어서 실패했다면,

    이후 앞으로 모든 명령어 앞에 sudo 를 붙여주면 됩니다.

    저는 여러분의 혹시 모를 참사를 위해서 저는 앞으로 모든 명령어에 sudo를 붙혀두겠습니다.

     


     

    3.공유폴더 설치

     

    리눅스 운영체제에 따라서 명령어의 차이가 존재합니다.

     

    ㅇCenterOS 및 클라우드 제공 OS

     

    >sudo yum -y install samba(server message block 서비스 설치)

     

    혹시라도 yum 으로 해당 패키지가 설치되지 않는다면

    다운로드 경로의 서버가 이미 닫은 상태거나 방화벽의 문제일 가능성이 있습니다.

     

    다운로드에 문제가 발생했어요!

    더보기
    ⑴다운로드 경로에 문제가 있을경우
    yum은 repo.d 라는 폴더 안에 각종 패키지의 다운로드 경로를 적어둔 파일들이 존재합니다.
    만약 다운로드 서버가 닫혀있거나 오류가 있을 경우
    repo안의 내용물을 수동으로 바꿀 필요가 있습니다.
    +클라우드 환경의 os 환경은 보통 red hat 입니다.

    >yum repo 경로 설정 방법

    >베이스 경로를 kakao로 변경

    repo.d 폴더로 이동하는 방법
    cd /etc/yum.repos.d

    폴더안의 내용을 확인하는 방법
    ls

    vi 편집기(즉, 메모장) 을 열고 내용을 수정하고 저장하는 방법
    sudo vi 새롭게 만들 레포지토리.repo
    sudo vi 수정할 레포지토리이름.repo
    shift + i = 내용 수정
    esc = 수정모드 빠져나오기
    :wq! = 저장하고 종료
    :q! = 저장하지 않고 종료

    ⑵방화벽에 의해 접근이 차단된 경우

    iptables -F

    위의 명령어는 방화벽의 모든 설정들을 백지화합니다.

     

    Ubuntu:

     

    >sudo apt-get upgrade(설치툴의 설치가능 목록을 최신화)

    >sudo apt-get install samba(server message block 서비스 설치)

     

     


    4.공유폴더 경로 만들기

     

    smb에서 공유할 폴더를 만들겠습니다.

    >sudo cd /etc

    >sudo mkdir smbFolder(현재 접속해 있는 경로에 smbFolder 폴더를 만듭니다.)

    >sudo chmod 777 smbFolder(외부에서 폴더를 쓰고 읽고 수정하는 권한을 부여해줍니다.)

    >cd smbFolder(만든 폴더 내부로 들어갑니다.)

    >pwd(현재 자신이 있는 폴더 경로를 표기해 줍니다.)

     

    여기에서 pwd 는 사용환경에 따라서 작성자와 다르게 표기 될수 있습니다.

    작성자의 경우 /etc/smbFolder 의 경로가 나와 있습니다.

    pwd로 나온 값은 이 다음의 smb 설정 파일을 수정할때 필요 하므로 기억해둡니다.

     

    만약 클라우드 서버 이용자라면 /home 안에 폴더를 만들지 않게 주의해주시길 바랍니다.

     

    /etc 하고 /home 경로를 넘나드는것이 귀찮은 것은 인정합니다.

    하지만 home경로에 접속하려면 Key인증을 거치게 설정 되어있고 (ssh 접속할때 했던 키 인증)

    이는 공유폴더를 통해서 home경로에 접속할때도 포함됩니다.

    공유폴더 사용에 키인증을 하는것은 불가능하므로

    /home 경로를 사용하는 유일한 방법은 777로 해제하는 것이며,

    물론 권한이 이렇게되면 이후 EIP를 통한 ssh 접속이 불가능합니다.

     

    ===

    혹시 모르니 방법은 알려 드리겠습니다.

    다만 , 작성자는 권하지 않으며

    이후 권한을 복구하지 않고 접속을 종료해서

    연결이 차단되는 책임은 본인에게 있음을 명심합시다.

    후술한 .ssh 경로에 키가 온전히 존재하는지 먼저 확인하시길 바랍니다.

     

    권한 해제

    >sudo chmod 777 /home/ec2-user

     

    권한 복구

    >sudo chmod 600 /home/ec2-user/.ssh/authorized_keys

    >sudo chmod 700 /home/ec2-user/.ssh

    >sudo chmod 700 /home/ec2-user

     

     

    만약에 권한 복구를 깜박하고 ssh 종료를 해버렸다면,

    EBS를 떼서 새 EC2에 마운트한 뒤에 위의 복구 명령어를 실행해야합니다.

     


    5.공유폴더 설정

     

    이제 smb 설정 파일을 만집니다.

     

    >sudo vi /etc/samba/smb.conf

     

     

    아래의 화면이 보여야 합니다. (2020-03-10 일 기준으로 아직 수정 안한 첫 실행시의 모습입니다.)

     

    # See smb.conf.example for a more detailed config file or
    # read the smb.conf manpage.
    # Run 'testparm' to verify the config is correct after
    # you modified it.

    [global]
            workgroup = SAMBA
            security = user

            passdb backend = tdbsam

            printing = cups
            printcap name = cups
            load printers = yes
            cups options = raw

    [homes]
            comment = Home Directories
            valid users = %S, %D%w%S
            browseable = No
            read only = No
            inherit acls = Yes

     

    [printers]
            comment = All Printers
            path = /var/tmp
            printable = Yes
            create mask = 0600
            browseable = No

    [print$]
            comment = Printer Drivers
            path = /var/lib/samba/drivers
            write list = @printadmin root
            force group = @printadmin
            create mask = 0664
            directory mask = 0775

     

    만약 관리자권한이 아니라면 글씨들이 흑백이 아니라 컬러풀하게 보입니다.

    이경우 :q! 엔터 입력하고 나와서 sudo 를 빼먹지 말고 다시 입력해줍니다.

     

    이제 파일을 수정합니다.

    shift i 를 입력하면 수정모드로 들어갑니다.

     

    [global] 에서 수정합니다.

     

    [global] 
            workgroup = WORKGROUP 

            smb ports =445

     

     

    윈도우 클라이언트 측에서 내 PC > 속성 탭으로 들어가면 작업그룹이 있습니다.

     

    windows의 기본값은 WORKGOUP 이지만. 수정하셧다면 맞춰서 작성하시길 바랍니다.

     

    smb는 기본적으로 tcp 139 혹은 445번을 사용합니다. 

    smb ports =445 를 적는 이유는

    이후 아래의 과정에 있는 리다이렉트 과정에서 혼선을 주지 않기 위해서 입니다.

     

    만약에 가상환경 리눅스 혹은 실제 개인 컴퓨터 리눅스 등의 경우라면

    리다이렉트가 필요 없으니 적지 않습니다.

     

    이제 엔터,탭을 누른뒤

     

    [print$] 
            comment = Printer Drivers 
            path = /var/lib/samba/drivers 
            write list = @printadmin root 
            force group = @printadmin 
            create mask = 0664 
            directory mask = 0775

     

    이 아랫줄에 다음 문구를 추가해 줍니다. (정확히는 이 파일 문구의 맨 아래에. 꼭 print$ 아래일 필요는 없습니다.)

     

    아래의 <내용> 에는 자신이 적고 싶은 문구를 적습니다.

     

    예제:

    [smb]
            commnet = smb root
            path = /home/ec2-user/smbFolder 
            valid user = smb
            create mask = 0777
            directory mask = 0777
            security mask = 0777
            directory security mask = 0777

            read only = no

     

    [<사용할 smb의 이름!꼭 기억해두세요!>]

            comment = <이 smb에 대한 설명>
            path = <pwd로 출력된 smb의 폴더 경로> 
            valid users = <smb를 사용할 유저의 이름을 아무거나 씁니다. !꼭 기억해두세요!
            create mask = 0777 (파일 안을 읽고 쓰고 수정하는 권한을 부여)
            directory mask = 0777(파일을 읽고 쓰고 수정하는 권한을 부여)
            security mask = 0777(create mask와 기능이 동일하지만 더 높은 우선순위. 보통은 global에 씁니다)
            directory security mask = 0777(directory mask과 기능이 동일, 설명생략)

            read only = no(mask들보다 더 우선시 되는 권한입니다. 안쓸경우 읽기만 가능합니다.)

     

    수정이 완료되면 ESC를 눌러서 수정모드를 나온뒤

    :wq! 를 입력하여 현재 정보를 저장한뒤 빠져 나옵니다.

     

    작성자의 경우 다음과 같습니다.

     

    # See smb.conf.example for a more detailed config file or 
    # read the smb.conf manpage. 
    # Run 'testparm' to verify the config is correct after 
    # you modified it. 

    [global] 
            workgroup = WORKGROUP 

            smb ports = 445 
            security = user 

            passdb backend = tdbsam 

            printing = cups 
            printcap name = cups 
            load printers = yes 
            cups options = raw 

    [homes] 
            comment = Home Directories 
            valid users = %S, %D%w%S 
            browseable = No 
            read only = No 
            inherit acls = Yes

     

    [printers] 
            comment = All Printers 
            path = /var/tmp 
            printable = Yes 
            create mask = 0600 
            browseable = No 

    [print$] 
            comment = Printer Drivers 
            path = /var/lib/samba/drivers 
            write list = @printadmin root 
            force group = @printadmin 
            create mask = 0664 
            directory mask = 0775

     

    [smb] 
            commnet = smb root 
            path = /home/ec2-user/smbFolder 
            valid users = smb 
            create mask = 0777 
            directory mask = 0777 
            security mask = 0777 
            directory security mask = 0777 

     

     

    이제 마지막으로 체크해봅시다.

    혹시 valid users 를

    valid user 혹은 vaild users 로 적지는 않았는지,

     

    smb ports 를 smb port 라고 적지는 않았는지, 확인합니다.

     


    6.아이디와 비밀번호 설정

     

    이제 공유폴더에 들어갈 유저를 설정을 합니다.

     

    <smb>는 위의 smb.conf 파일의 valid users 에 적었던 이름을 사용해야 합니다.

    예제: sudo adduser smb

     

    >sudo adduser <smb>(Linux 계정을 새롭게 하나 추가)

    >sudo passwd <smb>(Linux 계정의 패스워드를 지정.. 안해도 됩니다.)

    >sudo -a smbpasswd  <smb>(-a는 smb에 계정을 추가, 패스워드를 설정)

     

    만약 관리자 모드라면 대신 이렇게 칩니다.

    >smbpasswd -a <smb>

     

    이제 설정을 적용하기 위해서 smb를 재시작/시작 합니다.

     

    CenterOS 및 클라우드 제공 OS:

     

    >sudo service smb start(혹은 restart)

     

    Ubuntu:

     

    >sudo /etc/init.d/smbd restart(혹은 restart) 

     

     

    추가로 sudo service smb status 를 입력해보면

    설정파일 건드렸을때 오타가 난 부분이 있다면 특정 부분에서 읽기에 실패했다는 문구가 뜹니다.

    (필요하다면) :q 를 입력해서 밖으로 빠져 나올 수 있습니다.

     


    7.방화벽 개방 및 포트 리다이렉트

     

    여기에서 사용할 iptables는 Ubuntu의 경우 버전에 따라서 설치가 되어있지 않을 수 있습니다.

    iptables 가 없다면 다음 문구를 입력합니다.

     

    >sudo apt-get install iptables-persistent netfilter-persistent

     

    이제 방화벽 포트를 개방하겠습니다.

    <포트번호> 에는 자신이 원하는 1000~약 65535 사이의 포트번호 중에 원하는 번호를 적으시면 됩니다.

     

    https://m.blog.naver.com/PostView.nhn?blogId=zerogo&logNo=220738577430&proxyReferer=https%3A%2F%2Fwww.google.com%2F

     

    포트(Port)의 종류

      1. System Port (= well-known Port)    - 잘 알려진 포트    - 범위 : 0~1...

    blog.naver.com

     

    단, 이 홈페이지에 적혀있는 포트 번호들을 제외하고 중복되지 않게 정하는 것이 좋습니다.

     

     

    방화벽을 개방합니다.

     

    예제:

    >sudo iptables -A INPUT -p tcp --dport 5445 -j ACCEPT 

     

    >sudo iptables -A INPUT -p tcp --dport 445 -j ACCEPT 

    >sudo iptables -A OUTPUT -p tcp --dport 445 -j ACCEPT 

    >sudo iptables -A INPUT -p tcp --dport <포트번호> -j ACCEPT 

    >sudo iptables -A OUTPUT -p tcp --dport <포트번호> -j ACCEPT 

     

    만약 클라우드 서버 이용자 라면

    이제 여기에서 임의로 정한 포트번호를 445번 포트로 REDIRECT 하겠습니다.

    이것이 무엇이고 왜 필요한지는 윈도우 클라이언트 측에서 설명하겠습니다.

    문구가 길기 때문에 틀리지 않게 조심해야 합니다.

     

    >sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport <포트번호> -j REDIRECT --to-port 445

     

    이제 내용을 저장하고 적용합니다. 

     

    CenterOS 및 AWS:

     

    >sudo iptables-save

     

    Ubuntu:

     

    >sudo netfilter-persistent save

     

    추후에 REDIRECT를  다시 삭제할 수 있습니다.

     

    >sudo iptables -t nat -L(현재 iptables의 설정들을 나열해 줍니다.)

    >sudo iptables -t nat -D PREROUTING 1(설정들 목록중에 PREROUTING 항목의 1열을 삭제합니다.)

    >sudo iptables -F (iptables 설정을 초기화합니다.)

     

    입력한 목록이 항목에 없어요!

    더보기
    혹시 sudo service iptables start 를 입력해서 실제로 실행된다면
    현재 사용하고 있는 iptables는 작성자와 다른 종류인 iptables-services 입니다.
    만약 iptables-services 를 삭제하고 싶다면
    sudo yum -y remove iptables-services 를 입력합니다.
    이경우 리눅스에 내장된 본래의 iptables 가 남습니다.

     


    8.바운드 설정

     

    만약에 클라우드 서버를 이용 하신다면 인바운드 설정을 확인해 줍니다.

    예시에서는 aws만 다룹니다.

     

     

    자신의 보안 그룹을 확인해서(작성자의 경우 launch-wizard-4)

    이 그룹 안에 위에서 열었던 455포트와 <포트번호>를

    launch-wizard-4안에 규칙을 추가하여 인바운드 규칙으로 tcp로 열어줍니다.

     


    서버의 설정이 끝났습니다. smb.conf 에서 작성했던

    [smb 이름] 과 유저 이름, smbpasswd 에서 설정했던 비밀번호를 기억해두고 윈도우 클라이언트 측으로 넘어갑니다.

    댓글

개발에 관심을 가지는 블로그