linux总是弹出root提示窗口,Linux PAM Program/弹出获得root权限对话框

什么也不要说,先来一个程序吧。

/*

注意要和你的系统一致redhat是这样/etc/pam.d/check_user

auth required /lib/security/pam_unix_auth.so

account required /lib/security/pam_unix_acct.so

1.如果需要出现密码弹出框还需要在添加

/etc/security/console.apps/check_user

USER=root

PROGRAM=~/check_user #这个路径就是下面编译好后的路径,不能和3中作链接的路径一样

SESSION=true

2.再对/usr/bin/consolehelper作ln

sudo ln -s consolehelper check_user

3.这样运行/usr/bin/check_user就实际在调用consolehelper,再去读取

/etc/security/console.apps/check_user里PROGRAM设定的路径

4.编译时要这样:

gcc check.c -ldl -lpam -lpam_misc -o ~/check_user

*/

#include

#include

#include

static struct pam_conv conv = {

misc_conv, //定义在pam_misc.h中, 方便你编程

NULL

};

int main(int argc, char *argv[])

{

pam_handle_t *pamh=NULL;

int retval;

const char *user="root"; //用户名设置为系统上的一个合法用户

if(argc == 2) {

user = argv[1];

}

if(argc > 2) {

fprintf(stderr, "Usage: check_user [username]\n");

exit(1);

}

retval = pam_start("check_user", user, &conv, &pamh);

/* 开始 */

if (retval == PAM_SUCCESS)

retval = pam_authenticate(pamh, 0);

/* 认证是不是该用户? 提示你输入一个密码 */

if (retval == PAM_SUCCESS)

retval = pam_acct_mgmt(pamh, 0);

/* 账号是否有效? */

if (retval == PAM_SUCCESS) {

fprintf(stdout, "Authenticated\n");

} else {

fprintf(stdout, "Not Authenticated\n");

}

if (pam_end(pamh,retval) != PAM_SUCCESS) {

/* 结束 */

pamh = NULL;

fprintf(stderr, "check_user: failed to release authenticator\n");

exit(1);

}

return ( retval == PAM_SUCCESS ? 0:1 ); /* indicate success */

}

#gcc check.c -ldl -lpam -lpam

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值