LDAP 中使用 Shadow Account 条目可以有效的设置用户登录的过期时间,过期以后还有多少可以登陆,每隔多少天强制更换密码,提前多少天开始提示密码即将过期。

下面记录一下属性列表,方便以后查阅

  • shadowLastChange: 密码从1970年1月1日开始, 到最近一次修改, 一共间隔了多少天. 比如这里指定成16967就表示2016年6月15日. 也可以直接获取当天的日期,方法为:在系统里 useradd 一个用户,查看 /etc/shadow 中该用户的第三个值, 即是该值. 该值如果设置成0, 则表示下次登陆将强制修改密码, 用户修改密码成功以后, 该值将发生对应的变化
  • shadowMin: 密码从 shadowLastChange 指定的日期开始, 到多少天以后才能再次修改密码, 防止某些人天天没事就修改密码, 此值设置成0表示不限制
  • shadowMax: 密码从 shadowLastChange 指定的日期开始, 到多少天以后过期(即多少天后必须更改密码)
  • shadowInactive: 密码过期以后还可以登陆多少天(每次登陆都会要求更改密码), 如果超过此值指定的天数, 下次登陆时会提示 Your account has expired; please contact your system administrator
  • shadowWarning: 提前多少天开始警告用户密码将会过期
  • shadowExpire: 密码从1970年1月1日开始, 多少天以后将会过期, 这里一般用不到
  • shadowFlag: 暂时无用

一般属性的参考值

  • shadowLastChange: 0
  • shadowMin: 0
  • shadowMax: 90 #每隔90天强制更换密码
  • shadowInactive: 7 #过期以后还有7天可以登陆,每次登陆都会提示修改密码
  • shadowWarning: 8 #提前8天开始提示密码即将过期

Laravel 使用 LDAP,设置 objectclass shadowAccount 条目,下面举例向 LDAP Server 中添加一个新成员

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
$user = Adldap::make()->user(
  [
    'mail' => $data['email'],
    'uid' => $data['uid'],
    'cn' => $data['uid'],
    'sn' => $data['uid'],
    'userpassword' => $data['password'],
  ]
);
$user->setAttribute('objectclass',
  [
    'shadowAccount',
    'inetOrgPerson'
  ]
);
$user->setDn('uid=' . $data['uid'] . ',' . $user->getDnBuilder()->get());

给某个成员设置账号失效时间

1
2
3
$user = Adldap::search()->where('mail', 'xxx@xx.com')->first();
$user->shadowExpire = 100;
$user->save();