|
发表于 2006-3-20 13:33:38
|
显示全部楼层
我用的是FC的passwd,我以前看过redhat的passwd源码,它使用的版本似乎是redhat重新开发的,添加了新增用户的私有组之类的功能。可能--stdin选项也是它自己独自开发的。
像PASSWD这样的命令,就我碰上的而言,都有类似--stdin的选项,以接受从标准输入而来的密码,像samba的smbpasswd有一个s选项也是这样的功能。如果命令有这种选项,可以使用像下面的办法在脚本中使用:
echo -e "mypasswd\nmypasswd" | passwd --stdin user
这像就给user用户的密码设为mypasswd了。
如果该命令没有这种选项支持,可以查看手册看它使用何种加密方法,像passwd使用的crypt函数,就只能自己写一个C函数来得到一个加密字串了,以下我给出一个源码的框架,以供参考:
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- int
- main(int argc, char *argv[])
- {
- if (argc != 3)
- {
- printf("usage: %s <password> <salt>\n", argv[0]);
- exit(-1);
- }
- printf("%s\n", crypt(argv[1], argv[2]));
- exit (0);
- }
复制代码
注:关于crypt更多的细节可MAN或是到GNU的网站上去了解细节。
以上只是一个框架,写成合适的工具还需要有许多工作要做。
另外现在LINUX用了PAM的认证,也就是说有可能底层的加密方法不是用crypt,所以最好用pam的库来写。写这种程序时应该多考察一下系统所采用的办法。
用这种办法得到的加密字串再用passwd的-p选项添加到用户文件中生效。 |
|