如何使用C/C++创建Linux用户?
我想构建一个程序,它以用户名作为参数并创建用户及其主文件夹(具有像文件夹这样的硬编码规范,并且像用户名的安全检查不能是root或现有用户)。如何使用C/C++创建Linux用户?
我的应用程序需要创建用户才能获得SSH访问权限。
该程序将使用sudo执行。我读过它应该用C或C++而不是脚本编写,因为脚本很容易被利用。
- 你能给我一些建议或良好的做法关于如何做到这一点?
- 我应该使用一些Pam库吗?有没有例子?
- 什么是可能存在的安全缺陷?
我知道C/C++,并运行Ubuntu Lucid。
编辑:
的用户将只能sudo访问来运行特定的命令,我不希望它能够运行一个外壳或旁路某些程序(通过改变PATH环境中,例如) 。
因此,例如,我将需要覆盖路径,还有什么我应该担心的?
可能你最好的选择是调用useradd;它会做正确的事情(给定适当的参数)。
试图通过调用适当的API手动创建一个可能但不可取。
这听起来更适合我。把一个Perl脚本放在一起然后调用useradd就是我*想要解决这个问题的方法。 – 2010-08-10 22:56:48
Linux C库中没有“合适的API”。 – 2010-08-10 23:00:21
你的意思是像adduser
或useradd
?尝试查看他们的源代码。
这里没有API。您只需使用普通文件访问系统调用即可写入/etc/passwd
和/etc/group
(以及可能还有影子版本)。
为什么downvote? – 2010-08-11 00:26:33
不要忘记,在修改这些值之前,您应该始终获取对文件的独占锁定(修改这些文件的所有系统命令都这样做)。否则有文件损坏的可能性,然后你的形状非常糟糕。 – 2010-08-11 03:29:22
如果你的/ etc/passwd是空白的,我认为这是“唯一的方法”,所以你不能使用adduser将用户添加到组中 – rogerdpack 2012-03-07 23:30:50
为什么脚本比可执行文件更容易被利用?如果您拥有root用户访问权限,则您拥有root用户访问权限,而且他们无法做到。以简单的方式完成并使用使用正常linux命令的脚本(因此已经完全测试过)。 – 2010-08-11 00:15:10
用户将只有sudo访问权才能运行该特定命令,我不希望它能够运行shell或绕过某些程序(例如,通过更改PATH环境)。 – Weboide 2010-08-11 10:34:25