c++ - 如何使用 C 或 C++ 登录 linux

标签 c++ linux

我需要以编程方式将当前用户切换到另一个用户,然后后面的代码应该在另一个用户的环境(例如路径,权限..)中执行。 我发现'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/

相关文章:

C++程序错误

c++ - 手动删除函数返回的指针

linux - 无法连接到 PostgreSQL 服务器 : could not connect to server: Permission denied

c++ - 检查当前线程是否为主线程

linux - 在基于 SMP 的 linux 系统中访问另一个 cpu 的 "current_task"指针

c++ - Qt 中具有高度依赖函数的单元测试

c++ - 如何渲染多个纹理?

c++ - 指向成员函数的函数指针数组

c - C程序调用execl()后如何控制父进程的执行?

linux - 用于在千个文件中搜索错误代码然后在文本文件中打印计数的 Unix shell 脚本