Как «найти» все файлы и папки с правами доступа 0**?

Как «найти» все файлы и папки с правами доступа 0**?

У меня была странная ситуация, когда я обнаружил ряд файлов и папок, для которых были установлены разрешения 000. Это было легко исправить с помощью:

sudo find . -perm 000 -type f -exec chmod 664 {} \; 
sudo find . -perm 000 -type d -exec chmod 775 {} \;

К сожалению, я внезапно понял, что проблема была немного сложнее с некоторыми странными разрешениями, такими как 044 и некоторыми другими странными настройками. Оказывается, они разбросаны и непредсказуемы.

Есть ли способ поиска разрешений, таких как 0** или других подобных ограничивающих конфигураций разрешений?

решение1

Я бы использовал что-то вроде этого:

find . ! -perm -u=r ! -perm -u=w ! -perm -u=x -ls

Или, если вы предпочитаете восьмеричную запись:

find . ! -perm -400 ! -perm -200 ! -perm -100 -ls

К сожалению, не представляю, как это рассматривать как один -permиз вариантов.

Приведенный выше синтаксис является стандартным, за исключением -lsчасти (общей, но не POSIX), которую вы можете заменить в -exec ls -disl {} +системах, где findона не поддерживается -ls, чтобы получить аналогичный вывод.

решение2

СГНУfind, вы можете сделать это, выполнив поиск файлов, которые не соответствуют «ни одному установленному биту для владельца»:

find . ! -perm /700

То же самое, напримерFreeBSDfindявляется

find . ! -perm +700

Оба они работают одинаково. -perm /700or -perm +700match, если установлен какой-либо из битов разрешений владельца; !отрицает это, поэтому ! -perm /700or ! -perm +700match, если ни один из битов разрешений владельца не установлен. Остальные биты игнорируются.

решение3

Если вы используете sfindили любую программу, использующую libfindили если вы используете BSD find, вы можете использовать:

find path -perm +0xxx

чтобы найти файлы, в которых установлены какие-либо биты, упомянутые в шаблоне, поэтому

find . ! -perm +0700

должно сработать в вашем случае. Кстати: это также поддерживается GNU find.

Обратите внимание, что это расширение не упоминается в POSIX и не реализовано в find.

Связанный контент