Я нещодавно набрав команду
sudo chmod 777 -R /
після цього деякі речі люблять
sudo -i
не працюють нормально. Тож мені цікаво, чи є якийсь спосіб я міг би відновити дозволи до папки до їх початкового стану?
Я нещодавно набрав команду
sudo chmod 777 -R /
після цього деякі речі люблять
sudo -i
не працюють нормально. Тож мені цікаво, чи є якийсь спосіб я міг би відновити дозволи до папки до їх початкового стану?
Відповіді:
З цієї безладної ситуації можна повернутися.
Я знову побіг того ж виду з питання (якась помилка в сценарії, про який я писав) і вирішив це, але вам потрібно звернутися за допомогою до експерта. Будьте дуже обережні!
По-перше, мою ситуацію було легше вирішити, оскільки у мене була подвійна система завантаження (Ubuntu та моя стара версія Fedora), але запуск ОС з CD / DVD або USB-ключа повинен робити те саме.
MPOINT=/mount/ubuntu
Спочатку я змонтував свої файлові системи на зразок цієї (не забудьте створити точки монтажу):
mount /dev/ubuntu/root $MPOINT
mount /dev/ubuntu/home $MPOINT/home
Потім я запустив таку команду (моя проблема була лише в декількох критичних - каталогів), щоб скопіювати дозволи на працюючу систему в безладний (адже в моєму випадку я встановив систему Ubuntu у Virtual Box під Fedora і отримали дозволи там):
find /etc /usr /bin /sbin -exec stat --format "chmod %a \"${MPOINT}%n\"" {} \; > /tmp/restoreperms.sh
А потім я запустив скрипт Restoperms.sh.
Мені знову вдалося завантажитися на Ubuntu.
Вміст Restoperms.sh буде приблизно таким:
(...)
chmod 755 /mount/ubuntu//etc/ppp
chmod 755 /mount/ubuntu//etc/ppp/ipv6-up
chmod 2750 /mount/ubuntu//etc/ppp/peers
chmod 640 /mount/ubuntu//etc/ppp/peers/provider
chmod 755 /mount/ubuntu//etc/ppp/ipv6-up.d
chmod 777 /mount/ubuntu//etc/ppp/resolv.conf
(...)
Я не перевіряв його, але він також повинен працювати для власників та груп власників. Щось на зразок:
find /etc /usr /bin -exec stat --format 'chown %U:%G ${MPOINT}%n' {} \; > /tmp/restoreperms.sh^
(...)
chown root:root /mount/ubuntu//etc/obex-data-server/imaging_capabilities.xml
chown root:root /mount/ubuntu//etc/obex-data-server/capability.xml
chown root:dip /mount/ubuntu//etc/ppp
chown root:root /mount/ubuntu//etc/ppp/ipv6-up
chown root:dip /mount/ubuntu//etc/ppp/peers
chown root:dip /mount/ubuntu//etc/ppp/peers/provider
chown root:root /mount/ubuntu//etc/ppp/ipv6-up.d
chown root:root /mount/ubuntu//etc/ppp/resolv.conf
(...)
Звичайно, ви повинні подбати про те, щоб UID та GID були однаковими для обох систем, але для користувачів і груп, пов’язаних із системою, це не повинно бути проблемою.
Редагувати:
Крім того, власник налаштування зведе нанівець прапор SGID та SUID , що спричинить дивні проблеми (Наприклад, ви не зможете виконати судо, якщо дозвіл не буде 4755). Ви повинні встановити дозволи лише після встановлення власників. ЗБЕРЕГАЙТЕ повну інформацію про дозвіл файлу разом із інформацією про власника.
Rk:
Тепер я маю ці команди на кроні, що працює щодня (може бути тижнями), щоб зберегти цю інформацію. Це полегшить рішення наступного разу, але, звичайно, як це я маю зараз, воно більше ніколи не повториться. ;-) Щось на зразок цього:
0 12 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chmod %a %n" {} \; |/bin/bzip2 -c > /tmp/restore_chmod.$(/bin/date +%w).sh.bz2
0 13 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chown %U:%G %n" {} \; |/bin/bzip2 -c > /tmp/restore_chown.$(/bin/date +%w).sh.bz2
Правильна (комбінована) команда більше нагадує:
`/usr/bin/find / -exec /usr/bin/stat --format="[ ! -L {} ] && /bin/chmod %a %n" {} \; -exec /usr/bin/stat --format="/bin/chown -h %U:%G %n" {} \; |/bin/bzip2 -c > /tmp/restore_fileperms.$(/bin/date +%w).sh.bz2`
Зауважте, що може знадобитися додаткова обережність для обліку дужок у назви файлів (наприклад, під локалями), і що хаун може беззвучно відключити встановлені та жорсткі біти, встановлені chmod. В останньому випадку, який би порушив, скажімо, / bin / su та / usr / bin / sudo, можливо, вам знадобиться поміняти порядок вищевикладених пунктів вище.
Після відновлення судо або вибору режиму відновлення при завантаженні
Можна відновити цілу систему за допомогою debsums, які перевіряють цілісність та дозволи файлів.
зі сторінки чоловіка:
apt-get install --reinstall $(dpkg -S $(debsums -c) | cut -d : -f 1 | sort -u)
Перевстановлюйте пакети зі зміненими файлами
або обмежено певним шляхом, наприклад /usr
:
apt-get install --reinstall $(dpkg -S $(debsums -c | grep -e ^/usr ) | cut -d : -f 1 | sort -u)
або обмежено кількома наборами шляху, наприклад: /sbin /etc /var
apt-get install --reinstall $(dpkg -S $(debsums -c | grep -e ^/etc -e ^/sbin -e ^/var ) | cut -d : -f 1 | sort -u)
chmod a-x /bin/ping
і debsums -c
не повідомив би про цей файл.
Завжди дивіться, як ви біжите як судо.
Цей потік пояснює, що ви можете вручну повернути деякі дозволи назад, і сценарій там допомагає в цьому, але все-таки це велика робота. Швидше дотримуйтесь порад на протекторі, щоб зберегти встановлені пакети (маркування) та перевстановити ОС, а також застосувати розмічені збережені пакети, щоб повернути ваші програми.
Наскільки мені відомо, лише пакети System V та RPM пропонують команду відновити дозволи файлів. У System V (Solaris) це pkgchk, а RPM - rpm --setperms.
На жаль, не існує такої команди для пакетів Debian / Ubuntu - але я можу помилитися тут.
Але навіть за допомогою цих команд не тривіальне завдання повернути вашу систему до нормального стану, і, відремонтувавши її, ви зможете легко заподіяти нову шкоду вашій системі - якщо не будете обережні.
За винятком Йосипа, ви не перший, і ви не будете останнім, хто введе таку команду. Але сама ідея змінити дозволи файлів на 777 в системі Unix є яскравим свідченням того, що ви не дуже досвідчені з такою системою. Найкраще, що ви можете зробити в цій ситуації - це створити резервну копію того, що вам знадобиться знову (домашні каталоги, конфігураційні файли, поштові файли?) Та спробувати нову інсталяцію.
І ви повинні бути дуже, дуже обережними, коли ви відновите свої - пошкоджені - резервні файли.
Удачі!
PS: Мені просто цікаво, яку проблему ви хотіли вирішити?
Ви не можете скасувати chmod
операцію; принаймні, не в сенсі відкочування до попередньої настройки, до чого вимагає ця ситуація. Можливо, ви можете скасувати chmod
операцію, chmod
повернувши кожен файл і каталог до його початкового режиму, - але вони не однакові; визначення оригінальних режимів складне (як обговорюється в інших відповідях).