tl;dr: read this answer.

간만에 홈서버에 SSH로 접속하자 Ubuntu 15.10으로 업데이트를 권하더군요. 저는 가벼운 마음으로 업데이트를 실행했습니다. 그리고 이런저런 트러블슈팅을 해야했죠.1 그중에 가장 끔찍했던 것이 바로 Samba, 파일 공유 서버입니다.

Samba?

Samba는 linux와 다른 운영체제간에 파일 공유를 할 수 있게 해주는 서버입니다. Windows의 폴더 공유의 확장판 같은 느낌이죠.

재시작 명령어부터 남달랐다.

Ubuntu 15.04 이후로 대부분의 서버 데몬들은 systemd에 기반해서 이런 식으로 재시작이 가능합니다.

$ sudo systemctl restart nginx

하지만 samba는 남달랐습니다. samba를 재시작 하시려면 이렇게 하셔야 합니다.

$ sudo /etc/init.d/samba restart

아무래도 아직 upstart를 사용하는 모양입니다.

Console로 Samba 테스트하기

하지만 samba를 아무리 재설치하고 재실행해도 제 맥북에서 접속이 안되더군요. 이게 samba의 문제인지, ubuntu의 문제인지 진단이 필요했습니다. 그래서, ubuntu에 samba 클라이언트를 설치해보기로 했습니다.

$ sudo apt-get install smbclient

samba-client가 아닌지는 저도 모릅니다.

서버에 어떤 것들이 띄워져 있는지는 이렇게 확인 가능합니다

$ smbclient -L localhost -U item4

여기서 item4 자리에 자신의 user를 넣으면 됩니다.

서버에 접속은 이렇게 합니다

$ smbclient //localhost/myshare -U item4

여기서 myshare 자리에 자신의 공유 이름을 넣으면 됩니다. (smb.cnf를 참조하세요.)

그런데, 아무리 해도 NT_STATUS_ACCESS_DENIED 라는 에러가 나왔습니다.

유저가 없나?

가장 먼저 해본 의심은 설정 미스 아닐까 싶어서 samba를 지웠다 깔았다를 여러번 반복해보며 실험했습니다. 하지만 전혀 나아지지 않더군요.

그래서 실험하다가 실수로 비밀번호를 오타를 냈는데, 아니 이게 뭡니까? 동일한 에러가 나오더군요. 그래서 유저가 없나 싶어서 유저를 다시 만들었습니다.

$ sudo smbpasswd -a item4
$ sudo smbpasswd -e item4

하지만 유저가 있음에도, 비밀번호가 맞건 틀리건 에러는 같았습니다. 사태는 점점 더 미궁속으로 빠져듭니다.

기승전검색

그래서 이젠 검색을 열심히 해봤습니다. 커뮤니티에서 여러가지 문답들이 오갔었는데, 나오는 솔루션은 다 시도해봤습니다. 그래도 안되더군요. 그래서 자포자기모드로 Ask Ubuntu에서 추천을 못받은 질문들을 읽어보기 시작했습니다.

그리고 이 답변을 만났습니다. 답변 내용은 간단했습니다. hostname이 15자가 넘으면 안된다는 것이었죠. 15자라는 말을 보자 떠오른 게 있었습니다. smbclient -L localhost -U item4의 결과였죠

$ smbclient -L localhost/hdd1 -U item4
Enter item4's password:
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 4.1.17-Ubuntu]

    Sharename       Type      Comment
    ---------       ----      -------
    IPC$            IPC       IPC Service (item4-homeserver server (Samba, Ubuntu))
    ****            Disk      ****
    print$          Disk      Printer Drivers
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 4.1.17-Ubuntu]

    Server               Comment
    ---------            -------
    ITEM4-HOMESERVE      item4-homeserver server (Samba, Ubuntu)

    Workgroup            Master
    ---------            -------
    WORKGROUP

제 hostname은 item4-homeserver 입니다. 16글자이죠. 그리고 서버목록엔 R이 짤려있습니다. 그래서 바로 솔루션에서 제안하는 것 처럼 [global] 섹션 아래다가 netbios name = item4-homesv 라고, 15자 미만으로 적어보았습니다.

smbclient -L //localhost/hdd1 -U item4
Enter item4's password:
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 4.1.17-Ubuntu]

   Sharename       Type      Comment
   ---------       ----      -------
   print$          Disk      Printer Drivers
   ****            Disk      ****
   IPC$            IPC       IPC Service (item4-homeserver server (Samba, Ubuntu))
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 4.1.17-Ubuntu]

   Server               Comment
   ---------            -------
   ITEM4-HOMESV         item4-homeserver server (Samba, Ubuntu)

   Workgroup            Master
   ---------            -------
   WORKGROUP            ITEM4-HOMESV

차이점이 보이시나요? WORKGROUP에 매칭된 Master가 없었는데 새로 생겨났습니다.

예상

아무래도 samba 내부적으로 Server를 생성할 때는 15자로 자르는 데, Workgroup에 Master짝을 찾을 때는 hostname을 fullname으로 찾아서 대조를 하니 없는 것을 버리는 것 같습니다. 하지만 이 사실은 공식 문서의 설정 파트에도, 문제 상황시 체크 리스트에도 없습니다. 저 답변이 없었으면 저는 ubuntu 업데이트가 꼬였다고 생각하고 ubuntu를 재설치하고 있었겠네요. 이 이슈를 공유하고 싶지만, Samba팀은 bugzilla만 운영하는데 저기까지 가서 뭘 하자니 밤 늦게까지 삽질을 해서인지 너무 지쳐서 포기했습니다.2

후기

마음같아선 Samba를 버리고 이사를 가고 싶지만 딱히 대안이 없는 관계로 참고 있습니다.


  1. nginx의 site-availabe/default가 바뀌어서 tt-rss가 먹통이 되었다던가 하는 점.

  2. (아마도)Perl CGI로 된 소스를 아직까지도 돌리고 있는 곳에 가입까지 해야한다는 점에서 의욕이 더 추락했습니다.