在 Kali Linux 中更改文件权限

在 Kali Linux 中更改文件权限

如何更改文件权限以在 Kali Linux 中执行二进制可执行 ELF 文件?我一直在尝试chmod +x <filename>,然后使用 运行它,./filename但我得到的只是Error: No file found。还有其他想法吗?我甚至尝试过chmod 777 <filename>。我想知道我是否遗漏了什么?

编辑:

输出file <filename>:

root@swat:~/Downloads# file talisman 
talisman: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), 
dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, 
BuildID[sha1]=2b131df906087adf163f8cba1967b3d2766e639d, not stripped

输出ldd <filename>:

root@swat:~/Downloads# ldd ./talisman 
not a dynamic executable

输出ls /lib:

root@swat:~# ls /lib
console-setup  init                                  startpar
cpp            klibc-k3La8MUnuzHQ0_kG8hokcGAC0PA.so  systemd
crda           ld-linux.so.2                         terminfo
cryptsetup     live                                  udev
firmware       lsb                                   x86_64-linux-gnu
hdparm         modprobe.d
ifupdown       modules

答案1

在以下几种情况下,您可能会收到“没有此文件或目录”的消息:

  • 该文件不存在。这里不是这种情况。

  • 有一个同名文件,但它是一个悬空符号链接。chmod +x ./filename如果是这种情况,则会打印错误。

  • 该文件是动态链接的 ELF 文件,运行它所需的程序解释器不存在。

    用于readelf -l filename | grep interpreter找出需要哪个程序解释器,并验证存在且具有正确的权限。

  • 该文件存在,您甚至可以读取它,但是当您尝试执行它时,您会被告知它不存在。

file -L filename命令将告诉您这个二进制文件是什么。

我找不到任何 32 位 Linux 可执行文件示例来尝试此操作,但也许您可以运行命令file并验证文件是 32 位还是 64 位。您可能在未安装 32 位支持的 64 位系统上有一个 32 位二进制文​​件(这是“程序解释器丢失”的特殊情况)。

答案2

这解决了它。

root@swat:~/Downloads# readelf -l ./talisman | grep interpreter
[Requesting program interpreter: /lib/ld-linux.so.2]

然后我通过发出以下命令来查找缺少的库:

root@swat:~/Downloads# ldd /bin/ls
linux-vdso.so.1 (0x00007ffe9a971000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 
(0x00007fe90a8a7000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe90a50a000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fe90a297000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fe90a093000)
/lib64/ld-linux-x86-64.so.2 (0x000056083d3b2000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 
(0x00007fe909e76000)

这证实了我没有该库的损坏符号链接,并且(/lib/ld-linux.so.2)未在中找到它正在加载的库/bin/ls

发出此命令可修复该问题:

sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1

相关内容