我需要确保,当从系统中删除特定用户时,他/她的所有文件都被删除。该系统上会经常发生用户创建/删除操作,因此我想重用 UID,并希望确保新用户无法访问旧用户的任何文件。
我的问题有两个:
- 是否有一种通用且简单的方法来查找特定用户拥有的所有文件?或者系统范围是
search -uid n
我唯一的选择? - 如果系统范围的搜索是唯一的选择,那么哪些目录通常可以由普通用户写入(假设分布如下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