Архивы: chmod

По ошибке выполнил chmod -R user:user /* — инструкция как вернуть назад

Когда я это сделал, сидел минут 5 не понимаю что делать и куда бежать, хотелось плакать)))

У меня на сервере — ВМ установлена Debian и панелька ISP Manager Lite, но потребовалось изменить владельца одной директории, захожу в консоль, перехожу в директорию и ввожу бездумно команду:

chmod -R user:user /*

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

Через пару минут легли все сайты.

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

Друг написал пару скриптов:

Первый парсит разрешения всех файлов и папок в файл:

find -P / -not -path "/sys/*" -not -path "/proc/*" -printf '%u.%g|%p\n'> /perm.dmp

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

for i in $(cat perm.dmp);do chown ${i%|*} "${i#*|}";done

Скрипт написан за 3 минуты и имеет ряд недостатков, но сайты поднять он мне помог)

  • Проблемы с путями где есть пробел в имени файла
  • Судя по всему есть ограничение если очень много строк в файле, мне пришлось разбить полученный файл на блоки по 20 000 строк

формат файла вот такой:

root.root|/
root.root|/perm.dmp
root.root|/var
root.root|/var/spool
root.root|/var/spool/cron
daemon.daemon|/var/spool/cron/atjobs
daemon.daemon|/var/spool/cron/atjobs/.SEQ
daemon.daemon|/var/spool/cron/atspool
root.crontab|/var/spool/cron/crontabs
root.crontab|/var/spool/cron/crontabs/root
root.root|/var/spool/rsyslog
Debian-exim.Debian-exim|/var/spool/exim4
Debian-exim.Debian-exim|/var/spool/exim4/input
Debian-exim.Debian-exim|/var/spool/exim4/msglog
Debian-exim.Debian-exim|/var/spool/exim4/db
root.root|/var/spool/mail
root.root|/var/log

Всем спасибо! Читать далее »

Рекурсивное применение chown отдельно на директории и файлы

2015-04-03_101233

Для рекурсивного применения разрешений в Linux можно применить команды:

Назначить всем папкам права drwxr-xr-x на запись и выполнение

find /path/to/base/dir -type d -exec chmod 755 {} +

Рекурсивно назначить всем файлам в папке права -rw-r—r— на чтение:

find /path/to/base/dir -type f -exec chmod 644 {} +

Или, если очень много файлов, то можно так:

chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)

Or, to reduce chmod spawning:

find /path/to/base/dir -type d -print0 | xargs -0 chmod 755
find /path/to/base/dir -type f -print0 | xargs -0 chmod 644

Читать далее »