我已经设置了一个FreeIPA服务器。我面临着一个问题,这是密码过期时,用户是第一次创建。所以一个新的用户应该总是设置他的密码时,他第一次登录这是在here中定义。但我不想这个功能。
我正在使用this library在FreeIPA中创建或添加用户。
所以,我和FreeIPA是这样联系的-
private function getIPA()
{
$host = env('FREEIPA_HOST', 'cloud-host-ipa.com');
$certificate = database_path(env('FREEIPA_CERTIFICATE', 'ca.crt'));
try {
return new \FreeIPA\APIAccess\Main($host, $certificate);
} catch (Exception $e) {
throw new \ErrorException("Error {$e->getCode()}: {$e->getMessage()}");
return false;
}
}
private function getIPAConnection() //Ged authinticated admin IPA connection
{
$ipa = $this->getIPA();
try {
$auth = $ipa->connection()->authenticate(env('FREEIPA_ADMIN_NAME', 'oc-ipa-connector'), env('FREEIPA_ADMIN_PASS', 'ADMIN_PASS'));
if ($auth) {
return $ipa;
} else {
$auth_info = $ipa->connection()->getAuthenticationInfo();
$auth_info = implode(' ', $auth_info);
throw new \ErrorException("\nLogin Failed : {$auth_info}");
//return false;
}
} catch (Exception $e) {
throw new \ErrorException("\nError {$e->getCode()}: {$e->getMessage()}");
//return false;
}
}
然后像这样添加一个用户
$ipa = $this->getIPAConnection();
try {
$new_user_data = array(
'givenname' => $givenname,
'sn' => $sn,
'uid' => $uid,
//'userpassword' => $_POST["userpassword"],
'mail' => $mail,
'mobile' => $phone
);
$add_user = $ipa->user()->add($new_user_data);
if ($add_user) {
return true;
}
} catch (Exception $e) {
throw new \ErrorException("Error {$e->getCode()}: {$e->getMessage()}");
return false;
}
这段代码工作正常,用户已添加。
我用这个密码设置密码-
$ipa = $this->getIPAConnection();
try {
$user_info = $ipa->user()->get($uid);
if($user_info != false)
{
try {
$new_user_data = array(
'userpassword' => $password,
);
$mod_user = $ipa->user()->modify($uid, $new_user_data);
if ($mod_user) {
return true;
}
else
{
return false;
}
} catch (Exception $e) {
throw new \ErrorException("Error {$e->getCode()}: {$e->getMessage()}");
}
}
} catch (Exception $e) {
throw new \ErrorException("Error {$e->getCode()}: {$e->getMessage()}");
}
密码设置也很完美。但是设置的密码在设置后就会自动过期。
我想让我的用户拥有这个密码至少一周。所以,我想禁用this功能。有什么实际的方法吗?
再-
我已经在FreeIPA中创建了this issue,为我们提供了一个解决方案,但该问题已关闭并标记为-Closed:wontfix。所以,我想知道是否存在变通方案?
2条答案
按热度按时间ht4b089n1#
答案在链接https://www.redhat.com/archives/freeipa-users/2012-June/msg00360.html中提供。
有一个全局密码策略,您可以从下面的命令中看到:
[server]$ ipa pwpolicy-show Group: global_policy Max lifetime (days): 90 Min lifetime (hours): 1 History size: 0 Character classes: 0 Min length: 8 Max failures: 6 Failure reset interval: 60 Lockout duration: 600
通过运行以下命令,可以为要向其中添加用户的组创建新的策略覆盖:
[server]$ ipa pwpolicy-add sysadmin --minlife=0 Priority: 50 Group: sysadmin Min lifetime (hours): 0 Priority: 50
现在,此策略将覆盖全局密码策略,并仅为组创建一个策略。
如果要修改全局策略,可以使用以下命令执行相同操作:
[server]$ ipa pwpolicy-mod global_policy --minlife=0 Group: global_policy Max lifetime (days): 90 Min lifetime (hours): 0 History size: 0 Character classes: 0 Min length: 8 Max failures: 6 Failure reset interval: 60 Lockout duration: 600
请注意“Min lifetime(hours)”更改为0,这将使密码永不过期。
创建用户后,需要从服务器中的脚本运行以下代码:
echo -e $PASSWORD\n$PASSWORD\n$PASSWORD | kinit $username kdestroy
请注意,您需要将
PASSWORD
和username
作为参数发送到脚本并远程执行此脚本。wn9m85ua2#
看https://www.freeipa.org/page/New_Passwords_Expired-基本上FreeIPA有一个策略,管理员设置的密码立即到期。我相信“密码寿命”,然后只有当用户自己改变了他们的密码。