나스 장비를 루팅하는 이유
꽤 오래 전에 버팔로 나스를 리뷰했었다. 케이스 가격은 10만원대 이기 때문에 네트워크 저장 매체로는 상당히 저렴한 편이다. 또 가격은 저렴하지만 있을 만한 기능은 대부분 있다. 따라서 잘 사용하면 의외로 활용도가 높다. 아울러 이런 나스 장비는 루팅을 하면 훨씬 더 다양한 작업이 가능해진다. 한예로 버팔로 나스의 웹 포트는 81번이다. 그런데 이 포트를 일반 웹 포트(80번)로 바꿀 수 있다. 또 필요하다면 'Air Video' 서버 같은 것을 돌릴 수도 있다. 이렇기 때문에 대부분의 나스 장비 역시 많은 사람들이 루팅을 하고 있다. 다만 버팔로 나스는 펌웨어가 판올림되며 PHP Shell을 이용한 루팅이 막혔다. 따라서 오늘은 PHP Shell을 이용하는 것에 비해 조금 더 복잡하지만 근원적으로 루팅하는 방법을 소개하겠다.
동작하지 않는 나스 루팅
오랜 만에 버팔로 나스로 루트 로그인을 시도했다. 예전에 한번 올렸지만 PHP Shell을 이용하면 상당히 손쉽게 루트 권한을 획득할 수 있다. 그런데 이 방법은 더 이상 동작하지 않았다. 당시 펌웨어(Firmware)는 '1.31'이었다. 그런데 펌웨어를 판올림(1.56)하며 패치된 것[1] 같았다. 그러나 아이폰에서 알 수 있는 것처럼 탈옥은 막아도 뚫린다. 이에비해 버팔로 나스에서 루팅을 막는 방법은 좀 허술하다. 따라서 인터넷을 검색해 보면 펌웨어 1.56에서도 루트 권한을 얻는 방법이 올라와 있을 것으로 생각했다. 방법은 올라와 있지만 의외로 동작하는 방법은 찾기 힘들었다.
버팔로 링크스테이션 리뷰에서 소개한 나스 장비. 중간의 파란색 기기는 외장 하드 디스크다. 나스가 2TB이고 외장 하드가 1TB이기 때문에 총 3.5TB가 나스에 물려있다.
그러다 알게된 프로그램이 acp_commander.jar
이다. PHP Shell을 이용해서 루팅하는 방법을 쓸 때도 알던 프로그램이다. 다만 당시에는 프로그램으로는 루트 권한을 얻을 수 없는 것으로 알았다. 그런데 오늘 찾아 보니 acp_commander.jar
라는 프로그램은 단순히 루트 권한을 얻는 프로그램이 아니었다. 버파로 나스에서 특정 명령을 실행할 수 있는 프로그램이었다. 한 예로 -c "cp /etc/init.d/sshd.sh /mnt/usbdisk1"
과 같은 옵션을 주면 sshd.sh
라는 파일을 사용자가 접근할 수 있는 외장 하드 영역으로 복사해 준다[2]. 즉, acp_commander.jar
를 이용하면 콘솔 로그인을 하지 않아도 콘솔 명령을 실행한 수 있다.
버팔로 나스 루팅
루팅을 하지 않으면 그림 오른쪽 위처럼 네트워크 오류가 뜬다. 그러나 루팅을 하고 나면 root라는 아이디로 바로 로그인할 수 있다. 리눅스에서 최고 관리자 권한을 획득했기 때문에 나스 장비를 마음 껏 가지고 놀 수 있다.
따라서 유닉스나 리눅스에 대해 어느 정도 알고 있는 사람이라면 버팔로 나스의 설정 파일을 acp_commander.jar
를 이용해서 바꿈으로서 루트 권한을 얻을 수 있다. 절차도 그리 복잡한 것이 아니다. ① passwd 명령으로 루트(root)의 암호를 바꾼다. ② 콘솔 로그인을 허용하도록 sshd 설정을 바꾼다. ③ 마지막으로 sshd 서버를 다시 기동한다. 이렇게하면 putty와 같은 프로그램으로 루트 로그인이 가능했다. 루팅을 하지 않으면 그림 오른쪽 위처럼 네트워크 오류가 뜬다. 그러나 루팅을 하고 putty를 이용하면 바로 root로 로그인할 수 있다. 따라서 오늘은 다시 버팔로 나스에 root로 로그인하는 방법을 설명하겠다. 이 방법은 1.56에서 시험했고 최신 펌웨어인 1.58~1.70에서도 잘 동작하는 것[3]을 확인했다.
- 먼저 'JRE'를 컴퓨터에 설치한다. JRE는 여기에서 내려받을 수 있다. JRE를 설치하는 것은 따로 설명하지 않겠다. 알아서 설치하기 바란다. 또 이런 기본적인 내용은 질문해도 답하지 않는다.
acp_commander.jar
를 내려받는다.acp_commander.jar
는 acp_commander.jar를 클릭하면 받을 수 있다.다음 내용을 메모장에 복사한 뒤
rooting.cmd
라는 이름으로 저장한다. 추가로 편집할 부분이 있으므로 메모장을 끝내지 않는 것이 좋다.@echo off REM JAVAPATH는 JRE가 설치된 경로. 해당 경로에 java.exe가 있어야 함 REM NASIP는 나스 장비의 IP 주소 REM ADMINPW는 버팔로 나스 웹 로그인할 때 사용되는 암호 REM ROOTPW는 콘솔로 로그인할 때 사용할 암호 SET JAVAPATH= SET NASIP= SET ADMINPW= SET ROOTPW= REM passwd 명령을 이용해서 root의 암호를 rootpw로 바꿈 chcp 949 "%JAVAPATH%\java.exe" -jar acp_commander.jar -t %NASIP% -ip %NASIP% -pw %ADMINPW% -c "(echo %ROOTPW%;echo %ROOTPW%)|passwd" > nul echo 1. 루트 암호를 %ROOTPW%로 바꾸고 있습니다. REM PAM 모듈을 사용하지 않도록 설정 "%JAVAPATH%\java.exe" -jar acp_commander.jar -t %NASIP% -ip %NASIP% -pw %ADMINPW% -c "sed -e 's/UsePAM.*yes/UsePAM no/g' -i /etc/sshd_config" > nul echo 2. PAM 모듈을 사용하지 않도록 설정합니다. REM SSH 설정에서 루트 로그인을 허용하도록 바꿈 "%JAVAPATH%\java.exe" -jar acp_commander.jar -t %NASIP% -ip %NASIP% -pw %ADMINPW% -c "sed -i 's/PermitRootLogin no/PermitRootLogin yes/g' /etc/sshd_config" > nul echo 3. 루트 로그인을 허용하도록 바꿉니다. REM SFT를 사용할 수 있도록 설정 "%JAVAPATH%\java.exe" -jar acp_commander.jar -t %NASIP% -ip %NASIP% -pw %ADMINPW% -c "sed -i 's/"${SUPPORT_SFTP}" = "0"/"${SUPPORT_SFTP}" = "1"/g' /etc/init.d/sshd.sh" > nul echo 4. SFTP를 사용하록 바꿉니다. REM sshd를 다시 시작함 "%JAVAPATH%\java.exe" -jar acp_commander.jar -t %NASIP% -ip %NASIP% -pw %ADMINPW% -c "/etc/init.d/sshd.sh restart" > nul echo 5. sshd를 다시 시작합니다. echo. echo 이제 버팔로 나스에 root로 로그인할 수 있습니다. 로그인 암호는 %ROOTPW%입니다.
- 메모장에서 다음 내용을 바꾼다.
- SET JAVAPATH=: JRE가 설치된 경로를 지정한다. 해당 폴더에
java.exe
가 있어야한다.예: SET JAVAPATH=c:\Program Files (x86)\Network\Java\bin
- SET NASIP=: 버팔로 나스의 IP 주소를 지정한다. 주소는 알아서 찾아내기 바란다.
예: SET NASIP=192.168.1.252
- SET ADMINPW=: 웹에서 버팔로 나스에 로그인할 때 사용하는 암호를 지정한다.
예: SET ADMINPW=madbulls
- SET ROOTPW=: root로 로그인할 때 사용할 암호를 지정한다.
예: SET ROOTPW=fuckingmb
- SET JAVAPATH=: JRE가 설치된 경로를 지정한다. 해당 폴더에
- 파일을 저장하고 도스 명령행에서
rooting.cmd
를 실행한다. 이때 주의할 것은rooting.cmd
라는 파일과acp_commander.jar
는 같은 폴더에 있어야 한다. rooting.cmd
파일을 실행할 때 다음과 같은 오류가 발생한다면 일단 방화벽을 끄고 시도한 뒤 루팅에 성공하면 방화벽을 켜기 바란다.rooting.cmd
에서 네트워크를 접속하며 방화벽에서 네트워크 접속을 차단하기 때문에 발생한 문제이기 때문이다.>ERROR: Exception: SocketTimeoutException (Receive timed out) [ACP Send/Receive ( Packet:8020 = ACP_Discover)]
코드 설명
마지막으로 혹 더 궁금해 하는 사람이 있을지 몰라 각각의 코드를 설명하면 다음과 같다.
-c "(echo %ROOTPW%;echo %ROOTPW%)|passwd"
passwd
라는 유닉스 명령을 실행하며 자동으로 ROOTPW를 입력한다.-c "sed -e 's/UsePAM.*yes/UsePAM no/g' -i /etc/sshd_config"
sed
명령을 이용해서 sshd_config 파일의 내용 중 'UsePAM yes'를 'UsePAM no'로 바꾼다.-c "sed -i 's/PermitRootLogin no/PermitRootLogin yes/g' /etc/sshd_config"
마찬가지로sed
명령을 이용해서 'ssh_config' 파일의 내용 중 PermitRootLogin no을 'PermitRootLogin yes'로 바꾼다. 즉, 루트 로그인을 허용하도록 바꾸는 과정이다.-c "sed -i 's/"${SUPPORT_SFTP}" = "0"/"${SUPPORT_SFTP}" = "1"/g' /etc/init.d/sshd.sh"
sed
명령을 이용해서 'sshd.sh' 파일의 내용 중 "${SUPPORT_SFTP}" = "0"를"${SUPPORT_SFTP}" = "1"
로 바꾼다. 즉, SFTP를 지원하도록 바꾸는 부분이다.-c "/etc/init.d/sshd.sh restart"
변경된 설정을 적용ㄹ하기 위해sshd
대몬을 다시 시작한다.
남은 이야기, 다시 한번 주의
일단 rooting.cmd
를 실행하고 나면 다음 그림처럼 루트 ID로 로그인 된다. SSH를 이용해서 로그인해야 하므로 Putty[4]와 같은 프로그램을 사용하면 된다. 이 방법은 PHP Shell을 이용한 방법과는 달리 나스 장비를 다시 부팅해도 루팅 상태가 유지된다. 버팔로 나스의 시스템 파일을 acp_commander.jar를 이용해서 직접 변경했기 때문이다. 다만 버팔로 나스 루팅은 컴퓨터와 운영체제에 대한 지식이 있는 사람만 따라하기 바란다. 어차피 이런 지식이 없는 사람이라면 굳이 루팅할 필요도 없고 루팅해도 할일도 없기 때문이다[5].
별것 아닌 것 같지만 root로 로그인하면 시스템 전체를 마음대로 주물룰 수 있기 때문에 상당히 편하다.
- 이 글에서 제공한 방법은 펌웨어 1.70에서도 잘 동작하는 것을 확인했다. ↩
- 시스템 파일은 설정에 따라 외장 하드 영역으로 복사해도 읽을 수 없다. chown 명령을 이용해서 소유권을 바꾸거나 chmod를 이용해서 접근 권한을 바꿔야 한다. ↩
- 가장 최신 펌웨어인 1.70에서도 잘 동작한다. 다만 윈도 7에서 동작하지 않는다면 방화벽을 끄고 실행한 뒤 방화벽을 켜면 된다. ↩
- 개인적으로 가장 좋아하는 콘솔 프로그램은 SecureCRT이다. 콘솔 작업이 많을 때는 항상 설치하는 프로그램이었다. 그러나 요즘은 콘솔 작업이 많지 않아 Putty를 사용하고 있다. ↩
- '기초적인 부분을 설명하지 않고 질문해도 답을 하지 않겠다'고 한 것도 같은 맥락이다. ↩
Trackback
Trackback Address :: https://offree.net/trackback/3580
Comments
-
장영조 2012/09/11 11:44
버팔로 링크스테이션을 사용하고 있는데, 위의 글 내용따라 루트 로그인에 성공했는데
어떻게 하면 웹 포트를 바꿀수 있나요?
혹시 아시면 사이트라도 알려 주시면 고맙겠습니다.
꼭 해보고 싶은데 이리저리 알아봐도 방법을 알수 없네요 좀 부탁드려도 될까요? -
-
EAVAN 2012/11/19 21:05
root 비밀번호 변경시 아래와 같은 에러가 나는데 이유를 알수 있을까요?
java -jar acp_commander.jar -t 192.168.0.10 -ip 192.168.0.10 -pw [admin비밀번호] -c "<echo 123456;echo 123456>|passwd" > nul
ERROR: Exception: SocketTimeoutException (Receive timed out) [ACP Send/Receive (
Packet:8020 = ACP_Discover)] -
왕초보 2013/11/26 16:28
이런 질문 드려도 되는지 모르겠습니다.
최근 LS-421DE를 구입하여 사용하고 있습니다.
여러 가지로 활용중인데..
웹서버기능은 없는 것 같습니다.
웹서버로 활용할 수 있는 방법은 없는가요? -
홍승모 2014/01/01 21:08
버팔로 나스를 사용하고 있는 사람입니다.
얼마전에 관리자 암호를 잊어 초기화를 하려 하는데
초기화해도 기존 암호 유지에 체크가 되어 있는가 변경이 안됩니다.
as센터에 문의해도 제가 실행한 초기화 방법만 알려주고 안된다니 보내랍니다.
데이터 유실을 걱정하니 그럼 복구업체에 맡기라는 황당한 말만 합니다.
도아님의 글을 유심히 읽던 중 루팅으로 암호도 변경할 수 있는 것 같아
이렇게 질문 드립니다.
관리자 암호를 바꿀 수 있는 방법이 있는가요?
데이터는 유지되는지요..?
도움 부탁 드립니다.
제 이메일 주소는 [email protected] 입니다.
제가 컴퓨터 앞에 거의 앉아 있을 수 없는 직업으로 인해 스마트 폰으로 메일을 확인합니다.
죄송합니다. 메일로 답변 부탁 드리겠습니다.
감사합니다. -
감사 2015/05/20 16:43
감사합니다!
하루 온종일 삽질하다가 글을 보고 해결했어요! 너무너무 기분이 좋아요! 으헷
ERROR: Exception: SocketTimeoutException 가 뜨면 방화벽을 아예 꺼버리고 다시 시도해보세요.
윈7은 : 제어판 > 시스템 및 보안 > Windows 방화벽 > 설정 사용자 지정 에서
<Windows 방화벽 사용 안 함> 에 체크하시고 rooting.cmd 실행하시고요.
다 하셨으면 다시 방화벽 켜는 거 잊지 마시고~ -
쓸빵 2016/06/02 17:50
간만에 nas가 필요하고 또한 transmission을 구동해야 해서 루팅 방법을 찾아 해매고 있었는데
phpshell로 할려다가 영 안되서 포기할려던 찰나에 도아님 사이트가 검색되었네요
LS-WXL 1.71, raspbian에서 작업했습니다 root 접속 아주 잘되네요
리눅스에서 작업하실 분들은 아래 내용 그냥 붙여넣기 하시면 됩니다
(물론 java 설치된 환경이에요, ip랑 패스워드는 변경하세요)
java -jar acp_commander.jar -t 192.168.1.111 -ip 192.168.1.111 -pw "관리자패스워드" -c "(echo %ROOTPW%;echo %ROOTPW%)|passwd" > nul
java -jar acp_commander.jar -t 192.168.1.111 -ip 192.168.1.111 -pw "관리자패스워드" "sed -e 's/UsePAM.*yes/UsePAM no/g' -i /etc/sshd_config" > nul
java -jar acp_commander.jar -t 192.168.1.111 -ip 192.168.1.111 -pw "관리자패스워드" "sed -i 's/PermitRootLogin no/PermitRootLogin yes/g' /etc/sshd_config" > nul
java -jar acp_commander.jar -t 192.168.1.111 -ip 192.168.1.111 -pw "관리자패스워드" "sed -i 's/"${SUPPORT_SFTP}" = "0"/"${SUPPORT_SFTP}" = "1"/g' /etc/init.d/sshd.sh" > nul
java -jar acp_commander.jar -t 192.168.1.111 -ip 192.168.1.111 -pw "관리자패스워드" "/etc/init.d/sshd.sh restart" > nul
접속확인 -> ssh 192.168.1.111 -l root
%ROOTPW% 입력후 접속후 passwd 명령으로 패스변경하세요~
도아님 감사합니다 -
코더 2016/08/31 15:56
저는 1.71 firmware 버젼을 사용중입니다.
도아님 글대로 해서 루팅을 성공했습니다.
그런데 루팅을 한뒤에 NAS 기기를 재부팅시 다시 ssh 가 막히는 게 되는 현상을 발견했습니다.
혹시 재부팅 시에도 ssh 가 계속 열려있을 수 있도록 할 방법이 있나요?
감사합니다!!
Facebook