Правильно установить бит выполнения на основе типа файла?

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

$ sudo find /var/www/html -executable -type f | grep '.png' /var/www/html/.../jquery.ui/themes/smoothness/images/ui-icons_2e83ff_256x240.png /var/www/html/.../jquery.ui/themes/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png /var/www/html/.../jquery.ui/themes/smoothness/images/ui-icons_cd0a0a_256x240.png ... 

Как установить бит выполнения для обычных файлов, которые обычно имеют его (например, программы, страницы PHP и скрипты Bash); и удалить его из обычных файлов, которые обычно не имеют его (например, TXT, PNG, JPG и ZIP-файлы)?

  • Будет ли stat () вызывать реальный доступ к жесткому диску или кэширование информации?
  • Может ли ps отображать только неядерные процессы в Linux?
  • / Принадлежит postfix: root после установки iRedMail
  • Распределения Linux для процессоров ARM
  • Как редактировать несколько файлов в VIM?
  • копировать файл от пользователя к другому в linux
  • Я чувствую, что find с помощью -exec и chmod должен вступить в игру где-то. Я также ожидаю, что механизм отбора учтет shebangs и другие магические заголовки; и не просто полагаться на [потенциально некорректный] бит выполнения или [потенциально отсутствующий] расширение. Но мой поиск не подходит для правильного ответа. Cf., Как я могу найти только исполняемые файлы в определенном каталоге в Linux? и Рекурсивно найти исполняемые файлы .

  • usb0 -> для чего именно?
  • Как кошка знает скорость передачи в последовательном порту?
  • Разрешения повреждены?
  • write () игнорирует права доступа к файлам
  • Негативы запуска процессов с приоритетом в реальном времени?
  • Поиск записи / dev для создания разделов на SD-карте
  • 2 Solutions collect form web for “Правильно установить бит выполнения на основе типа файла?”

    Это будет проходить через ваши файлы и установить исполняемый бит в зависимости от того, считает ли file файл исполняемым:

     find /var/www/html -type f -exec bash -c 'if file -b "$1" | grep -q executable; then chmod +x "$1"; else chmod -x "$1"; fi' None {} \; 

    Команда find очень похожа на вашу. Это изменение является добавлением команд bash. Это может быть проще понять, если они распределены по нескольким строкам следующим образом:

     if file -b "$1" | grep -q executable then chmod +x "$1" else chmod -x "$1" fi 

    Разумеется, вы можете изменить аргумент chmod для удовлетворения ваших конкретных потребностей.

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

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

     find /path/to/webroot/ -type f -exec chmod 644 -c '{}' \; find /path/to/webroot/ -type d -exec chmod 755 -c '{}' \; # change owner chmod root:www-data /path/to/webroot/ -R bash .fix-perm 

    где .fix-perm – это просто файл сценария

     #.fix-perm chmod g+w cache -R chmod g+w logs -R 
    Linux и Unix - лучшая ОС в мире.