Chinaunix首页 | 论坛 | 博客
  • 博客访问: 598820
  • 博文数量: 66
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1810
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-23 13:53
个人简介

linux

文章分类

全部博文(66)

文章存档

2016年(1)

2015年(14)

2014年(32)

2013年(19)

分类: LINUX

2013-09-23 22:40:54

1.The etc/passwd file 

描述:
Passwd是个文本文件,它包含了一个系统帐户列表, 给出每个帐户一些有用的信息,比如用户  ID,组ID,家目录,shell,等.通常它也包含了每个用户经过加密的密码.它通常应该是可读的(许多命令,工具程序,象 ls(1) 用它做用户Id 到用户名称的映射),但是只允许超级用户有写方式权限.

下面是ubuntu12.04显示文件的部分内容:


1.1(passwd文件)里每行一条记录,并且每行有这样的格式:
                            
                  account:password:UID:GID:GECOS:directory:shell
                   (帐号:密码:用户ID:组ID:一般的信息:目录:shell)


字段描述如下:
    1. account                 使用者在系统中的名字,它不能包含大写字母.

    1. password              加密的用户密码,或者星号。

    1. UID                       用户 ID 数。

    1. GID                       用户的主要组 ID 数

    1. GECOS                  这个字段是可选的,通常为存放信息而设计的,通常它包含用户的全名

    1. directory              用户的 $HOME 目录.

    1. shell                     登录时运行的程序(如果空的,使用 /bin/sh).


           info passwd查看文档更详细些;                     

        注意: 如果你想建立用户组,他们的GID 必须相等并且一定是在/etc/passwd的一条记录,要不组不存在。



 1.2passwd结构:


1.3代码示例:


点击(此处)折叠或打开

  1. #include <sys/types.h>
  2. #include <pwd.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <unistd.h>

  6. int main(int argc, char const *argv[])
  7. {
  8.     uid_t uid;
  9.     gid_t gid;
  10.     
  11.     struct passwd *pw;
  12.     uid = getuid();
  13.     gid = getgid();
  14.     
  15.     printf("User is %s\n", getlogin());
  16.     
  17.     printf("User IDs: uid=%d, gid=%d\n", uid, gid);
  18.     
  19.     pw = getpwuid(uid);
  20.     printf("UID passwd entry:\n name=%s, uid=%d, gid=%d, home=%s,shell=%s\n",pw->pw_name, pw->pw_uid, pw->pw_gid, pw->pw_dir, pw->pw_shell);
  21.     
  22.     pw = getpwnam("root");
  23.     printf("root passwd entry:\n");
  24.     printf("name=%s,uid=%d,gid=%d,home=%s,shell=%s\n", pw->pw_name, pw->pw_uid, pw->pw_gid,pw->pw_dir,pw->pw_shell);
  25.     
  26.     return 0;
  27. }




    2. The /etc/shadow file
描述:

Linux /etc/shadow文件中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生。
它的文件格式与/etc/passwd类似,由若干个字段组成,字段之间用“:”隔开。    



下面是ubuntu12.04显示文件的部分内容:



2.1(shadow文件)里每行一条记录,并且每行有这样的格式:

字段描述如下:
  • 用户登录名

  • 加密口令

  • 上次更改口令以来经过的时间

  • 经过多少天允许更改

  • 要求更改的尚余天数

  • 到期警告天数

  • 账户不活动之前尚余天数

  • 保留

2.2shadow结构:





    3. The /etc/group file
描述:
将用户分组是Linux系统中对用户进行管理及控制访问权限的一种手段。每个用户都属于某个用户组;一个组中可以有多个用户,
一个用户也可以属于不同的组。当一个用户同时是多个组中的成员时,在/etc/passwd文件中记录的是用户所属的主组,也就是
登录时所属的默认组,而其他组称为附加组。




下面是ubuntu12.04显示文件的部分内容:



3.1(group文件)里每行一条记录,并且每行有这样的格式:

                                    组名:口令:组标识号:组内用户列表
字段描述如下:
  • “组名”是用户组的名称,由字母或数字构成。与/etc/passwd中的登录名一样,组名不应重复。

  • “口令”字段存放的是用户组加密后的口令字。一般Linux系统的用户组都没有口令,即这个字段一般为空,或者是*。

  • “组标识号”与用户标识号类似,也是一个整数,被系统内部用来标识组。

  • “组内用户列表”是属于这个组的所有用户的列表/b],不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,
         也可能是附加组。

3.3group结构:



3.4代码示例:

点击(此处)折叠或打开

  1. #include <grp.h>
  2. #include <stdio.h>
  3. int main(){
  4.     setgrent();
  5.     struct group *gp=getgrent();
  6.     while(gp){
  7.         printf("%s:%s:%d:",gp->gr_name,gp->gr_passwd,gp->gr_gid);
  8.         if(*(gp->gr_mem)){
  9.             while(*(gp->gr_mem+1)){
  10.                 printf("%s,",*(gp->gr_mem));
  11.                 gp->gr_mem++;
  12.             }
  13.             printf("%s",*(gp->gr_mem));
  14.         }
  15.         printf("\n");
  16.         gp=getgrent();
  17.     }
  18.     endgrent();
  19.     return 0;
  20. }
4.三者之间的关系:(鸟哥的私房菜



阅读(3262) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~