나스를 리눅스 박스로…

버팔로 나스 펌웨어는 다른 외산 네트워크 장비와 비슷하게 리눅스(Linux)가 설치되어 있다. 따라서 버팔로 링크스테이션(Buffalo LinkStation)에 root로 로그인할 수 있으면 리눅스 박스처럼 사용할 수 있다. 버팔로 링크스테이션은 과거에는 acp_commander.jar라는 파일을 이용해 루트 로그인할 수 있었다. 그러나 지금은 막혔다. 그런다고 방법이 없는 것은 아니다. PHP Shell이라는 프로그램을 이용하면 역시 루트 로그인할 수 있다. 따라서 이 번 글에서는 PHP Shell을 이용해서 루트 로그인하는 방법을 설명하겠다.

버팔로 나스 루트 로그인

최근에 글이 잘 써지지 않는다. 써야할 글은 많은데 글이 써지지 않으니 조금 난감한 상황이다. NAS도 비슷하다. 원래 총 5부로 빨리 마무리할 생각이었지만 글이 잘 써지지 않다보니 임시 글(드래프트)만 쓰고 마무리를 짓지 못하고 있다. 일단 버팔로 나스의 체험단으로서 써야할 글은 모두 다썼다. 따라서 이번에는 버팔로 나스와 직접적인 관계는 없지만 버팔로 나스로 다른 작업을 할 때 유용한 팁을 하나 올리도록 하겠다.

버팔로 나스의 펌웨어는 다른 외산 네트워크 장비와 비슷하게 리눅스(Linux)가 설치되어 있다. 따라서 버팔로 링크스테이션(Buffalo LinkStation)에 root 아이디로 로그인할 수 있으면 거의 리눅스 박스처럼 사용하는 것이 가능하다. 인터넷을 찾아 보면 알 수 있지만 버팔로 링크스테이션은 과거에는 acp_commander.jar라는 파일을 이용하면 루트로 로그인하는 것이 가능했다. 이 파일을 내려받아

java -jar acp_commander.jar -t 192.168.1.XXX -o

와 같은 명령을 실행하면 텔넷으로 로그인할 수 있다고 한다. 또 다음 그림에서 알 수 있듯 버팔로 링크스테이션에 정말로 텔넷 로그인이 가능한 것처럼 보인다. 텔넷 대몬이 실행됐고 로그인 ID로 root를 사용하면 되는 것으로 출력되기 때문이다. 그러나 버팔로 링크스테이션의 펌웨어 때문인지 몰라도 최근 펌웨어에서는 이 명령이 통하지 않았다. 따라서 이번 글에서는 조금 다른 방법을 이용해서 버팔로 링크스테이션(Buffalo LinkStation)의 콘솔로 로그인하는 방법을 설명하겠다.

웹 서버 실행

acp_commander.jar를 이용해서 콘솔로 로그인할 수 없다. 그러나 방법이 전혀 없는 것은 아니다. 인터넷을 찾아보면 알 수 있지만 PHP 프로그램 중 PHP Shell이라는 프로그램이 있다. 이름을 보면 알 수 있지만 이 프로그램은 웹을 통해 시스템 명령을 실행할 수 있는 프로그램이다. 웹 프로그램이 가지고 있는 특징상 접근할 수 있는 폴더는 웹 폴더(htdocs)로 제한된다.

그러나 이 프로그램을 이용하면 제한적이기는 하지만 버팔로 링크스테이션에 콘솔로 접근하는 것이 가능하다. 다만 이 프로그램을 실행하기 위해서는 먼저 웹 서버를 실행한 상태여야 한다. 따라서 먼저 버팔로 링크스테이션관리도구에 접속한 뒤 웹 서버를 기동해야 한다. 버팔로 링크스테이션에서 웹 서버를 실행하는 방법은 다음과 같다.

  1. 웹 브라우저 주소표시줄에 버팔로 링크스테이션의 웹 관리도구 주소를 입력한다. 버팔로에서 제공하는 NAV Navigator 2를 설치했다면 바탕화면의 아이콘만 두번 클릭해도 된다.

    그림에서는 80번 포트가 아니라 다른 포트를 사용하고 있는데 이것은 웹 서버에 80번 포트를 사용하기 위해 웹 관리도구의 포트를 바꾸었기 때문에 발생한 현상이다.

  2. '네트워크/웹 서버'를 클릭하고 '설정 수정'을 클릭한다.
  3. '웹 서버'를 '사용'으로 바꾸고 '대상 폴더'를 지정(share/.webaxs)한 뒤 저장 단추를 누른다.

일반적으로 다른 옵션은 바꿀 필요가 없다. 웹 서버만 '사용'으로 바꾸고 대상 폴더에서 share/.webaxs만 선택하면 된다. 예의 설정에서 포트번호는 80이지만 기본 설정으로 포트 번호는 80번으로 설정할 수 없다. 80번으로 설정하는 부분은 다른 글에서 설명하겠다. 따라서 이 글은 기본값인 81번을 그대로 사용하는 것으로 하겠다.

이렇게 하면 버팔로 링크스테이션에 사용자 웹 서버가 실행된다. 버팔로 링크스테이션에서는 웹 억세스를 제공하기 위해 아파치 웹 서버를 사용한다. 따라서 사용자 서버 역시 아파치로 실행해 주면 좋을 텐데 사용자 웹 서버로는 lighthttpd가 실행된다. 아파치에 비해 기능은 조금 떨어지지만 자원을 덜 차지하기 때문으로 보인다.

PHP 셀 설치

버팔로 링크스테이션을 네트워크 드라이브로 연결하면 해 보면 루트 폴더에 .webaxs라는 폴더가 만들어져 있는 것을 알 수 있다. 유닉스에서 점(.)로 시작하는 폴더는 숨은 폴더이기 때문에 이 폴더는 웹 접근을 통해서는 보이지 않는다. 이 .webaxs 폴더 아래에 htdocs라는 폴더에 내려받은 PHP 셀을 복사해 두면 된다. 절차는 다음과 같다.

내려받기

  1. '시작/컴퓨터'에 마우스 오른쪽 단추를 클릭한 뒤 컴퓨터에 마우스 오른쪽 단추를 클릭하고 네트워크 드라이브 연결을 클릭한다.
  2. '폴더'에 \\192.168.xxx.xxx\share 처럼 입력하고 '마침' 단추를 클릭한다. 여기서 192.168.xxx.xxx는 버팔로 링크스테이션의 IP 주소여야 한다.

    만약 이 주소를 모르면 '찾아보기'를 클릭한 뒤 폴더를 직접 지정할 수도 있다. 이때 로그인 ID와 암호는 다른 작업을 하지 않았다면 'admin'/'password'를 사용를 사용하면 된다.

  3. htdocs 폴더에 내려받은 PHP Shell를 풀어놓는다. htdocs 폴더에 풀어놔도 되지만 이렇게 하면 파일 관리가 힘들기 때문에 예에서는 htdocs/tools/ps 폴더에 풀었다. 이 글을 따라하는 사람들도 알아서 적당한 폴더를 만들 뒤 압축을 푸는 것이 좋다.
  4. 좋아하는 편집기로 PHP 셀 폴더에서 config.php 파일을 불러온 뒤 [users] 섹션 아래에 다음과 같은 형식으로 사용자를 추가한다.

    php]admin = password
    

    여기서 'admin'은 PHP 셀에 로그인할 사용자의 ID, password에는 로그인할 때 사용하는 암호를 입력하면 된다.

PHP 셀을 이용한 해킹

이 정도를 해킹이라고 할 수 있을지 모르겠다. 아무튼 PHP 셀을 이용하면 root 암호를 간단히 우회할 수 있다. 절차는 다음과 같다.

  1. 주소표시줄에 http://192.168.xxx.xxx:81/<PHP 셀 폴더>처럼 입력한다. 여기서 192.168.xxx.xxx는 '버팔로 링크스테이션의 주소'이며 <PHP 셀 폴더>는 PHP 셀을 설치한 폴더이다. 위의 예처럼 htdocs/tools/ps에 PHP 셀을 설치했다면 http://192.168.1.252:81/tools/ps가 된다.
  2. 'Username'과 'Password'에 config.php에 설정한 ID와 암호를 입력한다. 위의 예처럼 했다면 admin/password로 로그인하면 된다.
  3. 입력창의 $에 다음처럼 입력한 뒤 'Execute Command' 단추를 클릭한다.

    ln -s /etc/pam.d/sshd <웹 루트 폴더>/sshd
    예:
    ln -s /etc/pam.d/sshd /mnt/array1/share/.webaxs/sshd
    

    여기서 웹 루트 폴더(/mnt/array1/share/.webaxs)는 PHP 셀의 'Current Working Directory'를 보면 알 수 있다. htdocs까지 지정하지 않은 이유는 htdocs는 웹에서 접근할 수 있는 폴더이기 때문이다. 참고로 ln 명령은 특정 파일에 대한 소프트/하드 링크를 만드는 유닉스 명령이다.

  4. .webaxs에서 sshd 파일을 찾아 좋아하는 편집기로 'auth'로 시작하는 행을 모두 주석처리(줄 시작 부분에 #를 입력)한 뒤 마지막에 auth required pam_permit.so를 추가한 뒤 저장한다.

    #auth     required   pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
    \#auth    required   pam_smb_auth.so debug
    \#auth    required   pam_unix.so nullok
    \#auth     required   pam_unix.so
    \#auth    required   pam_winbind.so debug
    account  required   pam_unix.so
    \#account required   pam_winbind.so
    session  required   pam_unix.so
    auth    required   pam_permit.so # 추가한 행
    

콘솔 로그인

일단 위에서 설명한 것처럼 sshd 파일을 바꿨다면 텔넷을 이용해서 로그인하는 것이 가능해진다. 텔넷로 연결한 뒤 아이디로 root만 입력하면 그림처럼 root 아이디로 콘솔 로그인하는 것이 가능하다. 또 이렇게 일단 root로 로그인하면 버팔로 링크스테이션에서 모든 유닉스 명령을 사용할 수 있다. 참고로 버팔로 링크스테이션의 CPU 정보를 알고 싶다면 다음 명령을 실행하면 된다.

cat /proc/cpuinfo

리눅스와 같은 유닉스 시스템에서 root 아이디 로그인은 상당히 중요하다. root 아이디로 로그인이 가능해야 제한없는 작업이 가능하기 때문이다. root 아이디로 로그인하면 예에서 처럼 사용자 웹 서버의 포트를 80번 포트로 바꿀 수도 있고 삼바 서버의 설정을 바꿔 루트 폴더를 네트워크 드라이브로 연결하는 것도 가능해진다. 따라서 버팔로 링크스테이션을 사용하며 버팔로에서 제공하는 기본적인 기능 및 설정을 바꾸고 싶다면 꼭 숙지해야 하는 부분이기도 하다.

참고로 버팔로 링크스테이션을 부팅하면 이런 설정은 사라진다. 그러나 일단 /etc/pam.d/sshd를 소프트 링크(ln -s)했기 때문에 이 링크는 사라지지 않는다. 따라서 버팔로 링크스테이션을 부팅한 뒤에는 .webaxs/sshd 파일만 바꿔주면 된다. 부팅해도 설정을 유지할 수 있도록 하는 방법도 있지만 보안상 권하는 방법은 아니다.

관련 글타래