Я хотел бы рекурсивно найти все файлы в моей папке public_html
, которые не являются общедоступными (т. Е. Те файлы, которые приведут к ошибке 403). Есть ли команда быстрого bash для этого? Я использую Linux-серверы под управлением apache, если это имеет значение. Благодарю.Рекурсивно найти файлы, которые не являются общедоступными
ответ
Используйте find
команду:
find . ! -perm -o=r
будет искать файлы в текущем каталоге и подкаталогах, который имеет права доступа к файлу, так что группа «другие» не может прочитать файл.
На странице руководства для find
приведены некоторые примеры этих вариантов.
Вы можете запустить эту команду как www-data
пользователя:
find . ! -readable
Чтобы найти все файлы, которые не доступны для чтения веб-сервер.
Большое спасибо за ваш ответ, @cleod_ideafix. Но «найди. -perm -o-r' по-прежнему возвращает мне файлы, в которых группа 'others' имеет читаемый доступ (кажется, возвращает мне все файлы в папке). Но «найди. -perm 700' и 'find. -perm 600', похоже, работает. –
@YingXiong: это должно быть 'find. ! -perm -o = r' – mklement0
@ mklement0 Да, это работает. Благодаря! –
Примечание: Этот ответ был написан в то время как mcleod_ideafix's answer все еще содержали следующие сломана команду: find . -perm -o-r
; последний раздел этого ответа объясняет, почему он не может работать.
find . ! -perm -o=r
- матчи всех файлов и каталогов в поддереве текущего каталога (в
.
)- , чтобы ограничить соответствие с файлов только добавить
-type f
.
- , чтобы ограничить соответствие с файлов только добавить
- которые делают не (
!
) имеют чтения разрешения (r
) набор для основных безопасности "других (мира)" (o
)
Это работает, как задумано, до тех пор, все проверенные файлы не были созданы учетной записью пользователя, в контексте которой веб-сервер работает и не принадлежит к группе, в которой учетная запись веб-сервера является членом. Как правило, это так.
команда POSIX-совместимый.
mcleod_ideafix's answer предлагает более надежный вариант доступный с GNUfind
«с (нестандартным) -readable
тест:
При запуске в контексте учетной записи пользователя на веб-сервер (о Linux, www-data
), это будет соответствовать только файлам и каталогам, которые веб-сервер эффективно не может читать, независимо от того, какой пользователь и группа принадлежит файлу:
sudo -u www-data find . ! -readable -prune
Обратите внимание, что -prune
предотвращает попытки спускаться в нечитаемые подкаталогов и тем самым подавляет предупреждения.
- Если вы хотите ограничить соответствия для файлов только, она становится все более сложным:
sudo -u www-data find . ! -readable \(-type f -print -o -prune \)
Что касается , что не работы:
- Команды, такие как с
find . -perm 700
иfind . -perm 600
будет соответствовать только файлы с этим режимом точной (700
переводитu=rwx,go=
,600
кu=rw,go=
), так что вам придется строить команды для всех возможных вариантов для пользователя и группы разрешений для поиска всех интересующих матчей. find . -perm -o-r
принципиально сломаны и неизменно соответствует любой файл или каталог:-
префикс значения, переданного в-perm
указывает, что все права, которые следуют быть установить в соответствующие файлы.-perm
позволяет только положительное согласование разрешений (что установлено в отличие от того, что не установлен), поэтому принципиально невозможно выразить «матч, только если это разрешение не установлен» логику просто-perm
единственный аргумент .- Хотя
-r
является синтаксически поддерживается (потому что это действительноchmod
синтаксис), это бессмысленно здесь и результаты в не-оп. - Технически
-o-r
сообщает-perm
: вычесть (удалить) бит разрешения на чтение для «других» из начального значения маски режима, используемой для сопоставления; поскольку это начальное значение равно000
, или, символически,a=
, любая попытка вычесть разрешения из этого будет no-op, т. е. не имеет эффекта. Для того, чтобы поместить его в бессмертных словах Билли Престон и Брюс Фишер: Nothin' from nothin' leaves nothin' - чистого эффект что никаких ограничений вообще не помещаются на разрешениях потенциально соответствующие файлы или каталоги, так что все элементов безоговорочно соответствует.
- Хотя
- Таким образом, единственным вариантом является
-perm
сам матч положительно (-perm -o=r
), а затем NEGATE результат путем размещенияfind
«ы отрицания оператора,!
, перед ним.
- 1. Вложенные типы, которые являются общедоступными
- 2. API Google Диска: выберите файлы и папки, которые являются общедоступными
- 3. Найти файлы, которые были изменены рекурсивно
- 4. Java-импорт пользовательских классов, которые не являются общедоступными
- 5. Найти все файлы рекурсивно, которые не находятся в файле exclude
- 6. Рекурсивно найти вызванные пакетные файлы
- 7. Как найти файлы с «GTK», которые не являются «доступ запрещен»
- 8. Найти все файлы в каталоге, которые сами не являются каталогами
- 9. Фильтрация URL-адресов, чтобы разрешить только те, которые являются общедоступными
- 10. Частные DLL-функции являются общедоступными
- 11. Рекурсивно найти и заменить файлы
- 12. Рекурсивно найти подкаталоги и файлы
- 13. Как удалить файлы, которые не являются mp3?
- 14. Как найти файлы/каталоги, которые являются исполняемыми кем-либо?
- 15. найти сетевые интерфейсы, которые не являются RUNNING
- 16. Найти последующие записи, которые не являются активными
- 17. Найти элементы, которые не являются [Serializable]
- 18. Найти все классы, которые не являются @Autowired
- 19. Найти дубликаты, которые не являются нулевыми mongodb
- 20. Найти файлы, которые имеют определенные атрибуты
- 21. В C++ 11 защищенные средства являются общедоступными?
- 22. файлы copyhell copy, рекурсивно исключающие файлы, которые существуют в списке
- 23. Являются ли Java-конструкторы общедоступными по умолчанию?
- 24. Являются ли конструкторы по умолчанию общедоступными?
- 25. Являются ли незадекларированные классы в Java общедоступными?
- 26. Почему члены класса являются частными и общедоступными?
- 27. Найти все .php файлы в папке рекурсивно
- 28. Как я могу найти файлы CSS рекурсивно?
- 29. Рекурсивно найти файлы с определенным расширением
- 30. Скопируйте файлы, которые являются N дней старые
Try [ '' cURL''] (http://curl.haxx.se/docs/manpage.html) –
Благодарности @PatrickRoberts. Не могли бы вы объяснить свой ответ, пожалуйста? Кстати, я хочу сделать это на стороне сервера (как администратор, чтобы проверить, какие файлы могут вызвать проблемы), а не на стороне клиента (как пользователь, фактически загружая все файлы). –
Зависит от того, какой сервер вы используете. Вы должны указать это в своем вопросе. –