多用户管理数据库
用户操作
在 SylixOS 中调用 user_db_uadd 函数可以创建一个新的账户,该函数创建账户需要访问/etc/passwd 文件和/etc/shadow 文件,因此添加新的账户需要/etc 目录下存在这两个文件。
#include <userdb.h>
int user_db_uadd(const char *user, const char *passwd,
int enable, uid_t uid, gid_t gid,
const char *comment, const char *home);
函数 user_db_uadd 原型分析:
- 此函数成功返回 0,失败返回-1 并设置错误号。
- 参数 user 是用户名。
- 参数 passwd 是用户密码。
- 参数 enable 表示是否使能用户。
- 参数 uid 是用户 ID。
- 参数 gid 是用户组 ID。
- 参数 comment 是注释信息。
- 参数 home 是用户主目录。
需要注意的是,调用 user_db_uadd 函数只能在存在的用户组中创建新的账户,如果指定的组 ID 不存在,则创建新账户将失败。
调用 user_db_umod 函数可以修改一个存在账户的使能状态、注释和用户主目录。
#include <userdb.h>
int user_db_umod(const char *user, int enable,
const char *comment, const char *home);
函数 user_db_umod 原型分析:
- 此函数成功返回 0,失败返回-1 并设置错误号。
- 参数 user 是用户名。
- 参数 enable 表示是否使能用户。
- 参数 comment 是注释信息。
- 参数 home 是用户主目录。
调用 user_db_uget 函数可以获得指定账户的信息,如下描述:
#include <userdb.h>
int user_db_uget(const char *user, int *enable,
uid_t *uid, gid_t *gid,
char *comment, size_t sz_com,
char *home, size_t sz_home);
函数 user_db_uget 原型分析:
- 此函数成功返回 0,失败返回-1 并设置错误号。
- 参数 user 是用户名。
- 输出参数 enable 表示是否使能用户。
- 输出参数 uid 是用户 ID。
- 输出参数 gid 是用户组 ID。
- 输出参数 comment 返回注释信息。
- 参数 sz_com 是注释缓冲区大小。
- 输出参数 home 返回用户主目录。
- 参数 sz_home 是用户主目录缓冲区大小。
调用 user_db_udel 函数可以删除一个存在的账户。
#include <userdb.h>
int user_db_udel(const char *user);
函数 user_db_udel 原型分析:
- 此函数成功返回 0,失败返回-1 并设置错误号。
- 参数 user 是用户名。
组操作
下面函数提供了 SylixOS 中用户组的操作方法,user_db_gadd 函数向 SylixOS 中添加一个新的用户组,user_db_gget 函可以获得指定用户组 group 的组 ID,user_db_gdel 函数将删除一个指定的组 group 。
#include <userdb.h>
int user_db_gadd(const char *group, gid_t gid);
int user_db_gget(const char *group, gid_t *gid);
int user_db_gdel(const char *group);
以上函数原型分析:
- 以上函数成功时返回 0,失败时返回-1 并设置错误号。
- 参数 group 是组名。
- 参数 gid 是组 ID,user_db_gget 函数的 gid 参数用来存放返回的组 ID。
密码操作
#include <userdb.h>
int user_db_pmod(const char *user,
const char *passwd_old,
const char *passwd_new);
函数 user_db_pmod 原型分析:
- 此函数成功返回 0,失败返回-1 并设置错误号。
- 参数 user 是用户名。
- 参数 passwd_old 是先前的密码。
- 参数 passwd_new 是新的密码。
调用 user_db_pmod 函数可以修改指定用户的密码,特殊地,如果参数 passwd_new 为 NULL,则清除用户密码。
用户 Shell 命令
在 UNIX 系统中,root 账号具有“至高无上”的权利,也就是说,具有了 root 权限的账户可以做任何事情,甚至将系统破坏。同样 SylixOS 也具有类似的权限管理机制,具有了 SylixOS root 权限的账户可以做 SylixOS 中的任何事情(例如:删除其他账户或者底层的工作)。因此用户管理要求一般用户的操作权限低于 root 用户的权限,下面是 SylixOS 中添加用户、修改用户、删除用户的 Shell 命令。
uadd 命令可以向 SylixOS 中添加新用户:
【命令格式】
uadd name password enable[0 / 1] uid gid comment homedir
【常用选项】
无
【参数说明】
name :创建的帐户名
password :新账户密码
enable :是否使能新账户(0不使能,1使能)
uid :新账户ID
gid :新账户组ID
comment :注释信息
homedir :新账户主目录(如/home/flags)
下面命令向 SylixOS 添加新账户 flags:
# uadd flags 123456 1 10 2 a_new_user /home/flags
上面命令显示:新账户 flags、账户密码是 123456、使能这个账户(1)、账户 ID 是 10、组 ID 是 2、账户的主目录是/home/flags,注释标注这是一个新的账户。
注:新用户创建之前必须先创建指定的用户组。
umod 命令可以修改一个存在的账户:
【命令格式】
umod name enable[0 / 1] comment homedir
【常用选项】
无
【参数说明】
name :账户名
enable :是否使能账户(0不使能,1使能)
comment :注释信息
homedir :账户主目录
下面是如何修改一个账户的信息,命令显示将账户 flags 的状态置为禁止,置为禁止状态的账户将不具有操作 SylixOS 的权限。
# umod flags 0 a_mod_user /home/flags
udel 命令可以删除一个存在的账户:
【命令格式】
udel name
【常用选项】
无
【参数说明】
name :账户名
gadd命令添加一个新的用户组到 SylixOS:
【命令格式】
gadd group_name gid
【常用选项】
无
【参数说明】
group_name :用户组名
gid :用户组ID
下面命令向 SylixOS 添加一个新组 grp 组 ID 为 11:
# gadd grp 11
gdel 命令删除一个存在的组,需要注意的是,被删除的组必须是一个不存在用户的组(即空组):
【命令格式】
gdel group_name
【常用选项】
无
【参数说明】
group_name :用户组名
下面命令删除组 grp:
# gdel grp
pmod 命令可以修改指定用户的密码:
【命令格式】
pmod name old_password new_password
【常用选项】
无
【参数说明】
name :用户名
old_password :先前密码
new_password :新密码
下面命令修改用户 flags 的密码 123456 为 abcd:
# pmod flags 123456 abcd