`
winds_he
  • 浏览: 20976 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

php 基于Linux权限登录

阅读更多
关于/etc/shadow 与 /etc/group的关系,我就不说了,上网搜出来一大箩!


今天,我想如何通过这两个文件的关系来做一个登录的界面。

首先,/etc/shadow里是存储了用户的信息包括密码等,其密码的加密模式有多种,每一种的Linux操作系统都不一样,我这次用的操作系统是Ubuntu 64位,其加密模式是sha512。

那么,我们如何把手上的密码,用PHP语言编写的程序进行加密呢?在php里,有一个crypt的函数
,其使用方法是:crypt(str,salt),解释下:str:加密的字符串;salt:格式与长度。
如:crypt('123456','$6$abcde'),最后得到的是一串加密的字符串。这串字符串就是我们shadow中用户的密码。
现在我们来看看,关键的一步如何通过PHP的权限来获取/etc/shadow的相应用户。经过我在网上搜索了大量的资料,发现最后的方法还是通过调用C程序来获取权限。下面的一段C程序是我已经验证过的代码:
	
#include <stdio.h>  
#include <stdlib.h>  
#include <sys/types.h>  
#include <unistd.h>  
int main() 
{ 
    uid_t uid ,euid;  
    uid = getuid() ; 
    euid = geteuid(); 
    printf("my uid :%u/n",getuid()); //这里显示的是当前的uid 可以注释掉.  
    printf("my euid :%u/n",geteuid()); //这里显示的是当前的euid  
    if(setreuid(euid, uid)) //交换这两个id  
	perror("setreuid"); 
    printf("after setreuid uid :%u/n",getuid()); 
    printf("afer sertreuid euid :%u/n",geteuid()); 
    system("less /etc/shadow | grep root"); //执行脚本  
    return 0; 
} 

注意:上面代码可以根据自已的需求来改写,如参数传进cmd外部命令等。

录入后,编译代码后叫test,我们还要经过最重要的一步:
su root
chmod u+s test
OK,接下来我们通过PHP的exce函数来调用了。附件是我这次做的实验证。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics