반응형

출처:

http://lesstif.com/pages/viewpage.action?pageId=6979732

http://duellist.tistory.com/entry/Samba-%EC%84%A4%EC%B9%98

http://webdir.tistory.com/170

http://wiki.centos.org/HowTos/SetUpSamba

http://troy.jdmz.net/samba/fw/

http://serverfault.com/questions/433973/why-is-this-iptables-file-line-failing-in-centos-6

http://superuser.com/questions/583868/windows-7-cannot-access-samba-share-error-53-and-network-path-was-not-found


친구에게 받은 컴퓨터에 CentOS 설치도 되었으니 본래 목적인 Samba를 설치할려고 했다.

나는 이미 우분투에서 삼바를 설치해본 경험이 있기 때문에 쉽게 되리라고 예상했다.

그러나 나의 삽질 본능은 어디 가지 않는지 제대로 되먹지 않았다.


중간에 두 번 정도 된 적은 있었으나, 다시 한 번 확인 해볼려고 이것저것 또 건드려보니 또 안 되었다.

그런 무수히 많은 삽질 끝에 얻어낸 결론은 리눅스 방화벽 SELinux 때문이었다.

아까 말했던 그 두 번의 경우는 SELinux를 끄거나 규칙을 날려먹으면 되는 거였다.


근데 어떻게 이 무서운 세상에서 방화벽을 끄고 살 수 있단 말인가.

그래서 방화벽 규칙을 설정하는 부분이 있어서 그걸 건드려보았다.


1. 먼저 root 권한으로 /etc/sysconfig/iptables

아무 에디터로(그래봤자 vi 종류일 거 같지만) 연다.


2. 다음 문장을 추가한다.

이것은 체인(chain)이라고 하는데 네트워크 트래픽이 수행할 규칙을 명시해놓은 거라고 한다.


-A INPUT -s 192.168.0.0/24 -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
-A INPUT -s 192.168.0.0/24 -m state --state NEW -m udp -p udp --dport 445 -j ACCEPT

-A INPUT -s 192.168.0.0/24 -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
-A INPUT -s 192.168.0.0/24 -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
-A INPUT -s 192.168.0.0/24 -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT


위에 써놓은 출처 블로그에도 잘 설명되어있지만 앞의 첫문장만 해석해보면

"프로토콜이(-p) TCP와 일치하고(-m) 주소가 192.168.0.x/24와 일치하는(-s) 곳에서 오는

호스트 컴퓨터(그러니까 OS가 설치된 녀석)의 445 포트로(--dport) 들어오는(INPUT)

새 연결 요청(NEW) 패킷을 허용(ACCEPT)한다.(-j)"

나머지 것도 비슷하므로 굳이 설명은 더 필요할 것 같진 않다.


이 문장은 문장 뒤에 추가하면 안 되고 ~~ -j REJECT보다 앞에 추가시켜야 한다.

그렇지 않으면 애써 적어놓은 규칙을 "좆까세요, 나는 생깔렵니다."하고 무시 해버린다.

만약 -j REJECT가 없으면 COMMIT 앞에 붙여야 한다.

COMMIT 뒤에다 붙이는 것은 선사 시대 언어로 "뒷북을 친다"는 것과 같다.

이미 규칙을 제출했는데 뒤에 말해서 뭐하겠는가.


3. 규칙을 저장했으면 service iptables restart로 iptables를 재시작한다.


4. 그리고 SELinux에서도 설정을 손봐야 한다.

semanage 명령어로 다음과 같이 입력한다.

이거 입력하지 않으면 열어봤자 아무 것도 안 보인다고 한다.

물론 <shared path>는 공유하고자 하는 디렉토리를 입력해야 한다.

나처럼 무식하게 저거 그대로 치면 안 된다.


semanage fcontext -a -t samba_share_t '/<shared path>(/.*)?'
restorecon -R /<shared path>


만약 semanage 명령어가 없다면 따로 설치해야 한다.


yum provides /usr/sbin/semanage

yum -y install policycoreutils-python


다음 두 명령어로 semanage 명령어도 추가한다.

이렇게 했는데도 불구하고 윈도우에서는 시스템 오류 58이라는 괴랄해보이는

(애초에 잘 안 나오는 녀석인지 구글링해도 잘 안 나왔다.)

녀석이 튀어나왔다.


그래서 원인이 뭔가 한참을 삽질을 한 끝에 어제 무수히 많은 삽질 중 하나인

/etc/samba/smb.conf의 global 필드의

interfaces와 host allows의 주석을 제거하고 활성화한 거 때문이었다.

내 주소와 일치하는 IP 주소라면 될런지도 모르겠지만,

일치하지 않았기 때문에 계속 오류가 나온 거였다.

이를 다시 주석 처리하니까 다시 samba가 정상적으로 작동하면서

윈도우에서도 접근이 가능해졌다.

반응형
Posted by 애콜라이트
l

free counters