群晖Photo Station增加Google Authenticator认证
最近向电信申请了公网ip,然后就把黑群晖通过路由的端口映射功能把NAS管理、PhotoStation 、NoteStation等一些常用的服务映射出公网去了,但是暴漏到公网就意味着可能受到攻击,于是乎又申请域名,ssh修改Nginx增加https证书,修改安全策略限制错误密码次数封锁ip,禁用admin账户设置超级复杂密码,增加Google Authenticator二次认证等等一系列操作后,最后看着浏览器的小锁标志、登录框中的二次认证登录心里仿佛感觉到了一些安全感。
实际测试,Note Station、Surveillance Station等一些服务都是基于DSM账号安全管理的,当登录以上那些服务的时候会有密码错误限制和谷歌二次认证安全策略,但PhotoStation并不是的,这意味着如果你开放PhotoStation服务,就有可能面临暴力破解的隐患,发下这个事情的我首先想到的就是屏蔽PhotoStaion外网权限,一劳永逸。或者修改用户组,但还是会存在问题,因为PhotoStation仍然会存在一个DSM账号可以爆破登录,在我看来如果能加上和管理页面相同的Google Authenticator认证会让安全性增加不少。
下面直接说操作了思路了
一、当你设置了控制面板-用户账户-高级设置-两步骤验证后就会在群晖下面的路径中/usr/syno/etc/preference/<你的账户名>/google_authenticator生成一个文件,使用cat命令将会看到几行文字,其中第一行的16个字符就是Google Authenticator的密钥,这里我们将其复制下来以备后用。
二、因为PhotoStation是用的PHP语言开发的,所以我们需要修改php代码,首先下载链接中的/PHPGangsta/GoogleAuthenticator.php文件将其复制到/var/packages/PhotoStation/target/photo/webapi目录中,GoogleAuthenticator.php是php实现的GoogleAuthenticator算法,这里我需要使用其校验方法。
三、修改页面表单,/var/packages/PhotoStation/target/photo/index.php,在122行出增加一行:
<input type="text" id="login_otpCode" name="otpCode" class="sbox-text login-input" />代码。
四、修改页面JS,/var/packages/PhotoStation/target/photo/photo_new/syno_photo_main.js,由于这个js是压缩文件,我建议将其复制出来,在idea、phpstrom、vscode任意一款代码编辑器中格式化代码一下,然后大约15400行左右增加如下代码
,{
hideLabel: true,
cls: "photo-login-password",
itemId: "otpCode",
xtype: "textfield",
width: 300,
inputType: "textfield"
},
然后顺着代码往下看,找到onClickLogin方法增加 e = this.getComponent("otpCode").getValue(); Ext.get("login_otpCode").dom.value = e; 相关代码,以保证表单提交会将谷歌验证发发动到php后台接口中。
五、最终我们要修改php接口,修改/var/packages/PhotoStation/target/photo/webapi/auth.php.在第六行require_once('../include/shared_album.php');下面增加require_once('GoogleAuthenticator.php');代码,然后找到Login方法,在第一个判断下面增加如下代码
if (!isset($_REQUEST['otpCode'])) {
return [false,'WEBAPI_ERR_BAD_REQUEST'];
}else{
$otpCode=$_REQUEST['otpCode'];
$ga = new PHPGangsta_GoogleAuthenticator();
$secret = 'xxxxxxxxxxxx';//密钥,改成你自己的
$checkResult = $ga->verifyCode($secret, $otpCode, 0);
if (!$checkResult) {
sleep(5);//校验失败 休眠5秒
return [false, WEBAPI_ERR_BAD_REQUEST];
}
}
到此修改结束,关闭群晖的ssh登录权限(养成好习惯),登录一下PhotoStation试一下。
经测试完美融合了群晖原来的谷歌认证器。只能说安全性稍微增加了一下下,至于群晖会不会有什么其他漏洞就不得知了,但是从PhotoStation层面仿佛安全了不少。
本博文虽然短短几行字,但是实际操作稍微需要一点编程知识,并不适合所有人,权做给大家一点的改造思路吧。
iAMAX
校验提示文案
灵KOYB
校验提示文案
依依别离
校验提示文案
天人1
校验提示文案
PS5-cn想入手一台
校验提示文案
值友3454880867
你有群晖,大概率也有软路由。用酸酸乳软件自带的ss服务器功能,通过全局代理访问内网,然后再访问群晖。这样就可以不暴露群晖的端口在公网了。
校验提示文案
yz50505
校验提示文案
天人1
校验提示文案
yz50505
校验提示文案
值友3454880867
你有群晖,大概率也有软路由。用酸酸乳软件自带的ss服务器功能,通过全局代理访问内网,然后再访问群晖。这样就可以不暴露群晖的端口在公网了。
校验提示文案
iAMAX
校验提示文案
依依别离
校验提示文案
PS5-cn想入手一台
校验提示文案
灵KOYB
校验提示文案