登录时自动运行Bash脚本

登录时自动运行Bash脚本,bash,unix,centos,Bash,Unix,Centos,我编写了一个脚本,将登录者的日期和用户名发送到日志文件中,以保存登录者的记录。我想知道您如何设置此脚本,使其在用户登录时自动执行,而不必在终端中手动运行。注意:用户名是当前登录的用户 我的代码: #!/bin/bash printf "$(date) $HOSTNAME booted!\n" >> /home/USERNAME/boot.log 把它放在~/.bash_配置文件中。它将在他们每次登录时运行 有关更多信息,请访问 解决此问题的一种更优雅的方法是从已写入且用户无法更改

我编写了一个脚本,将登录者的日期和用户名发送到日志文件中,以保存登录者的记录。我想知道您如何设置此脚本,使其在用户登录时自动执行,而不必在终端中手动运行。注意:用户名是当前登录的用户

我的代码:

#!/bin/bash

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

把它放在~/.bash_配置文件中。它将在他们每次登录时运行


有关更多信息,请访问

解决此问题的一种更优雅的方法是从已写入且用户无法更改的日志文件中读取。没有人能说得比:

我不相信用户会给你这些信息。作为你的根 拿着它;-)

一个很好的方法是使用
last
命令,这很好,因为它可以整洁地显示所有登录:图形登录、控制台登录和SSH登录

last
一种不那么优雅但仍然安全的方法是在/var/log/auth.log上执行grep。在我的Gnome/Ubuntu系统上,我可以使用它来跟踪图形登录:

grep "session opened for user USERNAME"
需要为每种登录类型找到适合您机器的模式:图形、控制台和SSH。这很麻烦,但如果您需要比上一次到达的时间更远的信息,您可能需要这样做

要直接回答您的问题:

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

#!bin/bash
printf "$(date) $HOSTNAME booted!\n" >> /home/$(whoami)/boot.log
并将此行添加到/etc/profile

. /path/to/script.sh

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

为什么不使用
last
命令


我不相信用户会给你这些信息。以根为根;-)

是否有任何安全考虑?你信任用户吗?特别是,如果用户能够禁用日志记录,或者篡改他/她的现有登录记录,这可以吗?我会远离bashrc文件。每次打开新shell时,它们都会记录日志,如果有人使用xterm或GNU屏幕中的选项卡,它们会很快被填充。@gpojd:说得好。除了跟踪auth.log之外,知道其他方法吗?我认为它在/etc/profile中可以很好地工作。它只在新登录时运行,而不是在打开新shell时运行。我发现,如果编辑etc/rc.d/rc.local脚本,它将允许每次系统启动并登录时都运行该脚本。@jasonagnon:rc.local在登录之前不是以root用户身份运行吗?