어제 끈닷넷이 스쿨호스팅(phps.kr
)에서 버~얼트(vultr.com
)으로 이사를 왔다.
twitter.com/vultr/status/960265967111688194
지난 주에 포스팅한 대로 내 로컬은 우분투 18.04에서 20.04로 업그레이드 됐다. 그랬더니 끈닷넷 서버와 동기화를 하던 Unison이 징징거렸다. OCaml의 Marshal 모듈을 쓰는데 OCaml 버전이 안 맞는다나. 오케이, 그러면 서버도 업그레이드 해 줄게. (사실 OS 버전과 OCaml 버전은 아무 상관이 없지만 나는 Unison을 apt-get으로 설치했기에 OS에 따라 버전이 안 맞을 법도 했다. 그리고 어차피 서버 OS 버전도 올릴라 했다.)
우분투 20.04로 업그레이드 후 서버 재부팅을 했더니,
스쿨호스팅은 웹콘솔을 지원하지 않기 때문에 내게 옵션은 많지 않았다.
두 옵션 모두 만족스럽지 않다.
옵션1은 좀 불안하다. 어차피 새로 설치 받은 후에 우분투 업그레이드를 20.04로 다시 해야할 뿐 아니라 끈닷넷도 다시 깔고 그래야 해야 한다. 다시 해서 이번엔 ssh 문제가 없다는 보장도 없다.
옵션2는 뭐 그냥 어처구니 없다. ssh 포트 변경을 위해선 ssh 설정 파일 한 줄만 바꾸면 된다. 이만 원이라니, 뭔가 내가 모르는 다른 서비스일 것이다. 그리고 난 사실 ssh 포트 변경이 필요한 것이 아니라 어딘가 생겼을 문제를 찾아 고쳐야 하는 상황이다.
울면서 갓꿘ㄷㄴ님께 일렀다. 😭
꿘ㄷㄴ님께서는 웹서버가 잘 돌고 있으니 해킹을 해서 권한을 찾아 오자고 하셨다. 나는 내 서버 코드를 꿘ㄷㄴ님과 공유했고 머지 않아 꿘ㄷㄴ님은 취약점을 찾았다. 오호~ 🥳 역시 갓꿘ㄷㄴ님!
그 취약점을 이용해서 서버에 있는, www-data
가 읽을 수 있는, 대부분의 파일들을 읽을 수 있게 됐다. 일단 sshd_config
파일을 읽어 보았다. ListenAddress
항목이 코멘트 아웃 되어 있어서 문제였을 것이라 생각했지만 사실 문제는 다른 곳에 있었음을 나중에야 알게 되었다. (아래에...)
그리고 조금 더 봤더니 ftp 포트가 읽기 전용으로 열려 있었다고 한다. 오잉? 내가 언젠가 열었을까? 기본으로 열려 있었을까? 모르겠지만 일단 더 편하게 서버를 들여다 볼 수 있게 됐다.
하지만 아직 추가적인 취약점은 발견되지 않았다. 슬프면서도 좋으면서도 혼란스럽다. 주된 원인은 끈닷넷 서비스가 작아서 애초에 공격할 곳이 많지 않았다는 점, 그 몇 안되는 곳들에서 사용자 입력들을 정규식으로 검증하고 있었다는 점, 그리고 OS 업그레이드를 하는 바람에 대부분의 패키지가 최신으로 유지된 점이라 생각할 수 있겠다. 심지어 위의 구멍들도 운영자 비밀번호를 알아야 그나마 쓸 수 있는 것들이었다.
타겟을 바꿔 vsftpd를 보고 있다. 아직은 특이한 소식은 없다. 나는 근데 그걸 보다 보니 너무 졸립더라. 핵알못이라 그런 것 같다.
잠을 깨기 위해 일단 서버를 새로 사고 이사를 갔다. Vultr도 최저 사양의 가격은 비슷하다. 한 달에 오천 원. 하지만 웹콘솔도 지원하고 각종 API도 지원하며 우분투 20.10까지도 깔아 준다. 결정적으로 메모리가 무려 1GB이다! 🎉 이제 마음 편히 opam을 쓸 수 있게 됐다.
opam.ocaml.org/doc/FAQ.html#What-are-the-minimum-requirements
라즈베리파이라던가 오드로이드 같은 것들도 구경을 하기는 했는데 나의 귀찮음 한계치를 훌쩍 넘겨 버려서 탈락했다.
잘 모르겠다. 일단 7월 중순까지 결제되어 있는 상태고 다시 어떻게든 쓰려면 오천 원을 내거나, 다른 취약점을 찾을 때까지 방치해야 한다. 지금 상태는 후자다.
그동안 나름 긴 시간 동안 큰 문제 없이 잘 지내왔다. 우분투 14.04에서 시작해 16.04, 18.04 두 번의 OS 업그레이드도 문제 없이 진행됐다. 세 번의 OS 업그레이드는 어려웠나보다.
아차 그래서 문제가 뭔지 이야기를 빠뜨릴 뻔했다.
Vultr 서버를 받고선 본격 이사하기 전 가장 먼저 했던 것이 문제의 sshd_config
파일을 적용해 보고 왜 안 도는지 확인하는 것이었다.
가장 마지막 줄이 중요한 줄이다.
Subsystem 'sftp' already defined.
자세히 살펴보니 같은 설정이 두 군데에 있다. 그러니깐 sshd_config
머지 컨플릭트가 난 부분은 내가 손으로 고쳤지만 그와는 상관 없이, 자연스럽게 예전 설정 파일에서 한 줄, 새로운 설정 파일에서 한 줄 가져와서 같은 설정 명령이 두 줄이 된 것이다. 오호. 원래 diff가 어려운 일이니깐 이해한다. 재부팅 전에 미리 확인을 하지 않은 나의 잘못이기도 하고.
$ sudo sshd -t
이것 한 줄로 확인할 수 있었을 것을. 조금은 아쉽게 됐다.
www.cyberciti.biz/tips/checking-openssh-sshd-configuration-syntax-errors.html
덕분에 많이 배워 간다.
2020-12-23 씀.