📅  最后修改于: 2023-12-03 15:37:18.348000             🧑  作者: Mango
Linux 中有一个 adduser 命令,可以用于添加用户。在 C 语言中,我们也可以写一个类似的程序。本文将介绍如何在 C 中模仿 Linux adduser 命令。
本程序将实现以下功能:
以下是代码实现的关键部分。
使用系统调用函数 adduser
添加用户。需要注意的是,在 Linux 中,添加用户需要 root 权限,因此我们需要使用 setuid
函数将程序的 UID 设置为 0。
// 添加用户
int ret = setuid(0);
if (ret == -1) {
perror("setuid");
exit(1);
}
system("adduser");
使用命令行参数传入用户名和用户 ID,并使用系统调用函数 useradd
设置用户名和用户 ID。
// 设置用户名和用户 ID
char cmd[1024];
sprintf(cmd, "useradd -u %d %s", uid, username);
system(cmd);
同样使用命令行参数传入用户组名和用户组 ID,并使用系统调用函数 useradd
设置用户组和用户组 ID。
// 设置用户组和用户组 ID
char cmd[1024];
sprintf(cmd, "useradd -g %d %s", gid, username);
system(cmd);
使用命令行参数传入用户主目录和登录 shell,并使用系统调用函数 useradd
设置用户主目录和登录 shell。
// 设置用户主目录和登录 shell
char cmd[1024];
sprintf(cmd, "useradd -d %s -s %s %s", home_dir, shell, username);
system(cmd);
以下是完整的代码。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char **argv) {
char *username;
int uid, gid;
char *home_dir, *shell;
if (argc != 6) {
printf("Usage: adduser <username> <uid> <gid> <home_dir> <login_shell>\n");
exit(1);
}
username = argv[1];
uid = atoi(argv[2]);
gid = atoi(argv[3]);
home_dir = argv[4];
shell = argv[5];
// 添加用户
int ret = setuid(0);
if (ret == -1) {
perror("setuid");
exit(1);
}
system("adduser");
// 设置用户名和用户 ID
char cmd[1024];
sprintf(cmd, "useradd -u %d %s", uid, username);
system(cmd);
// 设置用户组和用户组 ID
sprintf(cmd, "useradd -g %d %s", gid, username);
system(cmd);
// 设置用户主目录和登录 shell
sprintf(cmd, "useradd -d %s -s %s %s", home_dir, shell, username);
system(cmd);
return 0;
}
本文介绍了如何在 C 语言中模仿 Linux adduser 命令,实现了添加用户、设置用户名和用户 ID、设置用户组和用户组 ID、设置用户主目录和登录 shell 等功能。代码可以根据需求进行修改,达到更加灵活的使用效果。