检测所有指向 /tmp 的链接?

检测所有指向 /tmp 的链接?

我想找出哪些文件链接指向我/tmp在 Ubuntu 上的文件夹。

背景:
我遇到了一个问题,我的/tmp文件夹权限被意外更改为 755。系统无法再以 root 以外的用户身份正常运行。

也许有一个链接到/tmp某个地方和命令

chmod 755 . -Rf 

该文件夹中的名为 的文件正在影响主/tmp文件夹。

我必须用以下方法修复它:

chmod 777 /tmp
chmod +t /tmp
sudo chown root:root /tmp

我只有一个文件系统,因此这应该没有问题。

答案1

尝试这个:

find / -path /proc -prune -o \( -lname '*/tmp' -o -lname '*/tmp/' \) -exec ls -l {} \;

示例输出:

# find / -path /proc -prune -o -lname '*/tmp' -exec ls -l {} \;
lrwxrwxrwx. 1 sergey sergey 4 Sep 22 11:27 /home/sergey/xxx/tmp -> /tmp
lrwxrwxrwx. 1 root root 10 Jun 20 10:28 /usr/tmp -> ../var/tmp
find: `/run/user/sergey/gvfs': Permission denied

答案2

据我所知,没有简单的方法可以列出指向 inode 的所有符号链接。因此,我建议使用标准寻找实用-L-相同文件开关:

  • -相同文件将根据目标文件的 inode 进行比较,
  • -L将在搜索中包含符号链接,这就是您要查找的内容。

以下是 /bin 中 /bin/dash 的示例:

$ find -L  /bin -samefile /bin/dash -exec ls -lhi {} \;
786515 lrwxrwxrwx 1 root root 4 Mar 29  2012 /bin/sh -> dash
786436 -rwxr-xr-x 1 root root 108K Mar 29  2012 /bin/dash

从此输出中,您可以看到 inode 编号(第一列)和箭头(最后一列),/bin/sh 是指向 /bin/dash 的符号链接。如果它们是硬链接,则不同文件的 inode 编号将相同,最后一列中将没有箭头。

最后,如果我需要在整个文件系统中查找这些链接,我会排除一些目录,例如/dev/进程/系统从搜索中。这将通过-小路-修剪swicthes(你可以添加任意数量的-o切换含义或者),2> /dev/null 复制代码是为了掩盖潜在的错误:

$ sudo find -L  / \( -path /dev -o -path /proc -o -path /sys \) -prune -samefile /bin/dash -exec ls -lhi {} \; 2>/dev/null

由于搜索整个文件系统会花费大量时间(主要取决于文件系统的大小),因此我将把此选项视为最后的手段。这就像大海捞针:并非不可能,但需要付出很多努力……

答案3

感谢这个问题,我找到了答案:Linux:查找给定“原始”文件的所有符号链接?(反向“readlink”)

find / -exec ls -ald {} ';' 2>/dev/null | grep '\-> /tmp' |grep -v /proc/

相关内容