linux身份鉴别检查方法,Linux身份鉴别机制实现分析(6)

本文详细分析了Linux系统中PAM(Pluggable Authentication Modules)的身份鉴别机制,重点介绍了parse_args()、isipaddr()、are_addresses_equal()、login_access()等核心函数的功能和作用。这些函数在配置文件解析、IP地址判断、权限验证等方面起到关键作用,确保用户登录的安全性和权限控制。
摘要由CSDN通过智能技术生成

原标题:Linux身份鉴别机制实现分析(6)

2.4.2.5内部函数

1. parse_args()

函数原型:

static int parse_args(pam_handle_t *pamh, struct login_info *loginfo,int argc, const char **argv)

函数功能:是用于解析配置文件中的信息

函数参数:pam_handle_t结构体表示整个PAM过程信息,loginfo表示用户信息,argc是配置文件中命令行参数个数,argv表示配置文件中命令行参数数组。

返回值:正确则返回0。

2. isipaddr()

函数原型:static int isipaddr (const char *string, int *addr_type,struct sockaddr_storage *addr)

函数功能:判断传递的字符string是否为ip信息

函数参数:string表示传递的表示IP的字符串,addr_type表示IP地址类型,addr表示用于存储的socket中地址类型。

返回值:整型的is_ip,是IP则返回0,不是则返回1.

3. are_addresses_equal()

函数原型:static int are_addresses_equal (const char *ipaddr0, const char *ipaddr1,const char *netmask)

函数功能:函数是将得到的IP地址与真实的IP相比较,查看是否一致。

函数参数:获得的ipaddr0和ipaddr1都是IP地址,netmask也表示IP地址。

返回值:相同则返回0。

4. login_access()

函数原型:static int login_access (pam_handle_t *pamh, struct login_info *item)

函数功能:通过读取配置文件中的信息验证用户是否具有权限

函数参数:pamh为整个PAM的过程参数,item是login_info的结构体表示传递的用户信息。

返回值:成功则返回0。

5. list_match()

函数原型:static int list_match (pam_handle_t *, char *, char *, struct login_info *,match_func *);

函数功能:查看配置文件中该行是否符合编写要求

函数参数:pam_handle_t为整个PAM过程,login_info表示用户信息。

返回值:成功则返回0。

7. user_match()

函数原型:static int user_match (pam_handle_t *, char *, struct login_info *);

函数功能:查看用户名是否相符。

函数参数:pam_handle_t为整个PAM过程,login_info表示用户信息。

返回值:若相符合则返回0。

8. group_match()

函数原型:static int group_match (pam_handle_t *, const char *, const char *, int);

函数功能:查看组名是否相符合。

函数参数:pam_handle_t为整个PAM过程,login_info表示用户信息。

返回值:若相符合则返回0。

9. from_match()

函数原型:static int from_match (pam_handle_t *, char *, struct login_info *);

函数功能:查看远程登录名是否符合。

函数参数:pam_handle_t为整个PAM过程,login_info表示用户信息。

返回值:若相符合则返回0。

10. string_match()

函数原型:static int string_match (pam_handle_t *, const char *, const char *, int);

函数功能:查看字符串是否相符合。

函数参数:pam_handle_t为整个PAM过程,login_info表示用户信息

返回值:若相符合则返回0。

11. network_netmask_match()

函数原型:static char *number_to_netmask (long netmask, int addr_type,

char *ipaddr_buf, size_t ipaddr_buf_len)

函数功能:查看网络掩码是否相符合。

函数参数:netmask表示网络掩码,addr_type表示传递的网络掩码类型,ipaddr_buf表示网络地址,ipaddr_bud_len表示地址长度。

返回值:若符合则返回0。

这里对login_access()函数进行更具体的分析,其流程图如下:

f78034a2c8f8291a3a1ccf55a1814d06.png

图2-8 pam_sm_authenticate函数流程图

(1)打开相应配置文件,开始逐行读取配置文件信息;

(2)如果行开头为“#”,则忽略此行,读取下一行命令;

(3)如果有空白行,则跳过空白行,读取下一行命令;

(4)获得配置文件中关于用户权限、用户名、以及登录来源的信息,并查看格式是正确;

(5)根据得到的用户名及登录来源通过list_match查看是否为正确的用户名及登录来源;

(6)如果都符合且权限行为“+”,则赋予权限。

2.4.2.6 核心代码注释

8b45d2f5463a0df4962370cc56c7a958.png

a0db49d2a2c9138088f1bf7925b6053e.png

6334d1070861721c6353120a1ec69be2.png

a9621f1fb576d62ca31ed094bdde94be.png

bc0640e1362e8a0d2bdb885aab0c9d74.png

0bd7fd6fb98dcb01f56eb08277d9f940.png

16a47da82595c7d421cc7d74558f76d6.png

734c6c4cf49135bf9f3fa375a7a6f52f.png

02037a932b147bab1c531b618113d6b9.png

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值