在遵循 FHS 的系统中哪些目录是可写的?

在遵循 FHS 的系统中哪些目录是可写的?

我需要确保,当从系统中删除特定用户时,他/她的所有文件都被删除。该系统上会经常发生用户创建/删除操作,因此我想重用 UID,并希望确保新用户无法访问旧用户的任何文件。

我的问题有两个:

  1. 是否有一种通用且简单的方法来查找特定用户拥有的所有文件?或者系统范围是search -uid n我唯一的选择?
  2. 如果系统范围的搜索是唯一的选择,那么哪些目录通常可以由普通用户写入(假设分布如下FHS)?
    • 他的主目录
    • /tmp
    • ??

用户没有sudo权限,因此只能在标准 Unix 文件系统中全局可写的位置进行写入。

答案1

如果您要删除帐户,请使用userdel -r。这将删除用户的home目录及其内容。此外,属于该用户的邮件假脱机文件也将被删除。

我不认为任何目录不能保存属于相关用户的对象。如果用户具有 SUDO 权限,则尤其如此。

用于find查找您要删除的帐户的UID;或者刚刚删除:

find / -user <UID> -exec ls -ld {} +

其中 UID 替换为相关的实际 UID 值,如果您尚未删除帐户,则替换为用户名;

或者,一般来说,对于不再映射到任何名称的 UID:

find / -nouser -exec ls -ld {} +

它们可以在各种 Unix 风格(HP-UX、AIX 等)和 Linux 发行版之间移植。 GNUfind允许-exec ls -ld {} +将 替换为-ls

答案2

我自己做了一些研究。主要来源:http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/c23.html

长话短说:没有什么可以阻止用户创建文件。然而,在标准的linux FHS中,只有某些目录是每个人都可写的。只要您使用遵循此约定的发行版,您就应该只检查以下目录(如我自己的系统上的测试所示):

  • /dev/shm(在某些发行版中默认安装)
  • 用户主目录
  • /var/tmp
  • /var/run/screen/S-rubenf
  • /tmp
  • /mnt/usb-disk(使用 gid=users 挂载)

来源:

find -type d | 
  while read DIR; do 
    if touch $DIR/test_can_be_removed123 2>/dev/null; then 
      rm $DIR/test_can_be_removed123
      echo $DIR >> writable_directories
    fi
  done

相关内容