新增支援 shadow 程式事实上是很直接的。 唯一的问题是程式需要以 root (或 SUID root) 权限执行,这样才可以存取 /etc/shadow 档。 这显示一个大问题: 当建立 SUID 程式时需要很小心依照程式运作。举例说明: 如果以个程式有 shell escape,如果程式本身是 SUID root 将不需要以 root 方式呈现。 对程式新增支援 shadow 而言,它可以检查密码,但不需以 root 权限执行,而是以 SUID shadow 取代执行比较安全。 xlock 程式就是一个例子。 接下来□例介绍, pppd-1.2.1d 已经以 SUID as root 方式执行,所以新增 shadow 支援应该不会使程式产生任何影响。 8.1 标头档(Header files) 标头档应存在 /usr/include/shadow。 应该有一个 /usr/include/shadow.h档,但是它将 symbolic link 到 /usr/include/shadow/shadow.h。 为了新增支援 shadow 程式,你需要 include 标头档: #include #include 8.2 libshadow.a 函式库(library) 当你安装 Shadow Suite, libshadow.a 档被建立和安装在 /usr/lib 目录。 当编译一个 shadow support 程式,linker 需要包括 libshadow.a 函式库进入链结。 执行如下: gcc program.c -o program -lshadow 然而,就像我们接下来要看的例子,大部分大程式使用 Makefile 且通常有变数呼叫 LIBS=... 需要被修改。 8.3 Shadow 结构(Structure) libshadow.a 函式库对它从 /etc/shadow 档接收资讯使用结构化呼叫。这是从 /usr/include/shadow/shadow.h 标头档的 spwd 结构定义: -------------------------------------------------------------------------------- struct spwd { char *sp_namp; /* login name */ char *sp_pwdp; /* encrypted password */ sptime sp_lstchg; /* date of last change */ sptime sp_min; /* minimum number of days between changes */ sptime sp_max; /* maximum number of days between changes */ sptime sp_warn; /* number of days of warning before password expires */ sptime sp_inact; /* number of days after password expires until the account becomes unusable. */ sptime sp_expire; /* days since 1/1/70 until account expires */ unsigned long sp_flag; /* reserved for future use */ }; -------------------------------------------------------------------------------- Shadow Suite 可以放除了编码密码之外的资料到 sp_pwdp 栏位。密码栏位可包括: username:Npge08pfz4wuk;@/sbin/extra:9479:0:10000:::: 这表示一个额外的密码, /sbin/extra 程式应该被更多的权限呼叫。 程式的呼叫需取得使用者名称和指出为何需被呼叫的 switch才可通过。 查看 /usr/include/shadow/pwauth.h 和原始码 pwauth.c 获得更多资讯。 为何我们应使用 pwauth 去表示真正的权限,这是什麽意思,它将使第二组权限也跑得很好。 Shadow Suite 作者指出因为大部分存在的程式都不这麽作罗,所以 Shadow Suite未来的版本将移除。 8.4 Shadow 函式(Functions) shadow.h 包含 libshadow.a 函式库: -------------------------------------------------------------------------------- extern void setspent __P ((void)); extern void endspent __P ((void)); extern struct spwd *sgetspent __P ((__const char *__string)); extern struct spwd *fgetspent __P ((FILE *__fp)); extern struct spwd *getspent __P ((void)); extern struct spwd *getspnam __P ((__const char *__name)); extern int putspent __P ((__const struct spwd *__sp, FILE *__fp)); -------------------------------------------------------------------------------- 我们将使用的□例程式是: getspnam 将对供应名称恢复对我们 spwd 结构。 8.5 □例 这是一个□例描述新增 shadow 支援程式,但预设值并没有。 本□例使用 Point-to-Point Protocol Server (pppd-1.2.1d),它有个模式是表示 从 /etc/passwd 档取代 PAP 或 CHAP 档使用帐号密码的 PAP 权限,你将不需要在 pppd-2.2.0 加这些程式码,因为它已经存在罗。 pppd 的未来大致上不会被使用很多,但是如果你安装 Shadow Suite,储存在 /etc/passwd 档的密码将无法运作。 在 pppd-1.2.1d 权限使用的程式码是位在 /usr/src/pppd-1.2.1d/pppd/auth.c 档。 接下来程式码需要被加在所有其他 #include 指令档案的最上头,我们将注意有环境指令的 #includes。 -------------------------------------------------------------------------------- #ifdef HAS_SHADOW #include #include #endif -------------------------------------------------------------------------------- 接下来要做的事情是变更实际码, 我们将变更 auth.c 档。 变更前 auth.c 档 function 为: -------------------------------------------------------------------------------- /* * login - Check the user name and password against the system * password database, and login the user if OK. * * returns: * UPAP_AUTHNAK: Login failed. * UPAP_AUTHACK: Login succeeded. * In either case, msg points to an appropriate message. */ static int login(user, passwd, msg, msglen) char *user; char *passwd; char **msg; int *msglen; {
文章整理:西部数码--专业提供域名注册、虚拟主机服务 相关文章
热点关注
IDC资讯
虚拟主机
域名注册
托管租用
vps主机
智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源 网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧 行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒 网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它 服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护 软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer 网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash 程序设计 Java技术 C/C++ VB delphi 网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术 操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD |
Linux Shadow-Password-HOWTO - 8. 加入 shadow 支援
来源:互联网
作者:west263.com
时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!



