zoukankan      html  css  js  c++  java
  • 【Linux_Unix系统编程】Chapter8 用户和组

    chapter8 用户和组

    8.1 密码文件 /etc/passwd
    每行都包含7个字段,之间用冒号分割,如下所示:
    mtk:x:1000:100:Michael:/home/mtk:/bin/base
    按顺序介绍着7个字段:
    登录名:
    经过加密的密码:长度为13个字符
    用户ID:
    组ID:
    注释:该字段存放关于用户的描述性文字。
    主目录:用户登录后所处的初始路径
    登录shell:一旦用于登录,便交由该程序控制

    8.2 shadow密码文件: /etc/shadow

    8.3 组文件:/etc/group
    对用户所属组信息的定义有两部分组成:
    1:密码文件中相应用户记录的组ID字段。
    2:组文件列出的用户所属各组。
    系统中的/etc/group中的每一条记录都对应一个组,包含4个字段
    users:x:100:
    jambit:x:106:clsus,felli

    分别是:
    1:组名
    2:经过加密处理过的密码
    3:组ID
    4:用户列表

    8.4 获取用户和组的信息
    本解所要介绍的库函数,其功能包括从密码文件,shadow密码文件和组文件总获取单条记录。
    从密码文件获取记录:
    函数getpwname()和getpwuid()的作用是从密码文件中获取记录
    #include <pwd.h>
    struct passwd *getpwnam(const char *name);
    struct passed *getpwuid(uid_t uid);

    从组文件中获取记录:
    函数getgrname()和getgrgid()的作用是从组文件中获取记录:
    #include <grp.h>
    struct group *getgrname(cosnt char *name);
    struct group *getgrgip(gid_t gid);

    扫描密码文件和组文件中的所有记录:
    函数setpwent(),getpwent()和endpwent()的作用是按顺序扫描密码文件中的记录。
    #include <pwd.h>
    struct passed *getepwent(void);
    void setpwent(void);
    voud endpwent(void)
    eg:
    struct passwd *pwd;
    while( (pwd = getpwent()) != NULL)
    printf("%-8s %5ld ", pwd->pw_name, (long)pwd->pw_uid);
    endpwent();

    函数gergrent(),setgrent,endgrent()针对组文件执行类似的任务。

    从shadow密码文件中个获取记录
    #include <shadow.h>
    struct spwd *getspnam(const char *name);
    struct spwd *getspent(void);
    void setspent(void);
    void endspent(void);

    8.5 密码加密和用于认证
    某些应用程序会要求用户对自身进行认证,通常采用用户名(登录名)/密码的认证方式。
    由于安全方面的原因,UNIX系统采用单向加密算法对密码进行加密,这意味着由密码的加密形式将无法还原出原始密码。因此,验证候选密码的唯一方式是使用同一算法对其进行加密,并将解密结果与存储于/etc/shadow中的密码进行匹配。
    加密算法封装于crypt()函数中。
    #define _XOPEN_SOURCE
    #include <unistd.h>
    char *crypt(const char *key, const char *salt);

    作者:长风 Email:844064492@qq.com QQ群:607717453 Git:https://github.com/zhaohu19910409Dz 开源项目:https://github.com/OriginMEK/MEK 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 感谢您的阅读。如果觉得有用的就请各位大神高抬贵手“推荐一下”吧!你的精神支持是博主强大的写作动力。 如果觉得我的博客有意思,欢迎点击首页左上角的“+加关注”按钮关注我!
  • 相关阅读:
    Delphi异常处理try except语句和try finally语句用法以及区别
    test
    Infopath resource
    C# IDE
    操作数据库
    不同版本数据库的导入
    workflow for sharepoint 2007
    http://www.cnblogs.com/BearStudyHard/archive/2008/03/26/1123267.html
    深入浅出InfoPath——安装VSTO
    如何使用Lotuscript管理Excel中的工作表?
  • 原文地址:https://www.cnblogs.com/zhaohu/p/8048057.html
Copyright © 2011-2022 走看看