首页 > 系统相关 >linux - passwd结构体

linux - passwd结构体

时间:2023-05-31 23:05:59浏览次数:43  
标签:tmp sp uid passwd linux char pw 结构

 

#include <stdio.h>
#include <pwd.h>
#include <unistd.h>
#include <sys/types.h>
int main ()
{
   struct passwd* tmp = NULL;
   tmp = getpwuid(geteuid());
   printf("username:%s\n",tmp->pw_name);
   printf("user password:%s\n",tmp->pw_passwd);
   printf("user ID:%d\n",tmp->pw_uid);
   printf("group ID:%d\n",tmp->pw_gid);
   printf("real name:%s\n",tmp->pw_gecos);
   printf("home directory:%s\n",tmp->pw_dir);
   printf("shell program:%s\n",tmp->pw_shell);

}
gcc -o password password.c
./password
username:root
user password:x
user ID:0
group ID:0
real name:
home directory:/root
shell program:/bin/bash

 



getpwuid () 返回user ID 对应的passwd结构体指针

#include <sys/types.h>
#include <pwd.h>
struct passwd *getpwuid(uid_t uid);



geteuid 返回有效的user ID

#include <unistd.h>
#include <sys/types.h>
uid_t geteuid(void);



passwd 结构体定义在<pwd.h>中,结构如下:

struct passwd {
	char   *pw_name;       /* username */
	char   *pw_passwd;     /* user password */
	uid_t   pw_uid;        /* user ID */
	gid_t   pw_gid;        /* group ID */
	char   *pw_gecos;      /* real name */
	char   *pw_dir;        /* home directory */
	char   *pw_shell;      /* shell program */
};

 

读取 /etc/passwd 的 API 为

struct passwd *getpwnam(const char *name);        # 通过用户名

struct passwd *getpwuid(uid_t uid);                # 通过 uid

struct passwd
{
     char *pw_name;     //用户名
     char *pw_passwd;   //用户密码
     uid_t pw_uid;      //用户id
     uid_t pw_gid;      //用户组id
     char *pw_gecos;    //用户描述
     char *pw_dir;      //用户家目录
     char *pw_shell;    //用户登录shell
};

读取 /etc/shadow 的 API 为

struct spwd *getspnam(const char *name);   # 通过用户名

struct spwd {
    char *sp_namp;     /* 登录名 */
    char *sp_pwdp;     /* 加密口令 */
    long  sp_lstchg;   /* 最后一次修改时间 */
    long  sp_min;      /* 最小时间间隔 */
    long  sp_max;      /* 最大时间间隔 */
    long  sp_warn;     /* 警告时间 */
    long  sp_inact;    /* 不活动时间 */
    long  sp_expire;   /* 失效时间 */
    unsigned long sp_flag;  /* 保留 */
};

 

标签:tmp,sp,uid,passwd,linux,char,pw,结构
From: https://blog.51cto.com/lenglingx/6390784

相关文章

  • Python判断一个数据结构是否为空的方法
    《EffectivePython》,里面提到判断字符串或者集合是否为空的原则。意思是:不要通过取字符串或者集合的长度来判断是否为空,而是要用not关键字来判断,因为当字符串或集合为空时,其值被隐式地赋为False.test_str=''test_tuple=()test_list=[]test_dict={}test_set=set()ifnot(test......
  • Linux环境下耗尽cpu占用率的指令
     模拟cpu打满foriin`seq1$(cat/proc/cpuinfo|grep"physicalid"|wc-l)`doddif=/dev/zeroof=/dev/null&done 模拟内存打满生产大文件ddif=/dev/zeroof=testbs=1Mcount=2000然后vi打开 vimtest&这种也可以。使用top命令查看linux系统cpu使用情况:#......
  • 微软正在研究使 Linux 脚本更安全
    导读据悉,微软正在研究使 Linux 脚本更安全微软正在研究使Linux 脚本更安全在本周的Linux安全峰会上,systemd的创建者LennartPoettering发表了演讲,他在过去的一年中被微软雇佣,他和微软的其它工程师们正在努力提高Linux的安全性。微软的工程师发表的演讲介绍了......
  • 2023.5.31 Linux系统⽤户管理
    1.⽤户基本概述1.1⽤户相关的命令1.2⽤户创建的原理2.⽤户密码管理3.组的基本管理4.⽤户身份切换5.⽤户身份提权6.⽇志相关审计1.⽤户基本概述Linu属于多⽤户操作系统,在windows中,可以创建多个⽤户,但不允许同⼀时间多个⽤户进⾏系统登陆,但是Linux可以同时⽀持多个⽤户同时登陆......
  • 2023.5.31-Linux系统基本权限
    02.Linux系统基本权限1.权限修改命令chmod2.属主属组修改命令chown3.基础权限设置案例Linux中的⽂件或⽬录的权限和⽤户及⽤户组关联很⼤,Linux中每个⽂件或⽬录都有⼀组共9个基础权限位,每三个字符被分为⼀组,他们分别是属主权限位(占三个字符)、属组权限位(占三个字符)、其他⽤户权......
  • 掌握嵌入式Linux编程0简介
    简介多年来,Linux一直是嵌入式计算的主流。然而,涵盖这一主题的书籍却少之又少:本书旨在填补这一空白。术语"嵌入式Linux"没有很好的定义,可以应用于从恒温器到Wi-Fi路由器到工业控制单元等各种设备内部的操作系统。然而,它们都是建立在相同的基本开源软件上。这些就是我在本书中描......
  • Linux工作原理3设备
    本章是对正常运行的Linux系统中内核提供的设备基础设施的基本考察。纵观Linux的历史,在内核如何向用户展示设备方面已经有了许多变化。我们将从传统的设备文件系统开始,看看内核如何通过sysfs提供设备配置信息。我们的目标是能够提取系统中的设备信息,以便了解一些基本的操作。后面的......
  • 【数据结构】吉司机线段树
    【数据结构】吉司机线段树(SegmentTreeBeats)吉司机线段树,是由杭州学军中学的吉如一在2016年国集论文当中提出的,解决了区间最值操作和区间历史最值问题。题目描述给出一个长度为\(n\)的数列\(A\),同时定义一个辅助数组\(B\),\(B\)开始与\(A\)完全相同。接下来进行了\(m......
  • Linux base64命令
    Linux常用命令base64命令用于编码/解码文件或标准输入输出用例:[root@localhost~]#echotest|base64#加密dGVzdAo=[root@localhost~]#echodGVzdAo=|base64-d#解密test ......
  • Linux之软件管理
    一、软件运行和编译1、软件相关概念ABI 应用程序二进制接口API应用程序接口POSIX可移植操作系统接口C语言程序的实现过程C程序源代码-->预处理-->编译-->汇编-->链接静态链接:把链接的库文件包括进现有的项目中。动态链接:可执行文件和库文件是分开的,执行的时候,根据链接关......