- 浏览: 256514 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
soho00147:
我的想法是在这个插件的基础上编写更加强大的插件,扫描目录时发现 ...
maven增量编译的思考 -
soho00147:
如果没有变动则 maven install
使用时,直接 ...
maven增量编译的思考 -
soho00147:
可以参考这个插件,这个插件是对maven项目以module级别 ...
maven增量编译的思考
转载
一.PAM简介
Linux-PAM(linux可插入认证模块)是一套共享库,使本地系统管理员可以随意选择程序的认证方式.
换句话说,不用(重新编写和)重新编译一个包含PAM功能的应用程序,就可以改变它使用的认证机制.
这种方式下,就算升级本地认证机制,也不用修改程序.
PAM使用配置文件/etc/pam.conf(或/etc/pam.d/下的文件),来管理对程序的认证方式.应用程序
调用相应的配置文件,从而调用本地的认证模块.模块放置在/lib/security下,以加载动态库的形式进
行调用(dlopen(3)).
像我们使用su命令时,系统会提示你输入root用户的密码.这就是su命令通过调用PAM模块实现的.
二. PAM的配置文件介绍
1.PAM配置文件的格式
PAM配置文件有两种写法: 一种是写在/etc/pam.conf中.格式如下:
ftpd auth required pam_unix.so nullok
ftpd:表示服务名,即针对哪一个服务进行的认证配置.
required:为模块类型.PAM有四中模块类型,分别代表不同的任务类型.
pam_unix.so:为模块路径.即要调用模块的位置.
nullok:为模块参数,即传递给模块的参数.
另一种写法是,将PAM配置文件放到/etc/pam.d/目录下,使用应用程序名作为配置文件名.如:
vsftpd,login等.配置文件的格式与pam.conf类似,只是少了最左边的服务名列.如:/etc/pam.d/cups
#%PAM-1.0
auth required pam_stack.so service=system-auth
account required pam_stack.so service=system-auth
2.PAM的模块类型
Linux-PAM有四种模块类型,分别代表四种不同的任务.它们是:认证管理,账号管理,会话管理和密码
管理.一个类型可能有多行,它们按顺序依次由PAM模块调用.
auth
用来对用户的身份进行识别.如:提示用户输入密码,或判断用户是否为root等.
account
对帐号的各项属性进行检查.如:是否允许登录,是否达到最大用户数,或是root用户是否允许在
这个终端登录等.
session
这个模块用来定义用户登录前的,及用户退出后所要进行的操作.如:登录连接信息,用户数据的
打开与关闭,挂载文件系统等.
password
使用用户信息来更新.如:修改用户密码.
3.PAM的控制标记
PAM使用控制标记来处理和判断各个模块的返回值.
required
这个标记表示需要模块返回一个成功值.如果返回失败,则继续进行同类型的下一个操作,当
所有此类型的模块都执行完后.才返回失败值.
requisite
与required相似,但是如果这个模块返回失败,则立刻向应用程序返回失败,表示此类型失败.
不再进行同类型后面的操作.
sufficient
如果此模块返回成功,则直接向应用程序返回成功,表示此类型成功.不再进行同类型后面
的操作.如果失败,也不会影响这个类型的返回值.
optional
使用这个标记的模块,将不进行成功与否的返回.一般返回一个PAM_IGNORE(忽略).
4.模块路径
模块路径.即要调用模块的位置. 一般保存在/lib/security/下,如: pam_unix.so
同一个模块,可以出现在不同的类型中.它在不同的类型中所执行的操作都不相同.这是由于每个模块
针对不同的模块类型,编制了不同的执行函数.
5.模块参数
模块参数,即传递给模块的参数.参数可以有多个,之间用空格分隔开,如:
password required pam_unix.so nullok obscure min=4 max=8 md5
三.编写PAM配置文件
1.PAM模块介绍
pam_unix.so模块:
auth类型: 提示用户输入密码,并与/etc/shadow文件相比对.匹配返回0(PAM_SUCCESS).
account类型: 检查用户的账号信息(包括是否过期等).帐号可用时,返回0.
password类型: 修改用户的密码. 将用户输入的密码,作为用户的新密码更新shadow文件
pam_cracklib.so模块:
password类型: 这个模块可以插入到一个程序的密码栈中,用于检查密码的强度.
这个模块的动作是提示用户输入密码,并与系统中的字典进行比对,检查其强度.
pam_loginuid.so模块:
session类型:用来设置已通过认证的进程的uid.以使程序通过正常的审核(audit).
pam_securetty.so模块:
auth类型: 如果用户要以root登录时,则登录的tty必须在在/etc/securetty中法之前.
pam_rootok.so模块:
auth类型: pam_rootok模块用来认证用户id是否为0.为0返回”PAM_SUCCESS”.
pam_console.so模块:
session类型: 当用户登录到终端时,改变终端文件文件的权限.在用户登出后,再将它们修改回来.
pam_permit.so模块:
auth,account,password,session类型: pam_permit模块任何时候都返回成功.
pam_env.so模块 :
auth类型: pam_env允许设置环境变量.默认下,若没有指定文件,将依据
/etc/security/pam_env.conf进行环境变量的设置.
pam_xauth.so模块:
session类型: pam_xauth用来在用户之间转发xauth-key.
如果不进行pam_xauth,当用户调用su成为另一个用户时,这个用户将不可以再访问原来用户的X显示,
因为新用户没有访问显示的key.pam_xauth解决了当会话建立时,从原始用户到目标用户转发key和用户
退出时销毁key的问题.
实验:
注销/etc/pam.d/su中的"session optional /lib/security/$ISA/pam_xauth.so"行
在桌面终端执行su切换到另一个用户时,执行xterm会报错,提示无法访问DISPLAY.
删除注释后,再使用su切换到另一个用户时,执行xterm,会正常打开一个xterm终端窗口.
pam_stack.so模块:
auth,account,password,session: pam_stack可以调用另一个服务.也就是多个服务可以包含到一个
设置中.当需要修改时,只修改一个文件就可以了.
pam_warn.so模块:
auth,account,password,session: pam_warn用来记录服务,终端,用户,远程用户和远程主机的信息
到系统日志.模块总是返回PAM_IGNORE,意指不希望影响到认证处理.
2.编写PAM配置文件
以root身份执行: # vi /etc/pam.d/pamtest
#提示用户输入密码
auth required pam_unix.so
# 验证用户账号是否可用
account required pam_unix.so
# 向系统日志输出一条信息
account required pam_warn.so
四.基于PAM机制的应用程序
1.编写C源码
#include <security/pam_appl.h>
#include <security/pam_misc.h>
#include <security/pam_modules.h>
#include <stdio.h>
/* 文件pamtest.c
此程序从命令行接收一个用户名作为参数,然后对这个用户名进行auth和account验证.
*/
// 定义一个pam_conv结构,用于与pam通信
static struct pam_conv conv = {
misc_conv,
NULL
};
// 主函数
int main(int argc, char *argv[])
{
pam_handle_t *pamh=NULL;
int retval;
const char *user="nobody";
const char *s1=NULL;
if(argc == 2)
user = argv[1];
else
exit(1);
if(argc > 2) {
fprintf(stderr, "Usage: pamtest0 [username]\n");
exit(1);
}
printf("user: %s\n",user);
retval = 0;
//调用pamtest配置文件
retval = pam_start("pamtest", user, &conv, &pamh);
if (retval == PAM_SUCCESS)
//进行auth类型认证
retval = pam_authenticate(pamh, 0); /* is user really user? */
else {
//如果认证出错,pam_strerror将输出错误信息.
printf("pam_authenticate(): %d\n",retval);
s1=pam_strerror( pamh, retval);
printf("%s\n",s1);
}
if (retval == PAM_SUCCESS)
//进行account类型认证
retval = pam_acct_mgmt(pamh, 0); /* permitted access? */
else {
printf("pam_acct_mgmt() : %d\n",retval);
s1=pam_strerror( pamh, retval);
printf("%s\n",s1);
}
/* This is where we have been authorized or not. */
if (retval == PAM_SUCCESS) {
fprintf(stdout, "Authenticated\n");
} else {
fprintf(stdout, "Not Authenticated\n");
}
if (pam_end(pamh,retval) != PAM_SUCCESS) { /* close Linux-PAM */
pamh = NULL;
fprintf(stderr, "pamtest0: failed to release authenticator\n");
exit(1);
}
return ( retval == PAM_SUCCESS ? 0:1 ); /* indicate success */
}
//END
2.编译
$ cc -o pamtest pamtest.c -lpam -lpam_misc -ldl
3.编写PAM配置文件
以root身份执行: vi /etc/pam.d/pamtest
auth required /lib/security/pam_unix.so
account required /lib/security/pam_unix.so
4. 修改可执行程序权限
由于pam_unix.so需要访问/etc/shadow和/etc/passwd文件,所以要给pamtest文件附上SUID权限.
# chown root.root pamtest
# chmod 111 pamtest
# ls pamtest
# ls pamtest -hl
---s--x--x 1 root root 12K 2007-07-16 01:52 pamtest
5.执行
pamtest程序通过pam_unix.so,先对用户的密码进行验证,然后对用户的账号信息进行验证.
以普通用户身份执行,输入错误的maj密码时.
maj@m2-u:01:52:09/var/tmp$ ./pamtest maj
user: maj
Password:
pam_acct_mgmt() : 7
Authentication failure
Not Authenticated
输入正确的密码时
maj@m2-u:01:54:44/var/tmp$ ./pamtest maj
user: maj
Password:
Authenticated
输入错误的root密码时
maj@m2-u:01:58:37/var/tmp$ ./pamtest root
user: root
Password:
pam_acct_mgmt() : 7
Authentication failure
Not Authenticated
maj@m2-u:01:59:15/var/tmp$
输入正确的root密码时
maj@m2-u:01:54:50/var/tmp$ ./pamtest root
user: root
Password:
Authenticated
maj@m2-u:01:58:37/var/tmp$
PAM的文件构成:
(1)PAM模块所在目录:/lib/security
eg: pam_unix2.so*
(2)PAM模块配置文件所在目录:/etc/security
eg:pam_unix2.conf
(3)应用程序的PAM配置文件目录:/etc/pam.d
eg:sshd
应用程序的PAM配置文件分析。
PAM 配置文件中的每一行最多包含 4 列:
<Type of module> <Control flag> <Module path> <Options>
Type of module 模块类型有四种:auth、account、session、password,即对应PAM所支持的
四种管理方式。同一个服务可以调用多个 PAM模块进行认证,这些模块构成一个stack。
control-flag 用来告诉PAM库该如何处理与该服务相关的PAM模块的成功或失败情况。它有四
种可能的 值:required,requisite,sufficient,optional。
required 表示本模块必须返回成功才能通过认证,但是如果该模块返回失败的话,失败
结果也不会立即通知用户,而是要等到同一stack 中的所有模块全部执行完毕再将失败结果
返回给应用程序。可以认为是一个必要条件。
requisite 与required类似,该模块必须返回成功才能通过认证,但是一旦该模块返回
失败,将不再执行同一stack内的任何模块,而是直 接将控制权返回给应用程序。是一个必
要条件。注:这种只有RedHat支持,Solaris不支持。
sufficient 表明本模块返回成功已经足以通过身份认证的要求,不必再执行同一stack
内的其它模块,但是如果本模块返回失败的话可以 忽略。可以认为是一个充分条件。
optional表明本模块是可选的,它的成功与否一般不会对身份认证起关键作用,其返回
值一般被忽略。
对于control-flag,从Linux-PAM-0.63版本起,支持一种新的语法,具体可参看Linux
PAM文档。
module-path 用来指明本模块对应的程序文件的路径名,一般采用绝对路径,如果没有给出
绝对路径,默认该文件在目录/lib/security下 面。
arguments 是用来传递给该模块的参数。一般来说每个模块的参数都不相同,可以由该模块
的开发者自己定义,但是也有以下几个共同 的参数:
debug 该模块应当用syslog( )将调试信息写入到系统日志文件中。
no_warn 表明该模块不应把警告信息发送给应用程序。
use_first_pass 表明该模块不能提示用户输入密码,而应使用前一个模块从用户那里
得到的密码。
try_first_pass 表明该模块首先应当使用前一个模块从用户那里得到的密码,如果该
密码验证不通过,再提示用户输入新的密码。
use_mapped_pass 该模块不能提示用户输入密码,而是使用映射过的密码。
expose_account 允许该模块显示用户的帐号名等信息,一般只能在安全的环境下使用
,因为泄漏用户名会对安全造成一定程度的威协。
一.PAM简介
Linux-PAM(linux可插入认证模块)是一套共享库,使本地系统管理员可以随意选择程序的认证方式.
换句话说,不用(重新编写和)重新编译一个包含PAM功能的应用程序,就可以改变它使用的认证机制.
这种方式下,就算升级本地认证机制,也不用修改程序.
PAM使用配置文件/etc/pam.conf(或/etc/pam.d/下的文件),来管理对程序的认证方式.应用程序
调用相应的配置文件,从而调用本地的认证模块.模块放置在/lib/security下,以加载动态库的形式进
行调用(dlopen(3)).
像我们使用su命令时,系统会提示你输入root用户的密码.这就是su命令通过调用PAM模块实现的.
二. PAM的配置文件介绍
1.PAM配置文件的格式
PAM配置文件有两种写法: 一种是写在/etc/pam.conf中.格式如下:
ftpd auth required pam_unix.so nullok
ftpd:表示服务名,即针对哪一个服务进行的认证配置.
required:为模块类型.PAM有四中模块类型,分别代表不同的任务类型.
pam_unix.so:为模块路径.即要调用模块的位置.
nullok:为模块参数,即传递给模块的参数.
另一种写法是,将PAM配置文件放到/etc/pam.d/目录下,使用应用程序名作为配置文件名.如:
vsftpd,login等.配置文件的格式与pam.conf类似,只是少了最左边的服务名列.如:/etc/pam.d/cups
#%PAM-1.0
auth required pam_stack.so service=system-auth
account required pam_stack.so service=system-auth
2.PAM的模块类型
Linux-PAM有四种模块类型,分别代表四种不同的任务.它们是:认证管理,账号管理,会话管理和密码
管理.一个类型可能有多行,它们按顺序依次由PAM模块调用.
auth
用来对用户的身份进行识别.如:提示用户输入密码,或判断用户是否为root等.
account
对帐号的各项属性进行检查.如:是否允许登录,是否达到最大用户数,或是root用户是否允许在
这个终端登录等.
session
这个模块用来定义用户登录前的,及用户退出后所要进行的操作.如:登录连接信息,用户数据的
打开与关闭,挂载文件系统等.
password
使用用户信息来更新.如:修改用户密码.
3.PAM的控制标记
PAM使用控制标记来处理和判断各个模块的返回值.
required
这个标记表示需要模块返回一个成功值.如果返回失败,则继续进行同类型的下一个操作,当
所有此类型的模块都执行完后.才返回失败值.
requisite
与required相似,但是如果这个模块返回失败,则立刻向应用程序返回失败,表示此类型失败.
不再进行同类型后面的操作.
sufficient
如果此模块返回成功,则直接向应用程序返回成功,表示此类型成功.不再进行同类型后面
的操作.如果失败,也不会影响这个类型的返回值.
optional
使用这个标记的模块,将不进行成功与否的返回.一般返回一个PAM_IGNORE(忽略).
4.模块路径
模块路径.即要调用模块的位置. 一般保存在/lib/security/下,如: pam_unix.so
同一个模块,可以出现在不同的类型中.它在不同的类型中所执行的操作都不相同.这是由于每个模块
针对不同的模块类型,编制了不同的执行函数.
5.模块参数
模块参数,即传递给模块的参数.参数可以有多个,之间用空格分隔开,如:
password required pam_unix.so nullok obscure min=4 max=8 md5
三.编写PAM配置文件
1.PAM模块介绍
pam_unix.so模块:
auth类型: 提示用户输入密码,并与/etc/shadow文件相比对.匹配返回0(PAM_SUCCESS).
account类型: 检查用户的账号信息(包括是否过期等).帐号可用时,返回0.
password类型: 修改用户的密码. 将用户输入的密码,作为用户的新密码更新shadow文件
pam_cracklib.so模块:
password类型: 这个模块可以插入到一个程序的密码栈中,用于检查密码的强度.
这个模块的动作是提示用户输入密码,并与系统中的字典进行比对,检查其强度.
pam_loginuid.so模块:
session类型:用来设置已通过认证的进程的uid.以使程序通过正常的审核(audit).
pam_securetty.so模块:
auth类型: 如果用户要以root登录时,则登录的tty必须在在/etc/securetty中法之前.
pam_rootok.so模块:
auth类型: pam_rootok模块用来认证用户id是否为0.为0返回”PAM_SUCCESS”.
pam_console.so模块:
session类型: 当用户登录到终端时,改变终端文件文件的权限.在用户登出后,再将它们修改回来.
pam_permit.so模块:
auth,account,password,session类型: pam_permit模块任何时候都返回成功.
pam_env.so模块 :
auth类型: pam_env允许设置环境变量.默认下,若没有指定文件,将依据
/etc/security/pam_env.conf进行环境变量的设置.
pam_xauth.so模块:
session类型: pam_xauth用来在用户之间转发xauth-key.
如果不进行pam_xauth,当用户调用su成为另一个用户时,这个用户将不可以再访问原来用户的X显示,
因为新用户没有访问显示的key.pam_xauth解决了当会话建立时,从原始用户到目标用户转发key和用户
退出时销毁key的问题.
实验:
注销/etc/pam.d/su中的"session optional /lib/security/$ISA/pam_xauth.so"行
在桌面终端执行su切换到另一个用户时,执行xterm会报错,提示无法访问DISPLAY.
删除注释后,再使用su切换到另一个用户时,执行xterm,会正常打开一个xterm终端窗口.
pam_stack.so模块:
auth,account,password,session: pam_stack可以调用另一个服务.也就是多个服务可以包含到一个
设置中.当需要修改时,只修改一个文件就可以了.
pam_warn.so模块:
auth,account,password,session: pam_warn用来记录服务,终端,用户,远程用户和远程主机的信息
到系统日志.模块总是返回PAM_IGNORE,意指不希望影响到认证处理.
2.编写PAM配置文件
以root身份执行: # vi /etc/pam.d/pamtest
#提示用户输入密码
auth required pam_unix.so
# 验证用户账号是否可用
account required pam_unix.so
# 向系统日志输出一条信息
account required pam_warn.so
四.基于PAM机制的应用程序
1.编写C源码
#include <security/pam_appl.h>
#include <security/pam_misc.h>
#include <security/pam_modules.h>
#include <stdio.h>
/* 文件pamtest.c
此程序从命令行接收一个用户名作为参数,然后对这个用户名进行auth和account验证.
*/
// 定义一个pam_conv结构,用于与pam通信
static struct pam_conv conv = {
misc_conv,
NULL
};
// 主函数
int main(int argc, char *argv[])
{
pam_handle_t *pamh=NULL;
int retval;
const char *user="nobody";
const char *s1=NULL;
if(argc == 2)
user = argv[1];
else
exit(1);
if(argc > 2) {
fprintf(stderr, "Usage: pamtest0 [username]\n");
exit(1);
}
printf("user: %s\n",user);
retval = 0;
//调用pamtest配置文件
retval = pam_start("pamtest", user, &conv, &pamh);
if (retval == PAM_SUCCESS)
//进行auth类型认证
retval = pam_authenticate(pamh, 0); /* is user really user? */
else {
//如果认证出错,pam_strerror将输出错误信息.
printf("pam_authenticate(): %d\n",retval);
s1=pam_strerror( pamh, retval);
printf("%s\n",s1);
}
if (retval == PAM_SUCCESS)
//进行account类型认证
retval = pam_acct_mgmt(pamh, 0); /* permitted access? */
else {
printf("pam_acct_mgmt() : %d\n",retval);
s1=pam_strerror( pamh, retval);
printf("%s\n",s1);
}
/* This is where we have been authorized or not. */
if (retval == PAM_SUCCESS) {
fprintf(stdout, "Authenticated\n");
} else {
fprintf(stdout, "Not Authenticated\n");
}
if (pam_end(pamh,retval) != PAM_SUCCESS) { /* close Linux-PAM */
pamh = NULL;
fprintf(stderr, "pamtest0: failed to release authenticator\n");
exit(1);
}
return ( retval == PAM_SUCCESS ? 0:1 ); /* indicate success */
}
//END
2.编译
$ cc -o pamtest pamtest.c -lpam -lpam_misc -ldl
3.编写PAM配置文件
以root身份执行: vi /etc/pam.d/pamtest
auth required /lib/security/pam_unix.so
account required /lib/security/pam_unix.so
4. 修改可执行程序权限
由于pam_unix.so需要访问/etc/shadow和/etc/passwd文件,所以要给pamtest文件附上SUID权限.
# chown root.root pamtest
# chmod 111 pamtest
# ls pamtest
# ls pamtest -hl
---s--x--x 1 root root 12K 2007-07-16 01:52 pamtest
5.执行
pamtest程序通过pam_unix.so,先对用户的密码进行验证,然后对用户的账号信息进行验证.
以普通用户身份执行,输入错误的maj密码时.
maj@m2-u:01:52:09/var/tmp$ ./pamtest maj
user: maj
Password:
pam_acct_mgmt() : 7
Authentication failure
Not Authenticated
输入正确的密码时
maj@m2-u:01:54:44/var/tmp$ ./pamtest maj
user: maj
Password:
Authenticated
输入错误的root密码时
maj@m2-u:01:58:37/var/tmp$ ./pamtest root
user: root
Password:
pam_acct_mgmt() : 7
Authentication failure
Not Authenticated
maj@m2-u:01:59:15/var/tmp$
输入正确的root密码时
maj@m2-u:01:54:50/var/tmp$ ./pamtest root
user: root
Password:
Authenticated
maj@m2-u:01:58:37/var/tmp$
PAM的文件构成:
(1)PAM模块所在目录:/lib/security
eg: pam_unix2.so*
(2)PAM模块配置文件所在目录:/etc/security
eg:pam_unix2.conf
(3)应用程序的PAM配置文件目录:/etc/pam.d
eg:sshd
应用程序的PAM配置文件分析。
PAM 配置文件中的每一行最多包含 4 列:
<Type of module> <Control flag> <Module path> <Options>
Type of module 模块类型有四种:auth、account、session、password,即对应PAM所支持的
四种管理方式。同一个服务可以调用多个 PAM模块进行认证,这些模块构成一个stack。
control-flag 用来告诉PAM库该如何处理与该服务相关的PAM模块的成功或失败情况。它有四
种可能的 值:required,requisite,sufficient,optional。
required 表示本模块必须返回成功才能通过认证,但是如果该模块返回失败的话,失败
结果也不会立即通知用户,而是要等到同一stack 中的所有模块全部执行完毕再将失败结果
返回给应用程序。可以认为是一个必要条件。
requisite 与required类似,该模块必须返回成功才能通过认证,但是一旦该模块返回
失败,将不再执行同一stack内的任何模块,而是直 接将控制权返回给应用程序。是一个必
要条件。注:这种只有RedHat支持,Solaris不支持。
sufficient 表明本模块返回成功已经足以通过身份认证的要求,不必再执行同一stack
内的其它模块,但是如果本模块返回失败的话可以 忽略。可以认为是一个充分条件。
optional表明本模块是可选的,它的成功与否一般不会对身份认证起关键作用,其返回
值一般被忽略。
对于control-flag,从Linux-PAM-0.63版本起,支持一种新的语法,具体可参看Linux
PAM文档。
module-path 用来指明本模块对应的程序文件的路径名,一般采用绝对路径,如果没有给出
绝对路径,默认该文件在目录/lib/security下 面。
arguments 是用来传递给该模块的参数。一般来说每个模块的参数都不相同,可以由该模块
的开发者自己定义,但是也有以下几个共同 的参数:
debug 该模块应当用syslog( )将调试信息写入到系统日志文件中。
no_warn 表明该模块不应把警告信息发送给应用程序。
use_first_pass 表明该模块不能提示用户输入密码,而应使用前一个模块从用户那里
得到的密码。
try_first_pass 表明该模块首先应当使用前一个模块从用户那里得到的密码,如果该
密码验证不通过,再提示用户输入新的密码。
use_mapped_pass 该模块不能提示用户输入密码,而是使用映射过的密码。
expose_account 允许该模块显示用户的帐号名等信息,一般只能在安全的环境下使用
,因为泄漏用户名会对安全造成一定程度的威协。
发表评论
-
奇怪的linker问题
2014-09-23 14:56 1851下面这个linker的问题找了3个小时: gcc -o ex ... -
coredump with calloc()
2014-04-29 14:23 1762Program terminated with signal ... -
pthread_create: Resource temporarily unavailable (errno = 11)
2014-04-29 14:21 2099原来是pthread_create后没有调pthread_jo ... -
读锁和写锁的区别
2014-03-03 10:20 1137共享锁(S锁)又称读锁,若事务T对数据对象A加上S锁,则事务T ... -
nux下共享库(SO)有关的几个环境变量 zz
2014-01-06 10:32 810Linux支持共享库已经有 ... -
gprof(转载)
2013-10-23 11:07 903CPU profiling tool: O'profile, ... -
scp的prompt为啥隐藏不掉
2013-08-07 15:25 955把scp的标准输出和标准错误都重定向到一个文件,为什么shel ... -
Linux 之 shell 比较运算符 (转载)
2013-07-09 11:13 771转自:http://blog.csdn.net/s ... -
linux内核版本为何有时会自动添加“+”号
2013-04-16 16:16 1239转载自:http://blog.csdn.ne ... -
在linux pc上挂载jffs2文件系统(zz)
2012-12-24 17:54 1627http://www.sourceware.org/jffs2 ... -
全面解析PowerPC架构下的扁平设备树FDT(ZT)
2012-12-19 14:58 3754Sailor_forever sailing_9806#1 ... -
linux内核启动过程学习总结 (转载)
2012-12-18 17:01 2845转载自:http://blog.chinaunix.net/u ... -
ldconfig的作用
2012-11-15 18:17 1042转载:ldconfig是一个动态链接库管理命令 为了让动态链 ...
相关推荐
数值模拟误差分析与验证.docx 冲击动力学仿真软件:PAM-CRASH_(15).计算效率提升策略.docx 冲击动力学仿真软件:PAM-CRASH_(16).PAM-CRASH与其它软件的集成.docx 冲击动力学仿真软件:PAM-CRASH_(17).行业标准...
Gartner发布中国PAM特权访问管理创新洞察:PAM的8个主要目标和国内9个主要提供商.pdf
评估多边形面积的分类性能:PAM、准确率、灵敏度、特异性、AUC及Kappa系数等指标。,基于CNN-BILSTM-Attention与SAM-Attention机制的多特征分类预测模型:程序内注释详细,可视化效果图助力迭代优化与性能评估,CNN-BI...
PAM 的出现解决了之前系统验证机制混乱的问题,提供了一套统一的验证机制,让每个程序可以调用即可。PAM 模块在 Linux 操作系统中扮演着重要的角色,负责用户验证和身份认证。 PAM 结构 PAM 结构可以分为以下几层...
【vsftpd pam验证】是FTP(File Transfer Protocol)服务器软件vsftpd(Very Secure FTP Daemon)中的一种安全验证方式。PAM(Pluggable Authentication Modules)是Linux系统中的一个模块化认证框架,允许系统管理...
蜜蜂 beesly是用于通过PAM对用户进行身份验证的微服务。 它提供了一种替代方法,用于验证和授权用户对内部应用程序和服务的访问。 对自定义PAM服务的支持促进了目录服务器(Active Directory,IdM,FreeIPA,...
在Linux操作系统中,Pluggable Authentication Modules(PAM)是一个核心组件,用于管理用户身份验证和授权过程。PAM-Linux为系统管理员提供了一种灵活的方式,可以根据需求定制不同的认证策略,从而增强系统的安全...
PAM:与MATLAB一起使用的PAM的开源版本。 PAMcompiled:不需要MATLAB的已编译独立版本。 PAM-sampledata:用户可以用来试用PAM功能的一些示例数据。 PAMdocs:该项目包含用于delevopers的文件,以更新PAM文档和手册...
Linux-PAM,全称为Pluggable Authentication Modules,是Linux操作系统中的一个核心组件,它为系统提供了灵活的身份验证机制。在Linux-PAM-1.3.0.tar.gz这个压缩包中,包含了版本为1.3.0的PAM的源代码和其他相关文件...
这是一个非常简单的PAM(可插入身份验证模块),它实现了质询响应登录。 它发送一个随机的“ nonce”值,然后用户使用其密码来确认该值,并使用sha256哈希将其散列,然后将结果发送回去。 该模块的预期用途是在处理...
在“pam_linux的可插入身份验证模块(PAM)的Safe Rust API开发技术.zip”中,我们可能找到的是关于如何使用Rust语言安全地与PAM模块交互的资源。 Rust是一种系统编程语言,以其内存安全性、并发性和高性能而闻名。...
openssh升级脚本,之前写了一个升级的经验分享,后来因为要升级的系统过多,就写了一个简单的脚本用来减轻自己的工作量,大家需要可以下载。备注:只用于RedHat5,RedHat6,RedHat7,CentOS5,CentOS6,CentOS7
在通信系统中,双极性信号、正交信号和PAM(Pulse Amplitude Modulation,脉冲幅度调制)是三种重要的信号处理技术。MATLAB作为一种强大的数值计算和信号处理工具,常被用于这些通信系统的建模和仿真。下面我们将...
标题中的"PAM代码及说明_PAM调制解调_matlab_rrcfilter_PAM_"表明了这个压缩包包含的内容是关于脉冲幅度调制(PAM)的Matlab实现,其中包括了RRC(Root Raised Cosine)滤波器的使用以及在AWGN(Additive White ...
PAM,即插拔式认证模块,是Linux操作系统中一种灵活的身份验证框架。它允许系统管理员根据需求配置不同的认证策略,无需修改核心系统代码。PAM使得系统能够支持多种认证机制,如密码、智能卡、生物识别等,并能轻松...
一个PAM插件,用于使用Swift编写的生物特征信息(触摸ID)进行身份验证。 安装 $ sudo make install 编辑/etc/pam.d/sudo作为第一行: auth sufficient pam_touchid.so "reason=execute a command as root" 请...
用法类 pam::pamd无模块配置类{'pam::pamd':}LDAP模块如果你想要 pam_ldap: class { 'pam::pamd': pam_ldap => true, } 或者即使您需要特定的身份验证行为: class { 'pam::pamd': pam_ldap => true, pam_ldap_...
pam-1.1.8-23.el7.x86_64.rpm
pam_smbsync PAM模块与UNIX密码更改同步更新Samba密码。 它唯一要做的就是调用smbpasswd来完成这项工作。 过去曾经有pam_smbpasswd模块,但是它已经消失了,并且pam_exec不支持密码更改。 可以在Samba中使用LDAP...
**PAM_DSP: MATLAB在通信中的离散脉冲幅度调制技术** 在数字通信领域,脉冲幅度调制(Pulse Amplitude Modulation,PAM)是一种常见的模拟信号数字化的方法。PAM_DSP项目是基于MATLAB环境进行的PAM调制与解调的开发...