请教shell编程问题...急

发表于:2007-07-04来源:作者:点击数: 标签:
:( 我现在需要写一个在网页上修改用户口令的脚本,当用户在网页上输入自己的用户名及新旧口令后, 一、我不清楚权限的转换怎样解决。因为从网页上,用户的身份是Apache,而在shell环境下,只有超级用户和用户本人才可以修改口令,如何解决? 二、修改口令时

:( 
我现在需要写一个在网页上修改用户口令的脚本,当用户在网页上输入自己的用户名及新旧口令后,
一、我不清楚权限的转换怎样解决。因为从网页上,用户的身份是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:d8f13clearcase/" target="_blank" >cc751]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脚本做了另一套,多谢各位了!

原文转自:http://www.ltesting.net