尝试查找任何人都可写入的主目录

尝试查找任何人都可写入的主目录

我正在尝试找到任何用户主目录及其可由任何人写入的文件。

我写了这个:

find /home -type d -perm -200 | grep . || 
   echo no world-writable directories here

这仅检测目录,但我还想添加文件。

答案1

getent passwd | 
cut -d: -f1,6 | 
while IFS=: read user home; do 
    if [[ -d $home ]] && (( (0$(stat -c %a $home) & 2) == 2 )); then 
        echo $user $home
    fi
done

对世界可写的测试也可以这样写:

[[ $(stat -c %A $home) == *?w? ]]

解释:

  1. getent passwd- 以 /etc/passwd 格式获取系统上所有用户的信息
  2. cut ...– 仅选择用户 ID 和主目录
  3. [[ -d $home ]]- 确保 home-dir 是一个目录
  4. (( (0$(stat -c %a $home) & 2) == 2 )):
    stat -c %a $home以八进制形式返回文件权限(例如755:)。在前面加上一个零,以便 bash 知道它是一个八进制数。然后执行按位与操作以获取“全球可写”位。如果该值为零,则目录不是全球可写的。如果该值为 2(二进制 10),则目录是全球可写的。
  5. 因此,如果它是一个目录,并且是全世界可写的,则输出用户 ID 和目录。
  6. 另一种形式[[ $(stat -c %A $home) == *?w? ]]是查看字符串形式的文件权限(例如drwxr-xr-x:),然后检查倒数第二个字符是否为“w”

答案2

我不确定你想做什么。如果你想查找/home具有权限的所有文件和目录200,你可以这样做

find /home -perm -200

但是,这不是所有人都可写的文件和文件夹列表,200这意味着该文件可由其所有者写入。如果您希望所有文件和文件夹都可以由所有人写入,请改为执行以下操作:

find /home -perm -a=w

您的grep .命令什么也不做。.表示“匹配任意字符”,因此它始终为真。如果您要查找名称以 开头的文件或文件夹.,则可以执行 need grep "^\."

相关内容