当前位置: 首页 > 图文教程 > 操作系统 > Unix/Linux > Linux Shadow-Password-HOWTO - 8. 加入 shadow 支援

Unix/Linux
FreeBSD 数据转移办法
Freebsd 下运行QQ For Linux 的方法
FreeBSD, Debian, CentOS一个网卡绑定多个IP
freebsd下切换到root下 su: Sorry 的解决办法
Freebsd挂载光驱和软驱
FREEBSD下运行调试asterisk
一些 freebsd 的常用命令
笔记本上安装freebsd的小知识
FreeBSD系统下添加中文字体
FreeBSD挂载DOS分区,正确显示中文
FreeBSD挂载DOS分区时显示中文的方法
freebsd7.0安装系统图解(最新版)
服务器的时间同步设置方法
FreeBSD FTP 的架设教程
FreeBSD mpd VPN服务器安装步骤
更新FreeBSD Port Tree的几种方法小结
portupgrade 中文手册(翻译)
freebsd 服务器 ARP绑定脚本
在Ubuntu系统中定制 Compiz Fusion 特效
Ubuntu 7.10 绑定IP及MAC地址

Unix/Linux 中的 Linux Shadow-Password-HOWTO - 8. 加入 shadow 支援


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 188 ::
收藏到网摘: n/a

 

新增支援 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