无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 5705|回复: 22
打印 上一主题 下一主题

[求助] 用GRUB4DOS如何为两套系统添加和更改入口菜单密码(用密码配置文件如何实现)

[复制链接]
跳转到指定楼层
1#
发表于 2011-4-15 09:48:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一台办公电脑,由两人使用,要求:
1、安装两套WINXP。
2、每个系统启动时,在启动菜单处输入各自的密码(初始密码已保存到password.ima中的pass1.txt、pass2.txt文件中)。
3、在grub4dos添加一更改各自密码的菜单。
4、每套系统进入后,可见不同的分区。


现在,两套WINXP已安装好,并用xorldr配置启动每套系统并隐藏另一套系统分区和隐藏各自分区的启动配置文件user1.bin、user2.bin,现请教grub4dos的启动菜单文件menu.lst如何编制,我的思路是:

title xp_user1
#输入密码,与password.ima内的pass1.txt中的密码比较,不同时提示密码错误并退出,相同时则继续....
chainloader /user1.bin


title xp_user2
#输入密码,与password.ima内的pass2.txt中的密码比较,不同时提示密码错误并退出,相同时则继续....
chainloader /use2.bin


title 更改密码
#输入旧密码,保存变量oldpass中
#查找password.ima内的pass1.txt中的密码,若与之相同,将pass1.txt保存到passfile中并跳到输入新密码行,若不同继续下步。
#查找password.ima内的pass2.txt中的密码,若与之相同,将pass2.txt保存到passfile中,若不同提示密码错误并退出。
#输入新密码,保存到变量newpass1中
#再次输入新密码,保存到变量newpass2中
#若newpass1不等于newpass2,提示两次输入密码不同并退出,否则继续。
#将密码newpass1保存到passfile的变量值的文件内。


经chenall和sratlf的指点,已在IMA文件中用明码和md5码方式试验成功。但以下两问题,还望各位网友指点。

1、echo --md5 %newpass:~11% > (fd0)/%passfile%中的~11,可否能用其他值,如~16等,原因为何。
2、若不采用passwor.ima(其内含pass1.txt和pass2.txt),而直接用密码配置文件passwor.cfg,若其中的内容为:
用明码时:
pass1:1111
pass2:2222

用--md5码时(假设以下的密码是用md5crypt生成的):
pass1:--md5 XXXXXXXXXXXXXXXXXXXX
pass2:--md5 YYYYYYYYYYYYYYYYYYYY

注:pass1:或pass2:后为其密码。

如何cat或其他命令取出其中的密码和替换其中的密码。



[ 本帖最后由 qj_tzy 于 2011-4-21 08:47 编辑 ]
2#
发表于 2011-4-15 11:39:10 | 只看该作者
使用password.ima来保存密码好像不是很方便的说,当然
也不是不可以。

使用目前版本的GRUB4DOS很容易做到

例子
map /boot/password.img (fd0)
map --hook
title xp_user1
cat (fd0)/pass1.txt | password
chainloader /user1.bin
title xp_user2
cat (fd0)/pass2.txt | password
chainloader /user2.bin

更改密码也简单
title 更新密码用户1
#首先验证原始密码
echo 请输入原始密码
cat (fd0)/pass1.txt | password
#验证通过了,提示输入新密码
set /p newpass=请输入新密码:
#验证新密码
echo 验证新密码
password %newpass%
#验证通过保存新密码
echo %newpass% > (fd0)/pass1.txt

pass1.txt需要预留足够的空间用于存放新密码

原理就是上面的,具体如何应用可以自己发挥

[ 本帖最后由 chenall 于 2011-4-15 11:41 编辑 ]
回复

使用道具 举报

3#
 楼主| 发表于 2011-4-15 11:50:14 | 只看该作者

回复 #2 chenall 的帖子

谢谢指点,我试试,不清楚的再向您请教!
回复

使用道具 举报

4#
 楼主| 发表于 2011-4-15 11:54:31 | 只看该作者

回复 #2 chenall 的帖子

您说:使用password.ima来保存密码好像不是很方便,能否见告更方便的方法吗?
回复

使用道具 举报

5#
发表于 2011-4-15 11:59:18 | 只看该作者
xorldr来做启动然后加个命令到是挺方便不过就是没修改新命令功能。
但xorldr不在分区上留文件安全性好一些些。
回复

使用道具 举报

6#
 楼主| 发表于 2011-4-15 14:39:11 | 只看该作者
经指点,修改并试成功的menu.lst如下:

title  xp_user1
map /grub/password.ima (fd0)
map --hook
cat (fd0)/pass1.txt | password
map --unhook
chainloader /user1.bin

title xp_user2
map /grub/password.ima (fd0)
map --hook
cat (fd0)/pass2.txt | password
map --unhook
chainloader /user2.bin

title 更改用户密码
set /p user=更改何者的密码(1-用户1,2-用户2,只能输入1或2,输入其他将进入命令行):
if not "%user%"=="1" if not "%user%"=="2" commandline
if "%user%"=="1" set passfile=pass1.txt
if "%user%"=="2" set passfile=pass2.txt
map /grub/password.ima (fd0)
map --hook
echo 请输入原密码:
cat (fd0)/%passfile% | password
set /p newpass=请输入新密码:
echo 请再次输入新密码(以验证新密码)
password %newpass%
echo %newpass% > (fd0)/%passfile%
#上句>号的前后必须有一个空格,否则只当为显示echo的功能
map --unhook
configfile /grub/menu.lst

但若要采用md5加密的密码,不知如何进行,还望各位网友多指点。
回复

使用道具 举报

7#
发表于 2011-4-15 15:26:55 | 只看该作者
md5的暂时没有什么比较好的方法。
只能使用md5crypt命令+输出转向然后再使用批处理之类的工具获取MD5加密的密码。

嗯,下个版本我再想办法把这个命令改进一下。

让它可以直接使用md5crypt 明文密码来得到输出加密后的密码。
回复

使用道具 举报

8#
发表于 2011-4-15 15:27:50 | 只看该作者

回复 #4 qj_tzy 的帖子

因为这样子还要制作镜像。所以我觉得麻烦。

直接搞一个配置文件在同目录下也许会比较方便。
回复

使用道具 举报

9#
 楼主| 发表于 2011-4-15 15:45:59 | 只看该作者

回复 #7 chenall 的帖子

谢谢,相信新版本出现后,又多些实用功能了。
回复

使用道具 举报

10#
发表于 2011-4-16 14:18:51 | 只看该作者
grub4dos新版已经更新。

现在就可以使用md5crypt命令来自动转换为md5密码存放了。
保存密码时
echo %newpass% > (fd0)/%passfile%
改成如下语句就行了
md5crypt %newpass% | set newpass=
echo --md5 %newpass:~11% > (fd0)/%passfile%

其它的不需要改动。在改密码之后就会变成使用md5存放的了。
回复

使用道具 举报

11#
 楼主| 发表于 2011-4-16 20:34:16 | 只看该作者

回复 #10 chenall 的帖子

还有几处未明白,还请您指点:

1、取出密码用此命令吗?
cat (fd0)/pass1.txt | password --md5

2、此句中的echo --md5 %newpass:~11% > (fd0)/%passfile%中的--md5、:~11是何意,未明白

3、在gfxmenu(utf-8)中此句不能正常执行:if not "%user%"=="1" if not "%user%"=="2" commandline,不知为何?
回复

使用道具 举报

12#
发表于 2011-4-16 22:22:37 | 只看该作者

回复 #11 qj_tzy 的帖子

1,cat (fd0)/pass1.txt  输出pass1.txt内容  通过操作符"|" 输出到 password --md5 命令后面

2,"--md5 %newpass:~11%" 使用echo命令输出这些字符串  %:~11%这个是截取变量  通过操作符">"写入fd0设备上的%passfile%文件中

以上这些在置顶贴的帮助文档里都能找到  多看看吧

3,写的命令翻译过来是如果 user 不是1  继续  如果 user 不是2 继续  执行commandline命令
回复

使用道具 举报

13#
 楼主| 发表于 2011-4-17 21:08:56 | 只看该作者

回复 #12 sratlf 的帖子

谢谢,我试试!不清楚的再请教

不好意思,有事没能及时上网
回复

使用道具 举报

14#
 楼主| 发表于 2011-4-19 14:51:10 | 只看该作者
改成--md5码后,还未试成功。有试成功者,还请把菜单内容贴出。
回复

使用道具 举报

15#
发表于 2011-4-19 17:24:00 | 只看该作者

回复 #14 qj_tzy 的帖子

麻烦仔细再看一下我前面的帖子。。

如果还是不行可以帖出你的菜单。。
回复

使用道具 举报

16#
 楼主| 发表于 2011-4-19 20:14:11 | 只看该作者

回复 #15 chenall 的帖子

谢谢!再试试,不清楚再请教。
回复

使用道具 举报

17#
 楼主| 发表于 2011-4-20 12:43:06 | 只看该作者

回复 #15 chenall 的帖子

采用md5加密的密码后,我原以为取出密码时要用cat (fd0)/pass1.txt | password --md5命令,所以未试成功,后来仔细想来,应该仍然使用cat (fd0)/pass1.txt | password5 命令,因为--md5参数已通过echo --md5 %newpass:~11% > (fd0)/%passfile%写入密码文件中了。想明白后,重试成功,感谢chenall和sratlf的指点。但仍有不清楚之处,还望指点。

1、echo --md5 %newpass:~11% > (fd0)/%passfile%中的~11,可否能用其他值,如~16等,原因为何。
2、若不采用passwor.ima(其内含pass1.txt和pass2.txt),而直接用passwor.cfg,若其中的内容为:
用明码时:
pass1:1111
pass2:2222

用--md5码时(假设以下的密码是用md5crypt生成的):
pass1:--md5 XXXXXXXXXXXXXXXXXXXX
pass2:--md5 YYYYYYYYYYYYYYYYYYYY

注:pass1:或pass2:后为其密码。

如何cat或其他命令取出其中的密码和替换其中的密码。

[ 本帖最后由 qj_tzy 于 2011-4-20 12:52 编辑 ]
回复

使用道具 举报

18#
 楼主| 发表于 2011-4-21 08:43:56 | 只看该作者
我在1楼或17楼提出的两个问题(重点是密码配置文件法如何实现),诚望各位网友指点。
回复

使用道具 举报

19#
发表于 2011-4-21 10:34:55 | 只看该作者

回复 #18 qj_tzy 的帖子

1,
md5crypt %newpass% | set newpass=
echo --md5 %newpass:~11% > (fd0)/%passfile%

以 md5crypt 123 为例  

执行 md5crypt 123 | set newpass=  后   newpass的值的前11个字符是"Encrypted: "(包含空格)  之后的才是md5散列  所有要从第12个字符开始截取  不能改为其他的

2,pass截取的话是 %变量名:~6%

其他的还是自己想办法吧
回复

使用道具 举报

20#
 楼主| 发表于 2011-4-21 11:31:12 | 只看该作者

回复 #19 sratlf 的帖子

谢谢指点,我试试后再报告。
回复

使用道具 举报

21#
 楼主| 发表于 2011-4-21 17:01:55 | 只看该作者
若password.cfg文件的内容为:
pass1=xxxx
pass2=yyyy

执行以下代码更改密码后,不能将修改的密码保存到password.cfg(为空)文件中,请教如下代码段错在哪?

title 更改Win2003PE/Win7PE密码
echo Change who's Password:
echo 1-Win2003PE
echo 2-Win7PE
set /p user=Please Input 1 or 2 (Input Others to Return Main Menu):
#使用/message配置的gfxmenu(utf-8格式),下句不能正常执行。
if not "%user%"=="1" if not "%user%"=="2" configfile /grub/menu.lst
cat --locate=pass2 /grub/password.cfg | set lmid=
set /a lmid=0x%lmid%
#以上2句将pass2串的位置的十进制值保存到变量lmid中
cat --length=%lmid% /grub/password.cfg | set pass1=
echo %pass1:~6% | set pass1=
cat --skip=%lmid% /grub/password.cfg | set pass2=
echo %pass2:~6% | set pass2=
#上两句中的pass1、pass2的密码可为明码、md5码或两者的混合码(这可方便在设置初始密码时使用明码,在重设密码时分次保存为md5码)
if "%user%"=="1" set oldpass=%pass1%
if "%user%"=="2" set oldpass=%pass2%
echo Please Input old Password:
echo %oldpass% | password
echo Please Input New Password First
set /p newpass=Password:
echo Please Input New Password again
password %newpass%
md5crypt %newpass% | set newpass=
if "%user%"=="1" echo pass1=--md5 %newpass:~11% > /grub/password.cfg
if "%user%"=="1" echo pass2=%pass2% >> /grub/password.cfg
if "%user%"=="2" echo pass1=%pass1% > /grub/password.cfg
if "%user%"=="2" echo pass2=--md5 %newpass:~11% >> /grub/password.cfg
pause --wait=10 Password Changed OK!
configfile /grub/menu.lst
回复

使用道具 举报

22#
发表于 2011-4-21 17:20:49 | 只看该作者
@qj_tzy
抱歉,我时间有限,你可以自己找答案,或等别人的答案。
有问题可以自己调试一下原因在哪里。多跟踪几次就会发现了。

另外比较复杂的菜单建议使用批处理来实现。
回复

使用道具 举报

23#
 楼主| 发表于 2011-4-22 11:42:49 | 只看该作者

回复 #22 chenall 的帖子

谢谢指点,经一番测试,因我觉得用ima文件实现的方法简单及通用性强,我就不想再考虑用password.cfg来实现这一功能的问题了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-8 09:10

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表