-
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 = WORKGROUPsmb 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 = 0777read 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 = WORKGROUPsmb 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 사이의 포트번호 중에 원하는 번호를 적으시면 됩니다.
단, 이 홈페이지에 적혀있는 포트 번호들을 제외하고 중복되지 않게 정하는 것이 좋습니다.
방화벽을 개방합니다.
예제:
>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 에서 설정했던 비밀번호를 기억해두고 윈도우 클라이언트 측으로 넘어갑니다.
'개발 > 개발환경구축' 카테고리의 다른 글
[Linux] Database 설치 및 설정 (0) 2021.10.25 [Windows] ECLIPSE 에서 JAVA,TOMCAT, Git, Spring 설정 (0) 2021.10.22 [Linux] 아파치(Apache) 설치 & https 설정 & 톰캣(Tomcat) 설정 (0) 2021.10.10 Windows 클라이언트 , Linux 서버 간의 SMB (공유파일) 설정방법 (100% 구동확인) (3) (0) 2020.03.13 Windows 클라이언트 , Linux 서버 간의 SMB (공유파일) 설정방법 (100% 구동확인) (2) (3) 2020.03.11