我需要以编程方式将当前用户切换到另一个用户,然后后面的代码应该在另一个用户的环境(例如路径,权限..)中执行。 我发现'chroot()','setuid()'可能与我的情况有关,但是这些功能需要root权限,我没有root权限,但我有第二个用户的密码。我该怎么办?
我试过 shell "su - "可以切换当前用户,这个命令对我的 C++ 代码有帮助吗?
如果我的问题很愚蠢,请不要笑我,我是一个真正的 linux 初学者。 :) 谢谢!
最佳答案
when clients connect to the server, the server transfer the data what they need,but the precondition is the correct username and password.
如果您的主要要求是进行身份验证,请尝试 man pam
。还有一些库允许通过 LDAP 进行身份验证。不幸的是,我没有实现这两种方法的个人经验。
否则,重新创建完整的用户环境是不可靠且容易出错的。想象错字或无限循环,但在用户的 ~/.profile 中。
我已经有一段时间没有这样做了,但我也会尝试深入“su”的方向,找出用户 shell(来自/etc/passwd)并尝试 exec() 它就像它是登录 shell(带有“-”)。但是在那之后,您将需要以某种方式将要执行的命令传达给它,这是一个问题:shell 在批处理和交互模式下的运行方式不同。作为一种可能的 hack,我想到了 expect (man expect
),但它仍然是 IMO 太不可靠。
我过去曾在 expect
下使用过 ssh
(输入密码),但它每隔一段时间就会中断自定义用户配置文件。使用 expect
,要发送命令,必须以某种方式识别 shell 已完成初始化(配置文件和 rc 文件的执行)。但是由于许多人自定义 shell 提示符并且他们的配置文件/rc 文件打印额外的信息,expect
经常过早识别 shell 提示符。
顺便说一句,根据用户数量,可以尝试一种设置,让用户在自己的帐户下手动启动服务器。服务器将只能访问只能由用户访问的信息。
关于c++ - 如何使用 C 或 C++ 登录 linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3004907/