当其他用户登录“我的”系统时如何获得通知?


9

我知道who显示我所有已登录用户的命令。但是我想以某种方式告知何时我以外的人登录到我的系统。有小程序吗?如果小程序显示已登录的不同用户的数量(即具有登录shell和已建立的ssh连接),也将很好。


顺便说一句:有人可以评论尝试中断吗?然后仍然执行/etc/profile.d吗?我猜这取决于入侵,因此对于强力ssh攻击来说,通过运行服务的权限升级,它可能不会存在。嗯,看来用户监视并非易事。
数学

Answers:


10

对于有人登录您的系统时的通知部分,您可以尝试在脚本中放入一个小/etc/profile.d脚本。使用notify-send(libnotify-bin软件包的一部分),您可以尝试以下操作:

/etc/profile.d/notify_log.sh

notify-send -t 3000 "User logged in" `whoami`

然后,每次有人登录您的系统时,您都会收到通知。

编辑:因此,它不能很好地工作:(如果您在计算机上配置了邮件服务器,则可以使用mail命令代替notify-send

但是根据这里帖子,更好的解决方案是pam_exec脚本。


这是个好主意,但无需使其成为可执行文件,也不需要进行shebang,因为其中的文件/etc/profile.d/是源文件。只有登录shell(虚拟终端和ssh登录)和某些GUI登录才执行配置文件初始化。
enzotib 2012年

@enzotib:谢谢你的提示,我纠正我的答案:)
塞德里克朱利安

好的,我已经尝试过了,但是到目前为止还没有运气。原因是,一个用户不能轻易通知另一用户。因此,必须设置一些环境变量,请参阅:g-loaded.eu/2007/11/18/…。到目前为止,我有一些可执行文件,它可以执行这些操作,但登录时不执行该操作!如果我刚source /etc/profile.d/notify_log.sh通过ssh登录后,则发送通知。我猜它登录后执行不正确。我观察到/var/log/auth.log没有运气。有什么帮助吗?
2012年

我发现了原因:我使用ZSH且/ etc / zsh / zprofile为空,应该应该获取/ etc / profile,而/ etc / profile则应该获取/etc/profile.d/*.sh,但是却什么也没有!> - (..我将这个来源然后明确和检查所有其他已安装的贝壳,因为我不知道哪个登录shell由所有LDAP用户使用..反正谢谢你。
数学

@brubelsabs:oups,我编辑我的答案与其他解决方案
塞德里克朱利安

2

我们通过创建/etc/profile.d/notify.sh具有以下内容的文件来做到这一点:

#!/bin/sh

sender="hostname@example.com"
recepient="admingroup@example.com"
subject="Privileged Account logon used"
message="`env`"
    echo "$message" | mail -s "$subject" -r "$sender" -Smtp=mail.example.com "$recepient"

假设已安装mailx。


是的,有时您可能会错过桌面通知,但是邮件通常仍然存在。
数学

@Antonio是否必须将脚本添加到crontab?它似乎不起作用。
cokedude
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.