有什么方法可以阻止 Cisco AnyConnect 客户端在 GNU/Linux 机器上更新 /etc/resolv.conf?
答案1
这是通过超级用户回答,本质上只是使文件不可变
/etc/resolv.conf
随意 设置内容,然后使用命令将其设置为不可变chattr +i /etc/resolv.conf
。
我建议在文件设置为不可变之前添加一条注释,表明已将其设置为不可变,以防止将来产生混淆。
答案2
较新版本的 AnyConnect(@David G 提到的 4.3.05017 以上)在无法修改时失败/etc/resolv.conf
。
对我有用的是修改二进制文件并将文件内部/opt/cisco/anyconnect/bin/vpnagentd
的出现更改为其他内容(我选择仅将其中一个字母更改为 /etc//etc/resolv.conf
X请参阅 .esolv.conf 文件。
在版本中,4.8.03043
字符串位于偏移量处817635
,如下所示:
echo -n "X" | dd of=/opt/cisco/anyconnect/bin/vpnagentd bs=1 seek=817635 count=1 conv=notrunc
会工作。
但是,遵循 python3 脚本可能会在未来版本中发挥作用。请务必复制vpnagentd
文件以防万一,因为它会就地修改它。
#!/usr/bin/env python3
import re
filename="/opt/cisco/anyconnect/bin/vpnagentd"
# find occurence of C string resolv.conf (enging with 0 byte)
find=rb'resolv\.conf\00'
# replacement byte(s), we change only the first letter to X
replace=rb'X'
with open(filename,"rb") as binfile:
bincontent=binfile.read()
match = re.search(find,bincontent)
offset=match.start()
print(f"Found at offet {offset}")
with open(filename, 'rb+') as binfile:
binfile.seek(offset)
print(binfile.read(1))
binfile.write(replace)
确保停止vpnagentd
服务(例如systemctl stop vpnagentd
),否则您将得到:
OSError: [Errno 26] Text file busy: '/opt/cisco/anyconnect/bin/vpnagentd'
成功运行时它应该输出类似的内容:
$ sudo ./patch.py
Found at offet 817635
b'r'
任何后续运行都不会找到模式 pattern(这没关系)并失败:
$ sudo ./patch.py
Traceback (most recent call last):
File "./patch.py", line 16, in <module>
offset=match.start()
AttributeError: 'NoneType' object has no attribute 'start'