Я пытаюсь найти любые домашние каталоги пользователей и их файлы, которые могут быть кем-либо доступны для записи.

Я написал это:

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

Это только обнаружение каталогов, но я хотел бы также добавить файлы.

2 ответа2

0

Я не уверен, что ты пытаешься сделать. Если вы хотите найти все файлы и каталоги в /home которые имеют разрешения 200 , вы можете сделать

find /home -perm -200

Однако это не список файлов и папок, доступных для записи в мире, 200 означает, что файл доступен для записи его владельцем. Если вы хотите, чтобы все файлы и папки, которые могут писать все, делали это:

find /home -perm -a=w

Ваш grep . ничего не делает. . означает "сопоставить ЛЮБОГО персонажа", поэтому оно всегда будет верным. Если вы ищете файлы или папки, имя которых начинается с . , вы можете сделать нужно grep "^\." ,

0
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 ... - выберите только ИД пользователя и домашний каталог
  3. [[ -d $home ]] - убедитесь, что каталог home-dir является каталогом
  4. (( (0$(stat -c %a $home) & 2) == 2 )):
    stat -c %a $home возвращает права доступа к файлу в восьмеричной форме (например, 755 ). Приставьте ноль, чтобы bash знал, что это восьмеричное число. Затем выполните побитовое выполнение - и получите бит "пригодный для записи". Если это значение равно нулю, то каталог не доступен для записи во всем мире. Если значение равно 2 (бинарный 10), тогда каталог доступен для записи всем пользователям.
  5. Итак, если это каталог, и он доступен для записи во всем мире, выведите идентификатор пользователя и каталог.
  6. альтернативная форма [[ $(stat -c %A $home) == *?w? ]] просматривает права доступа к файлу в строковой форме (например, drwxr-xr-x ) и затем проверяет, является ли второй последний символ буквой "w"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .