Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 当不以root身份运行时,如何在linux中检查登录凭据?_C_Linux_Passwords_Root_Authentication - Fatal编程技术网

C 当不以root身份运行时,如何在linux中检查登录凭据?

C 当不以root身份运行时,如何在linux中检查登录凭据?,c,linux,passwords,root,authentication,C,Linux,Passwords,Root,Authentication,我已经用C编写了一个CGIBIN应用程序,它在浏览器中运行,允许用户在Linux机器上打开一个交互式shell并查看和编辑文件。它作为标准的ApacheWWW数据用户运行。我只是在其中添加了一个登录屏幕,用户在表单中键入自己的姓名和密码,但我无法使用getspnam对用户进行身份验证,因为此函数仅在以root用户身份运行时有效 当不以root用户身份运行时,我必须检查用户的登录凭据的哪些选项 PS:在我的交互式shell中,我可以键入su root,然后键入我的密码,它确实提升到root,因此显

我已经用C编写了一个CGIBIN应用程序,它在浏览器中运行,允许用户在Linux机器上打开一个交互式shell并查看和编辑文件。它作为标准的ApacheWWW数据用户运行。我只是在其中添加了一个登录屏幕,用户在表单中键入自己的姓名和密码,但我无法使用getspnam对用户进行身份验证,因为此函数仅在以root用户身份运行时有效

当不以root用户身份运行时,我必须检查用户的登录凭据的哪些选项


PS:在我的交互式shell中,我可以键入su root,然后键入我的密码,它确实提升到root,因此显然可以以交互方式进行操作。

关于你的PS:好吧,当你使用su root时,你正在切换到root用户。所以是的,当然,root可以读取阴影文件,你们都准备好了

关于您的问题:难道您不能通过调用setuid或类似程序来执行身份验证,让您的apache进程临时提升到root吗


祝你好运

关于你的PS:好吧,当你做su root时,你正在切换到root用户。所以是的,当然,root可以读取阴影文件,你们都准备好了

关于您的问题:难道您不能通过调用setuid或类似程序来执行身份验证,让您的apache进程临时提升到root吗


祝你好运

我想你想看看。好了,PAM会为您处理所有杂乱的事情,您只需要执行一些函数调用,在任何后端对用户进行身份验证,在Linux主机上对用户进行身份验证,无论是影子密码、nis、ldap还是其他


这里有一个关于将C代码与它们集成的简短介绍。

我想您应该看看。好了,PAM会为您处理所有杂乱的事情,您只需要执行一些函数调用,在任何后端对用户进行身份验证,在Linux主机上对用户进行身份验证,无论是影子密码、nis、ldap还是其他


这里有一个关于将C代码与它们集成的简短介绍。

正如所建议的,我认为PAM是实现这一点的现代方法。但是,如果你想走老路,你需要创建一个setuid根程序而不是脚本来进行身份验证

setuid根程序有很多缺陷,这就是PAM可能更好的原因


关于安全编写setuid root程序的一些好文章。

正如所建议的,我认为PAM是实现这一点的现代方法。但是,如果你想走老路,你需要创建一个setuid根程序而不是脚本来进行身份验证

setuid根程序有很多缺陷,这就是PAM可能更好的原因


请阅读一些关于安全编写setuid root程序的好文章。

应该注意,这只适用于su是suid root。如果不是的话,无论你尝试切换到哪个用户,它都会有同样的问题。我不确定我是否理解你所说的@Evan Teran。他正在做一个su root来切换到root用户。如果他使用su randomUser,那么他将无法以randomUser的身份读取root的文件,除非root授予randomUser这样做的权限。这不是一个既定的目标吗?还是我误解了你?使用SetUID解决了我的问题。我以前不知道这个功能,因为我是Linux新手。谢谢@mrduclaw:问题是读取/etc/shadow,它只能由root用户读取。su是一个suid root程序,这意味着当您运行它时,无论哪个用户执行它,它都以root用户的身份运行。这就是允许su进行身份验证和切换用户的原因。如果su不是suid root,它无法读取/etc/shadow,也无法执行任何操作。最后,例如,如果我执行:su-etran,su二进制文件将作为root运行,因为它是suid root,并且仍将读取/etc/shadow以验证我的凭据,然后它将把我的用户id切换到etran。基本上,原始答案的第一段没有说任何有意义的话。应该注意的是,这只适用于su,因为su是suid root。如果不是的话,无论你尝试切换到哪个用户,它都会有同样的问题。我不确定我是否理解你所说的@Evan Teran。他正在做一个su root来切换到root用户。如果他使用su randomUser,那么他将无法以randomUser的身份读取root的文件,除非root授予randomUser这样做的权限。这不是一个既定的目标吗?还是我误解了你?使用SetUID解决了我的问题。我以前不知道这个功能,因为我是Linux新手。谢谢@mrduclaw:问题是读取/etc/shadow,它只能由root用户读取。su是一个suid root程序,这意味着当您运行它时,无论哪个用户执行它,它都以root用户的身份运行。这就是允许su进行身份验证和切换用户的原因。如果su不是suid root,它将无法读取/etc/shadow,并且将无法执行任何操作。最后,例如,如果我执行:su eteran,su二进制文件将作为root运行,因为它是suid root,并且仍将作为root运行
读取/etc/shadow以验证我的凭据,然后它会将我的用户id切换到eteran。基本上,你原始答案的第一段没有说任何有意义的话。我只是意识到你也可以使用“sudo”将你的用户id改为root。这只是一个已内置安全性的setuid根程序。请小心设置,否则,就像使用自己的setuid root程序一样,您的系统会受到攻击。我刚刚意识到,您也可以使用“sudo”将用户id更改为root。这只是一个已内置安全性的setuid根程序。请小心设置,否则,就像滚动您自己的setuid根程序一样,您将使系统易受攻击。