有一 windows 电脑通过 smb 连接 linux 服务器的几个文件夹,是否可以在 linux 服务器上监控 windows 连接情况,比如是否断开连接,断开了多久之类,想要做到的是如果 windows 电脑断开连接超过 30 分钟,就拒绝下次连接。
现在的想法是通过监控 linux 上 samba 的 log ,但发现 log 里每隔几十秒就会 closed connection ,然后再 connect to service ,而且 windows 电脑断开后 log 里也不会显示。
当然可以看两次 connect to service 时间间隔是否超过 30 分钟,但不知道是否稳定.
1
lhbc 2023-05-09 02:02:01 +08:00 via Android
smbstatus
|
2
huntagain2008 2023-05-09 10:13:17 +08:00
小白问了 GPT-4 ,姑且看看也好,回答如下。
在这种情况下,您可以在 Linux 服务器上设置一些脚本和配置,以监控 Windows 电脑的连接情况并实施断开超过 30 分钟后拒绝连接的策略。以下是一个简单的解决方案: 1. 首先,确保您已在 Linux 服务器上安装了 Samba 。如果没有,可以使用以下命令安装(以 Ubuntu 为例): ``` sudo apt update sudo apt install samba ``` 2. 编辑 Samba 配置文件 `/etc/samba/smb.conf`,为您的共享文件夹添加以下选项: ``` [shared_folder] path = /path/to/your/shared/folder read only = no guest ok = yes preexec = /path/to/your/connect_script.sh %I postexec = /path/to/your/disconnect_script.sh %I ``` 这将为连接和断开连接分别指定要运行的脚本。 3. 创建一个名为 `connect_script.sh` 的脚本,用于记录连接的时间戳: ```bash #!/bin/bash touch "/path/to/your/connect_timestamps/$1" ``` 4. 创建一个名为 `disconnect_script.sh` 的脚本,用于计算连接持续时间并实施 30 分钟限制: ```bash #!/bin/bash CONNECT_TIMESTAMPS_DIR="/path/to/your/connect_timestamps" CURRENT_TIMESTAMP=$(date +%s) CONNECT_TIMESTAMP=$(stat -c %Y "$CONNECT_TIMESTAMPS_DIR/$1") ELAPSED_TIME=$((CURRENT_TIMESTAMP - CONNECT_TIMESTAMP)) # 30 分钟转换为秒 THIRTY_MINUTES_IN_SECONDS=$((30 * 60)) if [ $ELAPSED_TIME -gt $THIRTY_MINUTES_IN_SECONDS ]; then # 拒绝未来的连接 iptables -A INPUT -s "$1" -j DROP fi ``` 5. 为这两个脚本设置可执行权限: ``` chmod +x /path/to/your/connect_script.sh /path/to/your/disconnect_script.sh ``` 6. 重启 Samba 服务,以使更改生效: ``` sudo systemctl restart smbd ``` 这个方案会在客户端连接和断开时分别调用 `connect_script.sh` 和 `disconnect_script.sh`。`disconnect_script.sh` 将计算连接持续时间,并在超过 30 分钟后拒绝来自客户端 IP 的未来连接。请注意,这个方案并不完美,如果客户端 IP 发生变化,拒绝策略可能会失效。 |
3
huntagain2008 2023-05-09 10:28:10 +08:00 1
Poe 只给了一次 GPT-4 机会,但是卡住了,我问了两个,又给了一个答案。这次用的是 smbstatus
要在 Linux 服务器上监控 Windows 电脑通过 SMB 连接的情况,并在断开连接超过 30 分钟后拒绝下次连接,您可以考虑以下解决方案: 1. 在服务器上安装并使用 Samba 。Samba 是一个开源的 SMB 实现,适用于 Linux 和 UNIX 系统。请根据您的 Linux 发行版安装相应的 Samba 软件包。配置 Samba 以允许客户端电脑通过 SMB 连接访问服务器上的共享文件夹。 2. 使用 `smbstatus` 命令来监控连接状态。这个命令可以显示当前 Samba 服务器上的所有活动连接。您可以编写一个脚本定期运行此命令,并分析输出以确定特定客户端的连接状态。例如: ```` #!/bin/bash target_client="192.168.1.100" # 客户端 IP 地址 disconnect_threshold=1800 # 30 分钟,以秒为单位 while true; do connection_info=$(smbstatus -b | grep $target_client) if [ -z "$connection_info" ]; then if [ -z "$disconnect_time" ]; then disconnect_time=$(date +%s) fi duration=$(($(date +%s) - $disconnect_time)) if [ $duration -gt $disconnect_threshold ]; then # 在此处添加您的拒绝连接操作,如修改 Samba 配置文件拒绝特定客户端 fi else unset disconnect_time fi sleep 60 # 每分钟检查一次 done ``` 这个脚本会检查客户端连接状态,并在连接断开超过 30 分钟后执行拒绝连接的操作。您需要将 IP 地址更改为实际的客户端 IP 地址。 3. 为了拒绝特定客户端的连接,您可以编辑 Samba 配置文件(通常位于 `/etc/samba/smb.conf`)。在 `[global]` 部分添加以下内容,以阻止特定 IP 地址的客户端连接: ```` hosts deny = 192.168.1.100 ``` 保存更改后,您需要重新启动 Samba 服务以应用新的配置。 这个方案应该可以满足您的需求。但请注意,这并不是一种完美的解决方案,因为客户端可以更改 IP 地址或使用其他方法绕过限制。然而,作为一个基本的策略,它应该能达到您的目的。 |
4
MeteorVIP 2023-05-09 20:07:47 +08:00 via iPhone
@huntagain2008 #2 #3 你回答的问题我没有认真看。但,这种感觉很像以前外婆去算命问仙婆。
|
5
huntagain2008 2023-05-10 11:20:18 +08:00
#4 问 AI 找解决方案,怎么能扯到算命?小白认为用 AI 写代码修 BUG 又不是新鲜事了,今天有个帖子就是用 GPT 修的陈年 bug
让 gpt 给 oh-my-zsh 修了个陈年 bug https://www.v2ex.com/t/938726 小白认为确实 AI 生成的代码可能存在不合适的场景,或者安全隐患,但这时首先你要能自己辨别,然后调整 prompt ,比如要避免某些安全问题,让 AI 再尝试其他路线。如果实在不合适,那就不用 AI 的答案就行,AI 就是辅助工具,用来参考即可,不要全搬。 ChatGPT 给的一个获取客户端 IP 的代码。评论区就警告他“不要随便相信 header 里面附带的 IP 变量!!!很多网站的 ip 限制就是被这种方式给骗过去的。”,所以懂的人他肯定是能辨别出来 GPT 的代码有安全问题。 https://www.v2ex.com/t/937951 |