C++ 如何使用C/C++;?

C++ 如何使用C/C++;?,c++,c,linux,C++,C,Linux,我想构建一个程序,该程序以用户名作为参数,并创建用户及其主文件夹(使用一些硬编码规范,如folder,并且用户名等安全检查不能是root用户或现有用户) 我的应用程序需要创建用户才能授予SSH访问权限 程序将使用sudo执行。我读过它应该用C或C++代替脚本,因为脚本很容易被开发。 你能给我一些关于如何实现这一目标的建议或良好实践吗 我应该使用一些Pam库吗?有什么例子吗 可能存在哪些安全缺陷? 我知道C/C++和运行UbuntuLucid 编辑: 用户只有sudo权限来运行该特定命令,我不

我想构建一个程序,该程序以用户名作为参数,并创建用户及其主文件夹(使用一些硬编码规范,如folder,并且用户名等安全检查不能是root用户或现有用户)

我的应用程序需要创建用户才能授予SSH访问权限

程序将使用sudo执行。我读过它应该用C或C++代替脚本,因为脚本很容易被开发。
  • 你能给我一些关于如何实现这一目标的建议或良好实践吗
  • 我应该使用一些Pam库吗?有什么例子吗
  • 可能存在哪些安全缺陷?
我知道C/C++和运行UbuntuLucid

编辑:


用户只有sudo权限来运行该特定命令,我不希望它能够运行shell或绕过某些程序(例如,通过更改路径环境)


因此,例如,我需要覆盖路径我还应该担心什么?

你的意思是像
adduser
useradd
?试着看看他们的源代码。

也许你最好的办法是调用useradd;它将做正确的事情(给定适当的参数)


尝试通过调用适当的API手动创建一个是可能的,但不可取。

没有用于此的API。您只需使用普通的文件访问系统调用写入
/etc/passwd
/etc/group
(也可能是影子版本)。

这听起来更符合我的要求。我认为,组合一个Perl脚本,然后调用useradd可以解决这个问题。Linux C库中没有“适当的API”。为什么脚本比可执行文件更容易利用?如果您有根访问权限,那么您就有根访问权限,并且他们的权限是您不能做的。用一种简单的方法,使用一个使用普通linux命令的脚本(因此已经过完全测试)。用户只有sudo权限来运行该特定命令,我不希望它能够运行shell或绕过某些程序(例如,通过更改路径环境)。不要忘记,在修改这些值之前,您应该始终获得文件的独占锁(所有修改这些文件的系统命令都会这样做)。否则,可能会导致文件损坏,然后您的状态非常糟糕。我认为如果您的/etc/passwd为空,因此无法使用adduser将用户添加到组中,这是“唯一的方法”