社区
基础编程
帖子详情
如何实现使用cgi自动添加用户?
hu_zy
2000-06-20 07:09:00
我在做一个个人主页空间,希望可以在用户填完注册单以后就可以使用,
如何处理这个问题?
我想用c自己写一个cgi,出于安全我的密码是shadow过的,具体算法不是
很清楚。(我用的是mandrake 7.0,加密算法是MD5的)
当然还用创建用户目录的操作,都需要root的权限才可以执行。
请各位帮忙,谢谢!
...全文
165
5
打赏
收藏
如何实现使用cgi自动添加用户?
我在做一个个人主页空间,希望可以在用户填完注册单以后就可以使用, 如何处理这个问题? 我想用c自己写一个cgi,出于安全我的密码是shadow过的,具体算法不是 很清楚。(我用的是mandrake 7.0,加密算法是MD5的) 当然还用创建用户目录的操作,都需要root的权限才可以执行。 请各位帮忙,谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
skt642
2001-05-31
打赏
举报
回复
56404关注!
hu_zy
2000-06-23
打赏
举报
回复
以下是完整的源程序,在mandranke7.0下已经用过了。
编译时:gcc add.c -lcrypt就可以了。
#define _XOPEN_SOURCE
#include <stdio.h>
#include <pwd.h>
#include <unistd.h>
int main(int argc, char **argv)
{
char *pwd, line[256], sline[256], cmd[256];
FILE *uidf, *passwdf, *shadowf;
int i, uid;
if (setuid(0)==-1)
{
printf("Can not setuid. Exit.");
exit(-1);
}
pwd=crypt(argv[2],"$1$12");
for (i=0;i<256;i++)
{
line[i]=0;
sline[i]=0;
}
uid=500;
do
{
uid++;
}while(getpwuid(uid)!=NULL);
snprintf(line,256,"%s:x:%d:800::/home/web/./%s:/usr/bin/passwd\n",argv[1],uid,argv[1]);
snprintf(sline,256,"%s:%s:11128:0:99999:7:-1:-1:2858172\n",argv[1],pwd);
if ((passwdf=fopen("/etc/passwd","a+"))==NULL)
{
printf("Open passd file failed!");
exit(-1);
}
if ((shadowf=fopen("/etc/shadow","a+"))==NULL)
{
printf("Open shadow file failed!");
exit(-1);
}
fputs(line,passwdf);
fputs(sline,shadowf);
if (fclose(passwdf)==EOF)
{
printf("Close password file failed!");
exit(-1);
}
if (fclose(shadowf)==EOF)
{
printf("Close shadow password file failed!");
exit(-1);
}
// the following is adding the user's home directory.
snprintf(cmd,256,"/bin/mkdir /home/web/%s",argv[1]);
system(cmd);
snprintf(cmd,256,"/bin/chmod a+rx /home/web/%s",argv[1]);
system(cmd);
snprintf(cmd,256,"/bin/chown %s.webgroup /home/web/%s",argv[1],argv[1]);
system(cmd);
return 0;
}
hu_zy
2000-06-22
打赏
举报
回复
问题基本解决了!
写一个程序使它可以setuid(0),然后对用户的密码进行加密,再将这个串
写到/etc/shadow就可以了。
:)
以前是不知道shadow是怎么加密的,现在看来。哎。
#define _XOPEN_SOURCE
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv)
{
char *pwd;
FILE *pwdf;
printf("%s\n",pwd);
if (setuid(0)==-1)
{
printf("Can not setuid. Exit.");
exit(-1);
}
if (fopen("/etc/shadow","a+")==NULL)
{
printf("Open password file failed!");
exit(-1);
}
pwd = crypt(argv[1],"$1$12");
//再将它放到/etc/shadow里面就可以了。
}
hu_zy
2000-06-22
打赏
举报
回复
如果用root去运行apache的话,用户在它的CGI里来一句rm -fr /你不就挂了??
特别是在个人主页比较多的情况下,岂不被人骂死?
radish
2000-06-20
打赏
举报
回复
只要你的WEB SERVER执行权限是root(不过这样web server就不安全了)或者能su成ROOT
boa服务器如何运行
cgi
,BOA服务器与
CGI
在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,这种程序结构也就是大家非常熟悉的B/S结构,即在嵌入式设备上运行一个支持脚本或
CGI
功能的Web服务器,能够生成动态页面,在
用户
端只需要通过Web浏览器就可以对嵌入式设备进行管理和监控,非常方便实用。本文主要介绍BOA服务器和
CGI
的工作原理。一、BOA服务器1.嵌入式WEB服务器常见的有lighttpd、shttpd、thttpd、...
Cgi
使用
目录 一、
CGI
(通用网关接口)是外部扩展应用程序与 Web 服务器交互的一个标准接口。... 1 二、
Cgi
编程(根据
CGI
标准,编写Web服务器运行时的外部扩展应用程序)可以对客户端浏览器输入的数据经web服务器和业务逻辑程序进程进行交互操作。... 2 三、web服务器配置... 3 四、环境变量列表... 3 五、注意的问题... 3
CGI
(通用网关接口)是外部扩展应用程序与 Web 服务器交互的一个标准接口。 公共网关接口(Common Gateway Interf...
Linux
CGI
编程基础
1.为什么
使用
CGI
? 如前面所见,任何的HTML均是静态网页,它无法
实现
一些复杂的功能,而
CGI
可以为我们
实现
。如: a.列出服务器上某个目录中的文件,对目录中的文件进行操作; b.通过
CGI
实现
串口通讯; c.
实现
数据库接口; d.
实现
从摄像头读取一张图片显示在网页上
WEB之
CGI
----
CGI
详解(原理,配置及访问)
一.基本原理
CGI
:通用网关接口(Common Gateway Interface)是一个Web服务器主机提供信息服务的标准接口。通过
CGI
接口,Web服务器就能够获取客户端提交的信息,转交给服务器端的
CGI
程序进行处理,最后返回结果给客户端。 组成
CGI
通信系统的是两部分:一部分是html页面,就是在
用户
端浏览器上显示的页面。另一部分则是运行在服务器上的
Cgi
程序。它们之间的通讯方式如下...
cgi
学习笔记
1.为什么
使用
CGI
? 如前面所见,任何的HTML均是静态网页,它无法
实现
一些复杂的功能,而
CGI
可以为我们
实现
。如:a.列出服务器上某个目录中的文件,对目录中的文件进行操作;b.通过
CGI
实现
串口通讯;c.
实现
数据库接口;d.
实现
从摄像头读取一张图片显示在网页上… 等等 2.
CGI
是什么?
CGI
全称是 Common Gate Intergace ,在物理上,
CGI
是一段程序,它运行
基础编程
21,886
社区成员
140,364
社区内容
发帖
与我相关
我的任务
基础编程
从PHP安装配置,PHP入门,PHP基础到PHP应用
复制链接
扫一扫
分享
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章