Linux 上的 Cisco AnyConnect 禁用 resolv.conf 更新

Linux 上的 Cisco AnyConnect 禁用 resolv.conf 更新

有什么方法可以阻止 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.confX请参阅 .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'

相关内容