• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: 小 中 大 | 推荐给好友 上一篇 | 下一篇

请教shell编程问题...急

发布: 2007-7-04 12:06 | 作者: admin | 来源:  网友评论 | 查看: 9次 | 进入软件测试论坛讨论

领测软件测试网
:( 
我现在需要写一个在网页上修改用户口令的脚本,当用户在网页上输入自己的用户名及新旧口令后,
一、我不清楚权限的转换怎样解决。因为从网页上,用户的身份是Apache,而在shell环境下,只有超级用户和用户本人才可以修改口令,如何解决?

二、修改口令时,要求输入新旧口令,如何将从网页的表单中采集到的数据,代替输入和回车?如何代替标准输入(/dev/stdin),我用重定向的办法试了半天,无功而返,请大虾们指教......

【发表回复】【查看CU论坛原帖】【添加到收藏夹】【关闭】
 q1208c 回复于:2004-01-06 12:12:20
1. 权限问题好办,用set UID就行了。
2. 这可能有一点麻烦。你看一下 man passwd 可能有帮助。

另外,如果从网页上改password,你最好老虎好安全问题。别叫人给黑了。

 julia0928 回复于:2004-01-07 09:16:34
谢谢q1208c ,我看了精华区的一篇文章,说用纯shell 无法解决passwd的非交互输入问题,可以用expect,我不熟,正在试。

 零二年的夏天 回复于:2004-01-07 09:45:02
这样可以么?
[code:1:1c7880b7de]--stdin
              This option is used to indicate that passwd  should
              read  the  new  password from standard input, which
              can be a pipe.[/code:1:1c7880b7de]

 q1208c 回复于:2004-01-07 10:06:27
[quote:78f9820c21="julia0928"]谢谢q1208c ,我看了精华区的一篇文章,说用纯shell 无法解决passwd的非交互输入问题,可以用expect,我不熟,正在试。[/quote:78f9820c21]
shell 是可以的。
等下我找找帖上来。

 q1208c 回复于:2004-01-07 10:11:51
[code:1:96da8f1470]
#!/bin/bash
#
# set the user name and password 
#
username = user
password = password

# add new user 
#
useradd $username

#
#give the password for the new user
#
cat $password | passwd --stdin $username

# end of script. ##[/code:1:96da8f1470]
试一下先。

 零二年的夏天 回复于:2004-01-07 11:46:54
这样是可以添加用户密码的。

 tiansgx 回复于:2004-01-07 12:59:42
expect is good!

 q1208c 回复于:2004-01-07 13:01:18
谢谢!

 流氓无产者 回复于:2004-01-07 15:06:32
建议你别这样做,最好检验一道
先过滤一道user,排出特殊用户
然后再用expect改

 myfisher 回复于:2004-01-07 18:40:33
to q1208c,
我每次启动MySQL的时候都要切换目录,启动MySQL,输密码什么的,麻烦死了,也可以用脚本编程的方法来解决吗?

 q1208c 回复于:2004-01-07 19:23:13
[quote:3896d7e155="myfisher"]to q1208c,
我每次启动MySQL的时候都要切换目录,启动MySQL,输密码什么的,麻烦死了,也可以用脚本编程的方法来解决吗?[/quote:3896d7e155]
也许行吧,我没用过 MySQL 不知道行不行。可以试试。

你把过程写下来,我看看有没有办法。

 myfisher 回复于:2004-01-07 19:30:12
先要切换目录
shell>cd /usr/local/mysql/bin
shell>./mysqld_safe --user=root &
shell>./mysql -u root -p name_database
Enter Password:****

退出的时候
mysql>exit;
shell>./mysqladmin -u root shutdown -p
Enter password:****

问题就在于登陆和退出都要输密码,不知道shell编程能否完成。
请q1208c帮忙看看。我shell编程知道个大概,不熟。

 q1208c 回复于:2004-01-07 19:37:13
就算能行也不能那么做呀!因为不能把 root 密码写下来的。这是安全问题呀!还有,这是个交互式的呀,不太好办。

 myfisher 回复于:2004-01-07 19:41:40
谢谢指教。

 lightwiter 回复于:2004-01-07 19:54:28
mysql -uroot -ppasswd 


就可以了呀。反正你不用考虑安全问题的。

 lightwiter 回复于:2004-01-07 20:06:40
[quote:8e5a8cf5d6="tiansgx"]expect is good![/quote:8e5a8cf5d6]


这个怎么弄呀,导出一个什么变量名呀,passwd加什么参数??

 julia0928 回复于:2004-01-08 09:43:02
[quote:be11d7e795="q1208c"]试一下先。[/quote:be11d7e795]

 :em02: 先谢谢各位指点,按上面的做了一下,要改一点点,就是
echo $password>/tmp/1.tmp
cat /tmp/1.tmplpasswd --stdin $username
否则要报错。
再次多谢。

 零二年的夏天 回复于:2004-01-08 09:48:41
[code:1:d8f13cc751]echo $password|passwd --stdin $username[/code:1:d8f13cc751]
是否会没问题。

 julia0928 回复于:2004-01-09 11:01:39
各位大虾,现在非交互输入已没有问题了,但权限上仍有问题。用setUid试了一下,没过,passwd要求root或本人,我用su,但到了root的shell后,我的cgi程序就停止运行了,要exit后才又运行。
另外,在用户改口令前,要对其原有口令进行验证,这个在纯shell下能不能做呀?

 q1208c 回复于:2004-01-09 11:08:18
[quote:96a1cf0642="julia0928"]另外,在用户改口令前,要对其原有口令进行验证,这个在纯shell下能不能做呀?[/quote:96a1cf0642]
这个可能会有点问题,因为 password 是加密后存的。
可以试试用旧 password su - username 下。

 julia0928 回复于:2004-01-09 12:48:41
试过了,用su 可以交互地运行,但在网页上,非交互方式不行,而且shell环境一变,脚本运行就停了。

 q1208c 回复于:2004-01-09 13:02:09
那就不知了。:(

 零二年的夏天 回复于:2004-01-09 13:09:14
不知道这篇贴对您的工作是否有启发:

http://bbs.chinaunix.net/forum/viewtopic.php?t=229232

 julia0928 回复于:2004-01-13 10:03:39
各位,经过大家的指导,用sudo解决了用户验证和权限问题。

又用GNU C以及SHELL脚本做了另一套,多谢各位了!

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:[email protected] 电话:010-51297073

软件测试 | 领测国际 | ISTQB | ISTQB官网 | TMMi | TMMi认证 | 国际软件测试工程师认证 | 领测软件测试网