Я случайно побежал
sudo chmod 755 -R /
вместо
sudo chmod 755 -R ./
Я остановил его через несколько секунд, но теперь есть некоторые проблемы, такие как
sudo: must be setuid root
Как я могу вернуть разрешения обратно?
permissions
sudo
chmod
fl00r
источник
источник
sudo
значит, ты дважды подумал, что будешь делать!Upgrade from Ubuntu 11.04 to Ubuntu 11.04
. Примите эту опцию, и она эффективно переустановит Ubuntu для вас самым безболезненным способом./
в конце имени каталога, чтобы указать каталог в качестве цели. Это плохая привычка , не делай этого никогда ! Это.
само по себе допустимое имя каталога, нет необходимости добавлять/
к нему. Если бы все следовали этому правилу, то очень много опечатокsudo
не оказали бы влияния на корневой каталог, поэтому их системам не было бы причинено никакого вреда. Не делай этого!cd .
Например, ничего не делает.ls .
так же, какls
. Кроме того,..
это имя каталога, которое означает «родитель.
», и вы, вероятно, уже знали это./
в конце. Если вы хотите сделать расширение пути только для каталогов. Пример перечисления каталогов внутри текущего каталога:echo */
Ответы:
Короче говоря, вы не можете переустановить систему.
Я имею в виду, что разрешения Posix используются и на них сильно полагаются; в файловой системе есть множество мест, где неправильные разрешения могут нарушить работу ОС (флаги SUID) или, что еще хуже, сделать ее доступной для безопасности (
/etc/ssh/ssh_host_rsa_key
), пока она работает нормально.Следовательно, такое восстановление трудно сделать правильно. Пропусти одну вещь - и ты облажался. Вы уже испортили свою
sudo chmod
команду (если это ваша подруга, а не вы, она также может выучить урок Linux) - и это очень простая команда. Правильное восстановление потребовало бы большего количества команд и большей бдительности. Даже если вы используете чей-то сценарий.Так что поверь мне, просто переустанови. Это безопасная ставка и гарантированно избавит вас от неприятностей.
Напоследок несколько советов, актуальных здесь.
Первое: переустановка будет менее болезненной, если вы в следующий раз настроите
/home
отдельный раздел . На самом деле, они будут бризом.Второе: подумайте о том, чтобы заниматься сумасшедшей наукой о Linux на виртуальной машине, такой как VirtualBox, и делайте свои снимки
Третье:
chmod -R .
работает. Точка сама по себе.
является допустимым именем каталога. Нет необходимости добавлять этот слеш. Вы могли бы избежать катастрофического риска искусственно пропустить точку;просто
chmod: missing operand after ‘755’
против разрушенной системы.источник
sudo
означает, что вы должны проверить дважды.Я написал и уже несколько лет использую пару сценариев Ruby для
rsync
прав доступа и владения. Скриптget-filesystem-acl
собирает всю информацию путем рекурсивного обхода всех файлов и помещает все это в файл.acl
. Скрипт.acl-restore
будет читать.acl
и применять всеchown
иchmod
.Вы можете запустить
get-filesystem-acl
аналогичную установку Ubuntu, а затем скопировать.acl
файл в поврежденную папку chmod, поместить.acl
и.acl-restore
в /, и запустить.acl-restore
.Вам нужно иметь root, так что исправьте,
sudo
как предложил Marco Ceppi.Я могу сгенерировать и дать вам
.acl
файл для моего Ubuntu.get-filesystem-acl
.acl-restore
источник
owner_id
он не определенfind SOME_DIR -depth -printf 'chmod %m %p\n' > saved_permission
По длинне: можно. Вам нужно будет смонтировать файловую систему с Live CD и начать восстанавливать разрешения в соответствующих местах. Как минимум, чтобы вернуть sudo, вы захотите запустить его
sudo chmod u+s /usr/bin/sudo
во время сеанса LiveCD - это исправит корень должен быть setuid.Однако, скорее всего, будет проще просто переустановить систему.
источник
Я попытался бы переустановить все пакеты с
apt-get install --reinstall
, возможно, используя выходные данные,dpkg --get-selections | grep install
чтобы получить список их.источник
sudo apt-get autoremove
?autoremove
удаляет только те пакеты, которые вы не установили вручную.apt-mark auto $pkg
/apt-mark manual $pkg
которые позволяют вам изменять статус «установленный вручную / автоматически установленный» для каждого пакета.Хорошо, я не проверял это (так что используйте на свой страх и риск), но это все еще может работать. Я протестирую это на виртуальной машине, когда у меня будет возможность:
Во-первых, в все еще работающей системе я сделал следующее, чтобы получить все разрешения для файлов в списке, пропустив
/home/
каталог:При этом будут напечатаны права доступа и имя файла для каждого файла или каталога в системе, за которым следует
\0
символ (позже это потребуется для работы со странными именами файлов, такими как те, которые содержат символы новой строки).Затем в системе, где права доступа к файлам были скомпрометированы:
Это будет читать каждую строку
fileper.log
, сохраняя разрешения как$perm
и имя файла как,$file
а затем установит права доступа к файлу (или каталогу) на то, что было указано вfileper.log
Несколько вещей, чтобы отметить здесь:
/tmp/fileper.log
вы можете перечислять пользовательские настройки, процедуры и т. Д.Я бы предложил загрузить LiveCD с той версией Linux, которая у вас есть на вашем диске, выполнить команду, изменить путь к локальному диску и запустить вторую команду!
Я проверял, что при загрузке с Ubuntu CD / USB я могу не форматировать диск, то есть он заменит все в
/
каталоге, НО пропустить/home/
каталог. Это означает, что у ваших пользователей конфигурация приложений / данных (музыка, видео, документы) остается неизменной. И, заменяя системные файлы,chmod
устанавливается правильный номер.источник
chmod $(echo $LINE)
вместо простоchmod $LINE
? Кроме того , вы можете использовать толькоfind
безstat
:find … -printf "%#m %p\n"
. А еще лучше, вы можете создать всю команду:, аfind … -printf "chmod %#m %p\n"
затем выполнить файл как скрипт.michael@NEXUS-TWO:~$ sudo find / -name '*' -exec stat -c "%a %n" {} \; >> /tmp/fileper.log
но затем она перебирает/proc
и некоторые другие места, которые вы, возможно, не захотите в своем списке.(Я знаю, что не должен комментировать в ответе, но не достаточно репутации, чтобы комментировать.)
Ответ blade19899 работал для меня, за исключением символических ссылок. Например, он применил 755 к / bin / bash, но затем применил 777 к символической ссылке / bin / rbash, фактически 777-ing / bin / bash.
Поскольку у меня уже был файл fileper.log, я просто изменил команду destination-end:
источник
chmod
.... effectively 777-ing /bin/bash
- Нет; это не так, как это работает. Вы хотите сказать, что я могу заменить/usr/bin/apt
на свою собственную вещь, не являющуюся пользователем root , просто написав ей через символическую ссылку 777? :) Занимайтесь критическим мышлением; символические ссылки не могут и не работают таким образом. 777 разрешений для символических ссылок распространены и нормальны.Вы можете попробовать восстановить права доступа с помощью
apt-get
.Если вы не можете запустить эти команды с помощью sudo, вам может потребоваться загрузиться в режиме восстановления и запустить их как root.
Для загрузки в режиме восстановления см. Https://wiki.ubuntu.com/RecoveryMode .
От http://hyperlogos.org/page/Restoring-Permissions-Debian-System
Примечание: это было первоначально размещено на форумах Ubuntu, но я не могу найти оригинальный пост.
Попробуйте по порядку,
Если это не удается:
И, наконец, в крайнем случае,
Использование apt-get
Вот соответствующий фрагмент, отредактированный для исправления и переформатированный:
источник
У меня была такая же проблема, я могу это исправить. В моем случае Ubuntu 19.10
Откройте свой терминал и введите ниже простой код
откройте другой терминал и проверьте команду ниже.
источник