#!/bin/sh
user=snoopy
directory=/
# first files owned by the user and writable
find "$directory" -follow -user "$user" -perm /u+w 2> /dev/null
# now for files that are group writable with the user in that group
for groups in $(groups snoopy 2> /dev/null | cut -f2 -d:)
do
find "$directory" -follow -group "$user" -perm /g+w 2> /dev/null
done
# now for everything else
find "$directory" -follow -perm /o+w 2> /dev/null
如果您安装了 findutils 4.3.0 或更高版本,请使用“查找”命令:
对于当前目录下所有当前用户可写的文件:
对于当前目录下所有当前用户不可写的文件:
根据手册页:
您可以像这样创建一个 Perl 脚本 (
writable.pl
):然后以 root 身份使用此脚本,如下所示:
填写
USERNAME
和DIRECTORY
酌情。在此示例中,我将使用 gnu find 语法作为 -perm 标志:
基本上——如果你抛弃像 ACL 之类的古怪扩展,你就有 3 个选择——所有者、组和“其他”写访问权限。听起来像是一个循环的工作。
有足够的空间来优化它,但我会把它留给其他人......另外,我永远记不起查找和交叉文件系统的所有细节以及那种废话。另外,确保组的输出与我的测试 linux 系统上的输出相同
这是您如何查找用户可写文件的粗略示例。这将在以任何用户身份运行时,但如果您以非 uid0 用户身份运行它,您只会在运行脚本的用户同时拥有读取和执行权限的目录中找到内容。
此命令应该找到所有可写目录,您可以根据需要更改权限:
对于埃迪的回答,如果你投入:
然后它也会遍历名称中带有空格的目录。
你确定这真的是你想问的问题吗?
说“我想查看 X 帐户可以写入的所有文件”是指他们拥有的每个文件都带有 u+w,他们所属的任何组拥有的每个文件都设置为 g+w,并且每个文件都是可写的(o+ w)。
不可写会更难。您最好列出每个文件,然后排除他们可以写入的文件。
我不确定这是否是最好的方法,但应该按照你的要求做:
key当然在
-w
switch,也可以取反编辑:更多地考虑这一点,这个脚本打印当前用户可写的内容,它显然不适用于某些给定用户。
Linux
test -w /foldername/filename
可以检查当前用户是否对文件有写权限。如果有,则该过程返回 0,如果没有,则返回非零。作为 admin 或 root,您可以代表用户登录,并将
test
命令与find
命令组合,因此命令列表如下所示:运行每个文件都很慢,
test -w
但是会检查它是否可以写