Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何从Active Directory获取用户密码过期日期?_Linux_Windows_Active Directory_Passwords_Samba - Fatal编程技术网

Linux 如何从Active Directory获取用户密码过期日期?

Linux 如何从Active Directory获取用户密码过期日期?,linux,windows,active-directory,passwords,samba,Linux,Windows,Active Directory,Passwords,Samba,伙计们 有一个Active Directory(Windows)和一个Linux samba客户端。在Active Directory中,该策略以这种方式进行了调整,因此用户需要定期更改其密码(密码有过期时间) 我的问题很简单:如果我在使用Samba的Linux机器上工作,是否可以获得给定用户的到期时间?这取决于domaincontroller的配置。您可以尝试: net ads user info USERNAME@DOMAIN.COM -S DC_SERVER_NAME -U USERNAM

伙计们

有一个Active Directory(Windows)和一个Linux samba客户端。在Active Directory中,该策略以这种方式进行了调整,因此用户需要定期更改其密码(密码有过期时间)


我的问题很简单:如果我在使用Samba的Linux机器上工作,是否可以获得给定用户的到期时间?

这取决于domaincontroller的配置。您可以尝试:

net ads user info USERNAME@DOMAIN.COM -S DC_SERVER_NAME -U USERNAME
在哪里USERNAME@DOMAIN.COM是从中收集信息的帐户,DC_SERVER_NAME是域控制器的主机名,USERNAME是用户名

系统将提示您输入域密码

现在,您可以在帐户中获得信息,包括密码的到期日期,或者

ads_pull_uint32 failed
在这种情况下,域控制器未配置为向类UNIX系统提供帐户信息

您可以与域管理员联系,说服他安装和配置,以便此命令为您提供所需的信息

这个答案可能令人沮丧。对我来说,这是因为我在同样的情况下,研究了很多这个话题

我的解决方法:我在设置域密码(smbpasswd-U USERNAME-r DC_SERVER_NAME)时,会在未来80天内设置一个日历提醒,因为它每90天过期一次。不完美,但可行

[更新] 我找到了一种使用rpcclient确定域密码过期日期的方法,以下是我的脚本:

#!/bin/bash
# author: Tim Wahrendorff 2016
# licence: Public Domain - https://wiki.creativecommons.org/wiki/Public_domain
# 
# To use this script you need at least: 
# sudo apt-get install libnotify-bin rpcclient
#
# Please set your account, password and domaincontroller to use this script


USER="username" # Domain accountname
PASS="Pa$$W0rd" # Domain password
DC="vmdc01"     # Domaincontroller

### START RPCCLIENT query
if [ "x$USERDCID" == "x" ]; then
    RPCLOOKUPID=$(rpcclient -U $USER%$PASS -c "lookupnames $USER" $DC 2> ./rpc_errFile)

    USERDCID=$(echo "$RPCLOOKUPID" | grep -e '[0-9]\{4,9\} ' -o)
fi

QUERYUSER=$(rpcclient -U $USER%$PASS -c "queryuser $USERDCID" $DC 2> ./rpc_errFile)

EXPDATE=$(echo "$QUERYUSER" | grep 'Password must change Time' | grep -e '[a-Z]\{2\}, [0-9]\{2\} [a-Z]\{3\} [0-9]\{4\} [0-9]\{2\}:[0-9]\{2\}' -o)

## Load rpc error Message
RPCERR=$(<./rpc_errFile)

## send notifications to Unity Desktop
if [ "x$RPCERR" != "x" ]; then
    notify-send -i /usr/share/icons/gnome/48x48/status/dialog-error.png "Error while fetching expiration date of your domain password" "$RPCERR"    
else
    notify-send -i /usr/share/icons/gnome/48x48/status/dialog-information.png "your domain password expires at " "$EXPDATE h"
fi

### END RPCCLIENT query
#/bin/bash
#作者:Tim Wahrendorff 2016
#许可证:公共领域-https://wiki.creativecommons.org/wiki/Public_domain
# 
#要使用此脚本,您至少需要:
#sudo apt get安装libnotify bin rpcclient
#
#请设置您的帐户、密码和域控制器以使用此脚本
USER=“username”#域名
PASS=“Pa$$W0rd”#域密码
DC=“vmdc01”#域控制器
###启动RPCCLIENT查询
如果[“x$USERDCID”==“x”];然后
RPCLOOKUPID=$(rpcclient-U$USER%$PASS-c“lookupnames$USER”$DC 2>/rpc\U errFile)
USERDCID=$(echo“$RPCLOOKUPID”| grep-e'[0-9]\{4,9\}'-o)
fi
QUERYUSER=$(rpcclient-U$USER%$PASS-c“QUERYUSER$USERDCID”$DC 2>/rpc\U errFile)
EXPDATE=$(echo“$QUERYUSER”| grep”密码必须更改时间“|grep-e”[a-Z]\{2\}[0-9]\{2\}[a-Z]\{3\}[0-9]\{4\}[0-9]\{2\}[0-9]\{2\}-o)
##加载rpc错误消息

RPCERR=$(如果您使用的是kerberos票据,ADpassword是一个简单的python应用程序,用于检查密码过期情况并要求用户更改密码


在linux上,您可以使用pdbedit

pdbedit -L -v -u <username>
pdbedit-L-v-u

然后查找以下行:密码必须更改

真的没有人知道这个问题的答案吗?谢谢。我得到了失败的答案。NT_STATUS_NONE_MAPPED的原因可能在你的smb.conf中。在我的smb.conf中,唯一不同于默认设置的是添加了两行:idmap uid=10000-20000 idmap gid=10000-20000I have just使用username而不是userdcid测试了queryuser命令,并且刚刚工作。顺便说一句,userdcid计算在我的域中是空的。感谢rpc客户端的提示。但是您的正则表达式为我提供了0输出。我想这是因为bash无法识别“[a-Z]”(至少是我使用的4.4.12版本)。而且值的数量似乎是关闭的(例如[a-Z\{2\}不起作用,因为一天显示为3个字母)。这可能是代码腐烂,不确定。但是我调整了。下面是我使用的,它对我起作用。将第24行替换为
EXPDATE=$(echo“$QUERYUSER”{124; grep'密码必须更改时间“{124; grep-e'[a-Za-Z]\{3\}[0-9]\{2\[a-Za-Z]{3\[0-9]}[0-9]{[A-Z]\{3\}'-o)
@mondjunge,我对脚本的处理越来越乱。我现在的最大问题是rpcclient太慢了。因为它为每个查询都设置了一个tcp scoket。我的脚本正在传递一个所有用户的数组。你知道一种直接查询Samba4DB的方法吗,以获取“密码必须更改时间”?或通过rpcclient传递用户列表?net ads命令对我不起作用。这对samba4不起作用。执行“samba工具域密码设置集--max pwd age=90”强制我的所有用户更改其密码(因为所有帐户都超过90天)。“pdbedit”仍然显示“密码必须更改:从不”而rpcclient显示更新的日期/时间。更多信息可在此处找到