2012-03-12 229 views
4

我编写了一个脚本,用于发送登录到日志文件的人的日期和用户名以记录谁已经登录。我想知道如何将此脚本设置为当用户登录时自动执行,而不必在终端中手动运行它。注:用户名是登录的当前用户登录后自动运行Bash脚本

我的代码:

#!/bin/bash 

printf "$(date) $HOSTNAME booted!\n" >> /home/USERNAME/boot.log 
+0

是否有任何安全考虑?你相信用户吗?特别是 - 如果用户有能力禁用日志记录或篡改他/她登录的现有记录,那么这样做是否正确? – ruakh 2012-03-12 20:21:48

回答

4

解决此问题的更优雅的方法是从日志文件中读取,这些日志文件已被写入并且不能被用户更改。没有人可以说它比Bjørne Malmanger's in his answer更好:

我不会相信用户给你提供的信息。作为root你 把它;-)

一个很好的方式做,这是last命令,这是伟大的,因为它巧妙地显示所有登录:图形,控制台和SSH。

last 

不太优雅但仍然安全的方法是在/var/log/auth.log上执行grep。在我的Gnome/Ubuntu系统,我可以用它来追踪图形登录:需要为每个登录类型被发现

grep "session opened for user USERNAME" 

为您的机器正确的模式:图形,控制台和SSH。这很麻烦,但是如果你需要的信息比last的信息更远,你可能需要这样做。

直接回答你的问题:

您可以修改这样的脚本来获取用户名

#!bin/bash 
printf "$(date) $HOSTNAME booted!\n" >> /home/$(whoami)/boot.log 

这行添加到/ etc/profile文件

. /path/to/script.sh 

这是不安全,但因为用户将能够编辑自己的日志

+0

我会远离bashrc文件。每次打开一个新shell时,它们都会记录下来,如果有人在xterm或GNU Screen中使用了选项卡,它们会很快填满。 – gpojd 2012-03-12 20:31:12

+0

@gpojd:好点。知道任何替代方法,除了跟踪auth.log? – cmc 2012-03-12 20:32:17

+1

我认为它可以在/ etc/profile中正常工作。它只在发生新的登录时运行,而不是在打开新的shell时运行。 – gpojd 2012-03-12 20:34:53

2

为什么不'您是否使用last命令?

我不会相信用户给你提供的信息。作为根你采取;-)