如何在linux shell脚本中检测用户是否登录了域或本地主机?

如何在linux shell脚本中检测用户是否登录了域或本地主机?

默认情况下,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 中,但您可能会遇到重复用户名的问题。

相关内容