Windows10からLinkstationにアクセスできない

LinkstationにWindows10からアクセスできない問題の根本解決は、CIFSによるアクセスができるようにする設定変更じゃなく、LinkstationにSMB2.0以上でアクセスできるようにすること。

LS-CHL-V2は古い機種のためかSMB2.0以上に対応していない。でも、Linkstationって中身Linuxとか聞いたことあるし、だとしたらできないことはなさそうだけど…。

ということで少し怪しげな扉を開けることに。

ターゲットの型番は LS-CHL-V2 、ファームウェアは 1.74 。






Topic: FW supporting SMB V2 にかかれているURLを見たら「やるしかない」的な空気を感じる。そう…

現在利用しているLS-CHL-V2はWebの設定画面からSMB2.0以上を選べないので、ハッキングしてSambaの設定をいじってSMB2.0以上のアクセスができるようにすればいいみたい。

いろいろと自由にいじれるようにするには公開鍵方式でSSH接続ができるようにするのがいいと思うけど、現時点で困っているのはSMB2.0以上のアクセスができない点だけなので、パスワード方式のSSH接続を実現しつつ、SMBバージョンだけを直す方向で考えることにした。

ということで、やること。

  • ACP Commander をダウンロードする。
  • SSHで接続できるようにする。
  • Sambaの設定を変える。

で良さそう。

 

ACP Commander をダウンロードする

ACP Commander というのは、外からLinkstationにコマンドを実行させることができるツールな模様。

NAS-CENTRAL → Buffalo@NAS-Central とたどって、Downloadsをクリック。
TOOLS/ALL_LS_KB_ARM9/ACP_COMMANDER を見ると acp_commander.jar がおいてある。これをダウンロードする。

うまく辿れなかったけど、ACP Commanderについては、ここに一言書かれている。
Buffalo@NAS-Central / ACP Commander

コマンドの実行は、Ubuntuからやってみた。

$ java -jar acp_commander.jar -v
ACP_commander out of the nas-central.org (linkstationwiki.net) project.
Used to send ACP-commands to Buffalo linkstation(R) LS-PRO.

WARNING: This is experimental software that might brick your linkstation!


Version 0.4.1 (beta)

Usage:  acp_commander [options] -t target

options are:
   -t target .. IP or network name of the Linkstation
…

 

バージョンは 0.4.1、使い方はこれを見ればわかりそう。

コマンドの実行については、以下を参考にした。
Linuxをはじめよう! / BUFFALO LinkStationにSSHアクセス
かならぼ / リンクステーション(LinkStation)のrootをとって、SSHログインをしたよ
ボンタくんの備忘録 / root のパスワードを消し、telnet できるようにする

$ java -jar acp_commander.jar -t <LinkstationのIPアドレス> -ip <LinkstationのIPアドレス> -s
  ↑ 名前解決ができるとしてもIPアドレスで書く。
  ↑ -ipオプションは必要ないもののように見えるけど、書かないとコマンドが動かない。
ACP_commander out of the nas-central.org (linkstationwiki.net) project.
Used to send ACP-commands to Buffalo linkstation(R) LS-PRO.

WARNING: This is experimental software that might brick your linkstation!



Please enter your admin password for "172.16.nnn.nnn":
Password: ********** ← adminのパスワードを入力
Using random connID value = 73B1D2D9B0F6
Using target:   LS-CHL-V236D.hogeserver.hogeddns.jp/172.16.nnn.nnn
Starting authentication procedure...
Sending Discover packet...
Found:  LinkStation (/172.16.nnn.nnn)   LS-CHL-V2(YURYAKU) (ID=00018)   mac: nn:nn:nn:nn:nn:nn  Firmware=  1.740        Key=06BE5701
Trying to authenticate EnOneCmd...      ACP_STATE_OK
Trying to authenticate with admin password...   ACP_STATE_OK
Enter telnet commands to LS, enter 'exit' to leave
/root> 実行したいコマンドをここで入力 ← ここで1回目のコマンドだけ結果がエコーされるただし、エコーされるのはある程度の範囲まで。全部じゃないのでファイルの中身は最初の方しか見えない。
>[ctrl]+[d] ← セッション終了
Changeing IP:   ACP_STATE_PASSWORD_ERROR
Please note, that the current support for the change of the IP is currently very rudimentary.
The IP has been set to the given, fixed IP, however DNS and gateway have not been set. Use the WebGUI to make appropriate settings.
↑ 必ずエラーが出るが動作するので原因究明は諦めた

 

 

SSHで接続できるようにする

※ACP Commanderを利用してのコマンド実行は以下のパターンのいずれかの方法で行った。

$ java -jar acp_commander.jar -t 172.16.nnn.nnn -ip 172.16.nnn.nnn -pw password -s
$ java -jar acp_commander.jar -t 172.16.nnn.nnn -ip 172.16.nnn.nnn -pw password -c "実行するコマンド"

 

ここで password は Linkstation のWeb設定画面にログインする際に利用する admin さんのパスワード。コマンド履歴が残るなーと思って、パスワードを password に変えておいた。

/etc/sshd_config の中身を見てみる。

結果、以下を書き換えると、rootでSSHに接続できるようになりそう。

#PermitRootLogin yes
PermitRootLogin no
↓
PermitRootLogin yes ← 有効化
#PermitRootLogin no

 

実行するコマンドは以下。

# sed -i 's/#PermitRootLogin yes/PermitRootLogin yes/g' /etc/sshd_config
# sed -i 's/PermitRootLogin no/#PermitRootLogin no/g' /etc/sshd_config

※ACP Comannderを利用。

このバージョンで UsePam=no とすると、sshdが起動してこないので注意。

sshd.sh の中身を一部書き換える。
kuhnboy / Gain SSH access to the Buffalo LinkStation 421e
smartnova / LinkStation 220DW への SSH

/etc/init.d/sshd.sh
if [ "${SUPPORT_SFTP}" = "0" ] ; then
    echo "Not support sftp on this model." > /dev/console
    exit 0
fi
↓
if [ "${SUPPORT_SFTP}" = "1" ] ; then
    echo "Not support sftp on this model." > /dev/console
    exit 0
fi

※sshdが起動しないラスボスレベルの難しい問題をこの情報が助けてくれた!

 

数字は何でもいいみたいだけど、とにかくここでexitするのを止めたいというこの模様。
実行するコマンドは以下。

# sed -i 's/"${SUPPORT_SFTP}" = "0"/"${SUPPORT_SFTP}" = "1"/g' /etc/init.d/sshd.sh

※ACP Comannderを利用。

SSHで接続する際にrootを利用するが、rootのパスワードを変更しておく。
色々な変え方がネット上に書かれていたが、パスワードを変更できたのはこれ。

# (echo p@ssw0rd ; echo p@ssw0rd) | passwd ← できた
# sed -i 's/root:$1$\.FfVx9fl$UiT1Agi1p3\/ry\.Zkr3e4m\/:17734:0:99999:7:::/root::17734:0:99999:7:::/g' /etc/shadow ← パスワードクリア

※ACP Comannderを利用。

ファイルが意図通りに書き換わったことを確認した上で、sshdを再起動する。

# /etc/init.d/sshd.sh restart

※ACP Comannderを利用。

sshdの起動には少し時間がかかる。
見慣れないエラーも出るのでドキドキしたが、どうにか起動した。
起動を確認するために、Ubuntuからポートスキャンしてみた。

$ nmap 172.16.nnn.nnn

Starting Nmap 7.01 ( https://nmap.org ) at 2018-07-22 17:33 JST
Nmap scan report for linkstation (172.16.nnn.nnn)
Host is up (0.00058s latency).
rDNS record for 172.16.nnn.nnn: LS-CHL-V236D.hogeserver.hogeddns.jp
Not shown: 990 closed ports
PORT      STATE SERVICE
22/tcp    open  ssh ← 起動成功!
80/tcp    open  http
139/tcp   open  netbios-ssn
443/tcp   open  https
445/tcp   open  microsoft-ds
515/tcp   open  printer
873/tcp   open  rsync
3689/tcp  open  rendezvous
8873/tcp  open  dxspider
22939/tcp open  unknown

Nmap done: 1 IP address (1 host up) scanned in 0.11 seconds

 

Ubuntuからsshでログインしてみる。

$ ssh root@linkstation
The authenticity of host 'linkstation (172.16.nnn.nnn)' can't be established.
RSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? yes[Enter]
Warning: Permanently added 'linkstation,172.16.nnn.nnn' (RSA) to the list of known hosts.
Password:[Enter] ← ん?なんだろこれ??
Password:[Enter]
Password:[Enter]
root@linkstation's password: 先程設定したrootのパスワードを入力[Enter]
root@LinkStation:~# ← ログインできた!
# uname -a
Linux LinkStation 3.3.4-88f6281 #1 Thu Jun 22 15:47:23 JST 2017 armv5tel unknown

 

もちろん、公開鍵方式での接続にもトライしたけど、設定を変えてもどうにもうまくいかない。

つーか、そもそも、ACP Commanderでどうにでも設定が変えられるっぽいことを考えたら、色々細々設定しても意味はないかも。ということで、割り切りとした。

 

Sambaの設定を変える

Sambaの設定自体は、/etc/samba/smb.conf にあるのだが、Sambaが設定を読み込むたびにsmb.confを生成しているらしく、smb.confを書き換えても意味がない。

よって、Sambaを起動するシェル自体を書き換える。

ここに答えがあった。
forums.buffalotech.com / How to enable SMBv2 on Linkstation LS-WXL systems so it works with modern OSes

/etc/init.d/smb.sh に赤文字部分を追加。
…
configure()
{
        ## built-in account(admin / guest) passwd db check.
        pdb_check=`/usr/local/bin/pdbedit -L |grep ^admin:`
        if [ "${pdb_check}" = "" ] ; then
                echo -e 'password\npassword\n' | /usr/local/bin/smbpasswd -as admin
                echo -e '\n\n' | /usr/local/bin/smbpasswd -as guest
        fi

        ## configure files from Buffalo parameters.
        echo "configure samba"

        # for active directory logon
        if [ "$domain" == "ad" ] ; then
                /usr/local/bin/create_krbconf.sh ${pdc} ${ad_dns}
                /etc/init.d/sethostname.sh
        fi

        touch /etc/printcap
        /usr/local/sbin/nas_configgen -c samba
        if [ $? -ne 0 ]; then
                echo "$0 configure fail"
                exit 1
        fi
        /bin/sed -i '3i\\
    min protocol = SMB2\\
    max protocol = SMB2\\
        ' /etc/samba/smb.conf

}
…

 

これで /etc/samba/smb.conf の3行目(globalセクション)にプロトコル指定が追加されるようになる。

変更後、以下を実行。

# /etc/init.d/smb.sh reload

 

これで、LinkstationにWindows10からアクセスができた。

 

さいごに

こうしてコマンド実行できることはきっとセキュリティホール扱いなんだろうと思う。

だけど、いざとなったら自分でどうにかできちゃうのは魅力的、と思うのだった。

お気軽にどうぞ ~ 投稿に関するご意見・感想・他

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です