默认情况下,linux不支持域。但用户可以通过应用程序加入域,例如:Elike、Winbind 等。
对于我的项目来说,我的客户都是企业会员。由于安全问题,大多数客户的linux主机都会加入域。
不幸的是,即使Linux主机已加入域,客户也可以登录本地主机。如:
(1) 一台linux主机中有两个账号:
域账号:dev.com\john(域为developer.com)
本地账号:tom
(2) 客户可以使用域账号登录( dev.com\john) 或本地帐户(tom) 自由。
我的任务是编写一个在用户登录时执行的shell脚本。在shell脚本中,我需要检查用户使用域帐户还是本地帐户登录。
如果用户使用域名登录,我需要获取域名;否则,我需要获取主机名。然后将域名(或主机)名和用户名报告给远程监控服务器。
我尝试过以下代码:
hostName=$(hostname)
hostFQDN=$(hostname -f)
if [ "$hostName" = "$hostFQDN" ]; then
# The user didn't log in a domain.
hostInfo="$hostName"
else
# The user logged in a domain.
hostInfo=$(hostname -d)
fi
在上面,我检查主机 FQDN 是否与主机名相同。如果相同,则认为客户使用域帐户登录;否则,则使用本地帐户登录。
不幸的是,它并不总是有效。原因是,如果Linux主机加入了域,即使客户使用本地帐户登录,主机FQDN也不会始终等于主机名。如:
(1) linux主机加入域“dev.com”;
(2) 无论客户是否使用域帐户登录,主机 FQDN 始终为“yw-host.dev.com”(“yw-host”为主机名)。
请问有人可以给出解决方案吗?由于我的客户可以使用多个域应用程序加入域(例如:likely、winbin 等),因此解决方案最好不依赖于特殊的域应用程序。
多谢。
答案1
完整的用户登录详细信息应位于您的安全或审核日志中,具体取决于您使用的发行版。这是一个简单的快速修复,可以检查它们是否存在于 /etc/passwd 中,但您可能会遇到重复用户名的问题。