记录服务器登录用户的历史命令

本文详细介绍了如何将特定的PS脚本内容添加至Linux系统的/etc/profile文件,包括变量定义、环境变量设置、历史命令记录等功能,并确保了脚本的正确执行和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PS1=" `whoami`@`hostname`:"'[$PWD]'
history
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]
then
USER_IP=`hostname`
fi
if [ ! -d /tmp/dbasky ]
then
mkdir /tmp/dbasky
chmod 777 /tmp/dbasky
fi
if [ ! -d /tmp/dbasky/${LOGNAME} ]
then
mkdir /tmp/dbasky/${LOGNAME}
chmod 300 /tmp/dbasky/${LOGNAME}
fi
export HISTSIZE=4096
DT=`date +%Y%m%d_%H%M%S`
export HISTFILE="/tmp/dbasky/${LOGNAME}/${USER_IP} dbasky.$DT"

chmod 600 /tmp/dbasky/${LOGNAME}/*dbasky* 2>/dev/null


将以上内容增加到/etc/profile中

<think>首先,用户的问题是关于Linux系统中查看服务器历史登录IP地址的命令用户明确说:“我想在Linux系统中查找查看服务器登录过的IP地址的命令请问Linux查看服务器历史登录IP的命令”。现在,我需要参考系统级指令:-所有行内数学表达式必须使用$...$格式,但在这个问题中,可能没有数学表达式,因为它是关于Linux命令的。-独立公式必须使用$$...$$格式并单独成段,同样,可能不适用。- LaTeX语法正确:确保任何数学部分正确。-使用中文回答:整个响应必须用中文。-生成相关问题:在回答结束时,生成相关问题。-回答中引用的段落末尾自然地添加引用标识,例如:[^1]。用户提供了几个引用:-引用[1]:关于history命令查看历史命令,但缺少时间戳。-引用[2]:关于查看所有登录用户操作历史命令,提到history只针对登录用户,root无法查看其他用户的history。-引用[3]:关于查看最近登录IP和历史命令执行日期,包括history命令的选项。-引用[4]:关于通过登陆IP记录Linux所有用户登录操作日志的方法,使用脚本在/tmp/history目录记录用户说:“上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户一次的问题和你的回答。”但在这个对话中,这是第一次交互,所以没有“上一次的问题”。我需要基于当前问题。用户的需求是:查看服务器历史登录IP的命令。意思是,查看过去登录服务器的IP地址。从引用中提取相关信息: -引用[2]提到:在Linux中,history命令只显示当前用户历史命令,不显示其他用户或IP地址。 -引用[3]给出了一些history命令选项,如-N显示最近的N个记录。-引用[4]描述了一个方法:通过脚本在/tmp/history目录记录所有用户登录IP和操作日志。 所以,对于查看历史登录IP,标准方法是查看系统日志文件,如/var/log/auth.log或/var/log/secure。常见命令:- last命令:显示登录历史,包括用户名、终端、IP地址、登录时间等。- lastb命令:显示失败的登录尝试。-查看/var/log/auth.log(Debian/Ubuntu)或/var/log/secure(CentOS/RHEL)文件。 在引用中,引用[4]提到一个脚本方法,但那是自定义的。标准系统命令更可靠。用户指定了“服务器历史登录IP”,所以重点是IP地址。我的回答应该结构清晰,逐步解决问题,保证真实可靠。步骤:1.解释标准方法:使用last命令。2.如果需要更多细节,查看日志文件。3.提到如何过滤IP地址。4.根据引用,引用[4]中的脚本方法可以作为补充。但用户说引用仅供参考,不是真正需求,所以我应该优先标准命令。 回答结构:-开头直接回答命令。 -详细解释如何使用。 -添加引用标识,如果引用相关部分。 -最后生成相关问题。用中文回答。 命令示例: -last |grep -i"loggedin"或类似,但last直接显示IP。 last命令输出包括IP地址。例如:last -i显示IP地址。 manlast:last [选项][用户名...][终端...]选项:-i或--ip显示IP地址而不是主机名。 在大多数系统上,last默认显示IP。例如:$lastusernamepts/0192.168.1.100 TueMay2110:00 stilllogged in所以,IP是可见的。查看所有登录历史:last只显示IP:last| awk'{print$3}' |sort |uniq或类似。但最好提供完整命令。另一个命令:who /var/log/wtmp,但wtmp是登录记录文件,last读取它。所以,last是标准命令。 日志文件:/var/log/auth.log或 /var/log/secure,使用grep。例如:grep"Acceptedpassword" /var/log/auth.log| awk'{print$11}'但IP位置可能因系统而异。 在回答中,我应该推荐last命令作为首选。 生成相关问题:基于主题,如: 1.如何查看失败的登录尝试? 2.如何永久记录登录IP? 3.如何限制IP登录? 4.与history命令的区别?系统级指令说“生成相关问题”,所以在结束前添加。 引用标识:当引用用户提供的引用时,添加[^1]等。 在回答中,我可以提到引用[3]和[4]中的点。例如,引用[3]提到history命令选项,但用户问的是登录IP,不是命令历史。引用[4]提到脚本方法。所以,在回答中,我可以先说标准命令,然后提到自定义方法作为选项。 最终回答结构: -介绍:在Linux中,查看历史登录IP的常用命令是last。 -详细解释:如何使用last命令,示例。-替代方法:查看日志文件,如/var/log/auth.log。-自定义方法:引用引用[4],提到脚本记录。 -添加引用标识。 -结束:相关问题。 确保回答真实可靠:基于标准Linux知识。</think>### Linux 查看服务器历史登录IP的命令 在Linux系统中,查看服务器历史登录的IP地址是系统管理和安全审计的常见需求。标准方法是使用系统日志文件和内置命令,这些工具能记录用户登录事件(包括IP地址)。以下我将逐步介绍最可靠且常用的方法,确保回答基于真实Linux环境(如Debian/Ubuntu或CentOS/RHEL系统)。需要注意的是,history命令(如引用[1]和[2]所述)主要用于查看命令执行历史,而非登录IP地址;它只针对当前用户,且无法直接显示IP[^2]。因此,我推荐以下方法: #### 1. **使用`last`命令(首选方法)** `last`命令是查看登录历史的最直接工具,它读取系统日志文件`/var/log/wtmp`(记录登录/注销事件)。默认输出包括用户名、终端、IP地址、登录时间和状态。 - **基本命令**: ```bash last ``` 输出示例: ``` username pts/0 192.168.1.100 Tue May 21 10:00 still logged in root tty1 Mon May 20 09:30 - 17:00 (07:30) ``` 其中,第三列(如`192.168.1.100`)就是登录IP地址。如果显示为空白或主机名,可能需添加选项强制显示IP。 - **过滤只显示IP地址**: 使用`-i`或`--ip`选项(在某些系统上,IP地址默认显示,但此选项确保输出标准化),并结合`awk`提取IP: ```bash last -i | awk '{print $3}' | grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}' | sort | uniq ``` 解释: - `last -i`:强制显示IP地址而非主机名。 - `awk '{print $3}'`:提取第三列(IP地址)。 - `grep -E ...`:过滤出有效的IPv4地址。 - `sort | uniq`:去重并排序,显示所有唯一登录IP。 此命令会列出所有历史登录IP,包括当前登录会话(如`still logged in`)。引用[3]提到`last`命令的灵活性,它支持选项如`-n N`显示最近的N条记录(例如`last -n 10`查看最近10登录)[^3]。 - **查看特定用户时间范围**: - 只显示用户`john`的登录IP:`last -i -n 20 john`(显示最近20条)。 - 结合日期:`last -i -s 2024-05-01 -t 2024-05-31`(查看5月份登录记录)。 #### 2. **查看系统日志文件(备选方法)** 如果`last`命令不可用(例如`wtmp`文件损坏),可以直接解析系统认证日志。日志文件路径因发行版而异: - **Debian/Ubuntu**:主日志文件为`/var/log/auth.log`。 - **CentOS/RHEL**:主日志文件为`/var/log/secure`。 使用`grep`搜索登录事件(如SSH登录): ```bash grep "Accepted password" /var/log/auth.log | awk '{print $11}' ``` 或针对CentOS: ```bash grep "Accepted password" /var/log/secure | awk '{print $11}' ``` 解释: - `"Accepted password"`:匹配成功登录事件(SSH登录)。 - `awk '{print $11}'`:提取IP地址列(位置可能因日志格式变化,需验证;通常为第11列)。 - 输出示例:`192.168.1.100`。 为更可靠,可以添加时间戳: ```bash grep "Accepted password" /var/log/auth.log | awk '{print $1,$2,$3,$11}' ``` #### 3. **自定义脚本方法(高级选项)** 对于更持久的记录(如审计所有用户操作),可以设置自定义脚本,如引用[4]所述。该方法在`/tmp/history`目录记录所有用户登录IP和命令历史: - 实现步骤: 1. 创建脚本(例如`/etc/profile.d/login_logger.sh`): ```bash #!/bin/bash USER_IP=$(echo $SSH_CLIENT | awk '{print $1}') LOG_DIR="/tmp/history" if [ ! -d "$LOG_DIR" ]; then mkdir -p "$LOG_DIR" chmod 777 "$LOG_DIR" fi DATE=$(date +"%Y%m%d_%H%M%S") echo "$(date) - User: $USER, IP: $USER_IP" >> "$LOG_DIR/${USER}_login.log" export HISTFILE="$LOG_DIR/${USER}_history.log" ``` 2. 使脚本生效:`chmod +x /etc/profile.d/login_logger.sh`。 3. 登录后,在`/tmp/history`目录查看文件,如`cat /tmp/history/john_login.log`。 - 优点:记录详细,包括IP和操作历史。缺点:需手动设置,且`/tmp`目录在重启后可能清空(建议修改为持久目录如`/var/log/history`)[^4]。 #### 注意事项 - **权限要求**:查看日志或执行`last`通常需要root权限。使用`sudo last`或`sudo grep`。 - **日志轮转**:日志文件可能被轮转(如`auth.log.1`),使用`zcat /var/log/auth.log.1.gz`查看压缩文件。 - **安全提示**:历史登录IP信息有助于检测入侵(如异常IP),但标准日志可能被删除。建议启用`rsyslog`或`auditd`进行长期审计。 通过以上方法,您可以高效查看服务器历史登录IP。如果问题持续,提供更多细节(如Linux发行版)可进一步优化回答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值