Что делать, если я случайно запустил команду "chmod -R" в системных каталогах (/, /etc, ...)

Я случайно побежал

sudo chmod 755 -R /

вместо

sudo chmod 755 -R ./

Я остановил его через несколько секунд, но теперь есть некоторые проблемы, такие как

sudo: must be setuid root

Как я могу вернуть разрешения обратно?

13 ответов

Решение

Короче говоря, вы не можете переустановить систему.

Я имею в виду, что разрешения Posix используются и на них сильно полагаются; в файловой системе есть множество мест, где неправильные разрешения могут нарушить работу ОС (флаги SUID) или, что еще хуже, сделать это уязвимым с точки зрения безопасности (/etc/ssh/ssh_host_rsa_key) пока он работает нормально.

Следовательно, такое восстановление трудно сделать правильно. Пропусти одну вещь - и ты облажался. Вы уже облажались sudo chmod команда (если это ваш друг, а не вы, она также может выучить урок Linux) - и это очень простая команда. Правильное восстановление потребовало бы большего количества команд и большей бдительности. Даже если вы используете сценарий какого-то парня.

Так что поверь мне, просто переустанови. Это безопасная ставка и гарантированно избавит вас от неприятностей.


Напоследок несколько советов, актуальных здесь.

Во-первых: переустановка будет менее болезненной, если вы настроите /home в следующий раз на отдельном разделе. На самом деле, они будут бризом.

Второе: подумайте о том, чтобы заняться сумасшедшей наукой о Linux на виртуальной машине, такой как VirtualBox, и сделайте свои снимки.

В третьих: chmod -R . работает. Нет необходимости добавлять этот слеш. Вы могли бы избежать катастрофического риска искусственно пропустить точку;
простой chmod: missing operand after ‘755’ VS разрушенная система.

Я написал и уже несколько лет использую пару сценариев Ruby для rsync разрешения и владение. скрипт get-filesystem-acl собирает всю информацию путем рекурсивного обхода всех файлов и помещает все это в файл .acl, скрипт .acl-restore буду читать .acl и применить все chownи chmod"S.

Вы можете запустить get-filesystem-acl на аналогичной установке Ubuntu, а затем скопируйте поверх .acl файл в ваш chmod-поврежденный ящик, положите .acl а также .acl-restore в / и запустить .acl-restore,

Вам нужно иметь root, так что исправьте sudo как предложил Марко Чеппи.

Я могу создать и дать вам .acl файл для моего Ubuntu.

get-filesystem-acl

#!/usr/bin/ruby

RM   = "/bin/rm"
SORT = "/usr/bin/sort"
TMP  = "/tmp/get_acl_#{Time.now.to_i}_#{rand * 899 + 100}"

require 'find'

IGNORE = [".git"]

def numeric2human(m)
  return sprintf("%c%c%c%c%c%c%c%c%c",
            (m & 0400 == 0 ? ?- : ?r),
            (m & 0200 == 0 ? ?- : ?w),
            (m & 0100 == 0 ? (m & 04000 == 0 ? ?- : ?S) :
                             (m & 04000 == 0 ? ?x : ?s)),
            (m & 0040 == 0 ? ?- : ?r),
            (m & 0020 == 0 ? ?- : ?w),
            (m & 0010 == 0 ? (m & 02000 == 0 ? ?- : ?S) :
                             (m & 02000 == 0 ? ?x : ?s)),
            (m & 0004 == 0 ? ?- : ?r),
            (m & 0002 == 0 ? ?- : ?w),
            (m & 0001 == 0 ? (m & 01000 == 0 ? ?- : ?T) :
                             (m & 01000 == 0 ? ?x : ?t)))
end


File.open(TMP, "w") do |acl_file|

  # TODO: Instead of the current dir, find the .git dir, which could be
  #       the same or outside of the current dir
  Find.find(".") do |path|

    next if IGNORE.collect {|ig| !!(path[2..-1] =~ /\A#{ig}/)}.include? true
    next if File.symlink?(path)

    stat = File.lstat(path)
    group_id = stat.gid
    rules    = "#{type}#{numeric2human(stat.mode)}" 

    acl_file.puts "#{path} #{rules} #{owner_id} #{group_id}"
  end
end

`#{SORT} #{TMP} > .acl`
`#{RM}   #{TMP}`

.acl-restore

#!/usr/bin/ruby

# This script will only work with .acl_ids

# Restore from...
FROM  = ".acl"

MKDIR = "/bin/mkdir"
CHMOD = "/bin/chmod"
CHOWN = "/bin/chown"
known_content_missing = false


def numeric2human(m)
  return sprintf("%c%c%c%c%c%c%c%c%c",
            (m & 0400 == 0 ? ?- : ?r),
            (m & 0200 == 0 ? ?- : ?w),
            (m & 0100 == 0 ? (m & 04000 == 0 ? ?- : ?S) :
                             (m & 04000 == 0 ? ?x : ?s)),
            (m & 0040 == 0 ? ?- : ?r),
            (m & 0020 == 0 ? ?- : ?w),
            (m & 0010 == 0 ? (m & 02000 == 0 ? ?- : ?S) :
                             (m & 02000 == 0 ? ?x : ?s)),
            (m & 0004 == 0 ? ?- : ?r),
            (m & 0002 == 0 ? ?- : ?w),
            (m & 0001 == 0 ? (m & 01000 == 0 ? ?- : ?T) :
                             (m & 01000 == 0 ? ?x : ?t)))
end

def human2chmod(mode)
  raise unless mode =~ /([r-][w-][xtsTS-])([r-][w-][xtsTS-])([r-][w-][xtsTS-])/
  triple = [$1, $2, $3]
  u,g,o = triple.collect do |i|
    i.sub('s', 'sx').sub('t', 'tx').downcase.gsub('-', '')
  end

  return "u=#{u},g=#{g},o=#{o}" 
end



File.open(FROM).each do |acl|
  raise unless acl =~ /\A(([^ ]*? )+)([^ ]+) ([^ ]+) ([^ ]+)\Z/
  path, rules, owner_id, group_id = $1, $3, $4, $5
  path = path.strip
  owner_id = owner_id.to_i
  group_id = group_id.to_i

  if !File.exists?(path) and !File.symlink?(path)
    if rules =~ /\Ad/
      STDERR.puts "Restoring a missing directory: #{path}"
      STDERR.puts "Probably it was an empty directory. Git goes not track them."
      `#{MKDIR} -p '#{path}'` # Creating the any parents
    else
      known_content_missing = true
      STDERR.puts "ERROR: ACL is listed but the file is missing: #{path}"
      next
    end
  end

  s = File.lstat(path)
  t = s.ftype[0..0].sub('f', '-') # Single character for the file type
                                  # But a "-" istead of "f"

  # Actual, but not neccesarely Desired 
  actual_rules    = "#{t}#{numeric2human(s.mode)}"
  actual_owner_id = s.uid 
  actual_group_id = s.gid 

  unless [actual_rules, actual_owner_id, actual_group_id] ==
    [rules, owner_id, group_id]

    chmod_argument = human2chmod(rules)

    # Debug
    #p chmod_argument
    #p s.mode

    ## Verbose
    puts path
    puts "Wrong: #{[actual_rules, actual_owner_id, actual_group_id].inspect}"
    puts "Fixed: #{[rules, owner_id, group_id].inspect}"
    `#{CHMOD} #{chmod_argument} '#{path}'`

    #puts
  end

end

if known_content_missing
  STDERR.puts "-" * 80 
  STDERR.puts "Some files that are listed in #{FROM.inspect} are missing in " +
              "the current directory."
  STDERR.puts
  STDERR.puts "Is #{FROM.inspect} outdated?"
  STDERR.puts "(Try retrograding the current directory to an earlier version)"
  STDERR.puts
  STDERR.puts "Or is the current directory incomplete?"
  STDERR.puts "(Try to recover the current directory)"
  STDERR.puts "-" * 80 
end

По длинне: можно. Вам нужно будет смонтировать файловую систему с Live CD и начать восстанавливать разрешения в соответствующих местах. Как минимум, чтобы вернуть sudo, вы захотите запустить sudo chmod u+s /usr/bin/sudo в то время как в сеансе LiveCD - это исправит необходимость в корне setuid.

Однако, скорее всего, будет проще просто переустановить систему.

Как предотвратить несчастные случаи в будущем

Все ответы здесь сосредоточены (как и ожидалось) на восстановлении системы до рабочего состояния. Но ни один ответ не фокусируется на том, как лучше предотвратить подобную аварию в будущем.

Чтобы полностью предотвратить подобные аварии в будущем, добавьте в свой (или ) файл следующее:

      # set Safetynets
alias sudo='sudo '    # This allows sudo to run aliases
alias chmod='chmod --preserve-root'
alias chown='chown --preserve-root'
alias chgrp='chgrp --preserve-root'

Кроме того, убедитесь, что такое же содержимое находится внутри (или~/.bash_aliases) файл пользователя (иначе это не имеет значения!).

Таким образом, вы НЕ МОЖЕТЕ использовать эти команды (даже еслиroot) рекурсивно в корневой файловой системе.

Добавление этого к

Добавьте следующую строку к своей:

      echo "alias sudo='sudo '    # This allows sudo to run aliases" >> ~/.bashrc

Простой способ добавить линии к корням~/.bashrcзаключается в использовании "heredoc". Сначала переключитесь на пользователя root:

      sudo -s

Затем запустите следующий текстовый блок:

      cat << EOT >> ~/.bashrc

# set Safetynets
alias sudo='sudo '    # This allows sudo to run aliases
alias chmod='chmod --preserve-root'
alias chown='chown --preserve-root'
alias chgrp='chgrp --preserve-root'
EOT

Я бы попробовал переустановить все пакеты с apt-get install --reinstallвозможно используя вывод dpkg --get-selections | grep install чтобы получить их список.

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

Во-первых, в все еще работающей системе я сделал следующее, чтобы получить все разрешения для файлов в списке, пропуская /home/ каталог:

sudo find / -not -path /home -printf "%m:%p\0" > /tmp/fileper.log

Это напечатает разрешения и имя файла для каждого файла или каталога в системе, а затем \0 символ (это необходимо позже, чтобы иметь дело со странными именами файлов, такими как те, которые содержат переводы строк).

Затем в системе, где права доступа к файлам были скомпрометированы:

while IFS=: read -r -d '' perm file; do  
    chmod "$perm" "$file"
done < /tmp/fileper.log 

Это будет читать каждую строку fileper.log, сохраняя разрешения как$perm и имя файла как $file и затем установит права доступа к файлу (или каталогу) на то, что было указано в fileper.log


Несколько вещей, чтобы отметить здесь:

  • При выводе в файл: /tmp/fileper.log, вы можете перечислить пользовательские настройки, и процедуры, и т. д.
  • вы не сможете загружаться или запускать команды,

Я хотел бы предложить загрузить LiveCD с той версией Linux, которая у вас есть на вашем диске, выполнить команду, изменить путь к локальному диску и запустить вторую команду!


Я проверил, что при загрузке с Ubuntu CD/USB я могу выбрать не форматировать диск, то есть он заменит все в / каталог, НО пропустить /home/ каталог. Это означает, что у ваших пользователей конфигурация приложений / данных (музыка, видео, документы) остается неизменной. И заменив системные файлы, chmod там установлен правильный номер.

Вы можете попробовать восстановить права доступа с помощью apt-get,

Если вы не можете запустить эти команды с помощью sudo, вам может потребоваться загрузиться в режиме восстановления и запустить их как root.

Для загрузки в режиме восстановления см. https://wiki.ubuntu.com/RecoveryMode.

От http://hyperlogos.org/page/Restoring-Permissions-Debian-System

Примечание: это было первоначально размещено на форумах Ubuntu, но я не могу найти оригинальный пост.

Попробуйте по порядку,

sudo apt-get --reinstall install `dpkg --get-selections | grep install | grep -v deinstall | cut -f1`

Если это не удается:

sudo apt-get --reinstall install `dpkg --get-selections | grep install | grep -v deinstall | cut -f1 | egrep -v '(package1|package2)'`

И, наконец, в крайнем случае,

sudo dpkg --get-selections | grep install | grep -v deinstall | cut -f1 | xargs apt-get --reinstall -y --force-yes install

Использование apt-get

Вот соответствующий фрагмент, отредактированный для исправления и переформатированный:

sudo apt-get --reinstall install `dpkg --get-selections | grep install | grep -v deinstall | cut -f1`

Допустим, вы получаете сообщения о некоторых пакетах, которые не могут быть переустановлены, и команда не выполняется. Вот один из способов исправить это, пропустив соответствующие пакеты:

sudo apt-get --reinstall install `dpkg --get-selections | grep install | grep -v deinstall | cut -f1 | egrep -v '(package1|package2)'`

И, наконец, если вам нужно как-то установить так много вещей, что приведенная выше команда завершится неудачно, сказав, что ваш список аргументов слишком длинный, вот исправление, которое будет запускать apt-get гораздо больше раз, чем вам хотелось бы:

sudo dpkg --get-selections | grep install | grep -v deinstall | cut -f1 | xargs apt-get --reinstall -y --force-yes install

Обратите внимание -y а также --force-yes варианты, которые остановят apt-get от побуждения вас снова и снова. Это всегда забавные варианты, если вы уверены, что знаете, что делаете.

(Я знаю, что не должен комментировать в ответе, но не достаточно репутации, чтобы комментировать.)

Ответ blade19899 работал для меня, за исключением символических ссылок. Например, он применил 755 к / bin / bash, но затем применил 777 к символической ссылке / bin / rbash, фактически 777-ing /bin/bash.

Поскольку у меня уже был файл fileper.log, я просто изменил команду destination-end:

while IFS=: read -r -d '' perm file; do  
    if [[ ! -L "$file" ]]; then    
        chmod "$perm" "$file"
    fi
done < /tmp/fileper.log 

Есть закрытый вопрос (с отличным ответом) как дубликат этого из:

Таким образом, я отдаю terdon, но вот мой собственный ответ, основанный на его.

При разработке нового скрипта переменная $TMP_DIRECTORY/ имел неожиданный результат /. Затем последовали chmod 700 а также chown -R $UDO_USER указывает на $TMP_DIRECTORY что было действительно /.

Система медленно ломалась и горела. После этого он не перезагружался. Все кричат: "ВЫ ДОЛЖНЫ ПЕРЕУСТАНОВИТЬ", но это означает потерю многих лет работы. Этот сценарий представляет собой вариант ответа Тердона:

#!/bin/bash

if [[ $(id -u) != 0 ]]; then # root powers needed to call this script
    echo >&2 "$0 must be called with sudo powers"
    exit 1
fi

# Parameters blank?
[[ $1 == "" ]] && echo "Parm 1 must be source directory" && exit 1
[[ $2 == "" ]] && echo "Parm 2 must be target directory" && exit 1

# Parameters valid directories?
[[ ! -d "$1" ]] && echo "Parm 1 must be a directory" && exit 1
[[ ! -d "$2" ]] && echo "Parm 2 must be a directory" && exit 1
# [[ ! "$2" == "/mnt/"* ]] && echo "Parm 2 must start with /mnt/..." && exit 1

# shopt -s globstar     # From original
shopt -s dotglob
liveSystem="$1"
deadSystem="$2"

# Parameters must end in same subdirectory
[[ "${liveSystem##*/}" != "${deadSystem##*/}" ]] && \
    echo "subdirectory ${liveSystem##*/} not same as ${deadSystem##*/}" && \
    exit 1

cd "$deadsystem"
Count=0
NoRef=0
one() {
    path="$1"
    MountlessPath="${path##*$deadSystem/}"
    if [ -e "$liveSystem/$MountlessPath" ] ; then
        echo chown --reference "$liveSystem/$MountlessPath" "$path"
        echo chmod --reference "$liveSystem/$MountlessPath" "$path"
        (( Count++ ))
    else
        echo "No reference for: $path"
        (( NoRef++ ))
    fi
}

# From: https://stackoverflow.com/questions/51654041/loop-through-all-files-in-a-directory-and-subdirectories-using-bash
# Note typo "If" instead of "if" in above link
recurse() {
  path="$1"
  if [ -d "$path" ] ; then
#     echo "Path: $path"
     one "$path"            # Enhancement: chown of directories too
     for i in "$path/"* # "$path/."* # Enhancement: do hidden directories
     do
        # Skip over .. which gives endless loop
        [[ "$path" == *".cache/speech-dispatcher"* ]] && continue
        [[ "$path" == *"/usr/bin/X11"* ]] && continue
        BaseName=${path##*/}
        [[ "${#BaseName}" -gt 300 ]] && continue
#        [[ ${#BaseName[@]} -gt 1 ]] && continue
#        echo BaseName: $BaseName
#        [[ $BaseName == ".." || $BaseName == "*" ]] && continue
        recurse "$i"
     done
# Original code selected only files but we want links too
#  elif [ -f "$path" ] ; then
  else
    [ ! -f "$path" ] && printf "Not a file -> "
    one "$path"
  fi
}

recurse "$deadSystem"

echo "========================================================================"
echo "$Count references found for chown command to process"
echo "$NoRef files, directories and links, etc. could not be processed"
# From: https://unix.stackexchange.com/questions/193368/can-scp-create-a-directory-if-it-doesnt-exist/193372?noredirect=1#comment1111576_193372
# Original didn't have much luck?
#for file in **/*; do 
#    [ -e "$liveSystem/$file" ] &&
#        echo sudo chown --reference "$liveSystem/$file" "$file"
#done

При запуске скрипта с $ sudo reset-owner /mnt/old/var /var | grep "No reference" хвостовой конец говорит это:

Not a file -> No reference for: /var/tmp/systemd-private-fdbc599820b645f4a461404675af3b5d-rtkit-daemon.service-jvV8tG/tmp/*
No reference for: /var/tmp/systemd-private-fdbc599820b645f4a461404675af3b5d-systemd-timesyncd.service-vmgqTh
No reference for: /var/tmp/systemd-private-fdbc599820b645f4a461404675af3b5d-systemd-timesyncd.service-vmgqTh/tmp
Not a file -> No reference for: /var/tmp/systemd-private-fdbc599820b645f4a461404675af3b5d-systemd-timesyncd.service-vmgqTh/tmp/*
No reference for: /var/tmp/uefi.dat
No reference for: /var/tmp/uefi.dsl
========================================================================
12369 references found for chown command to process
7676 files, directories and links, etc. could not be processed

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

$ sudo reset-owner /mnt/old/var /var | grep "No reference" | grep -v /var/tmp/ | grep -v /var/spool/ | grep -v '\/\*' | grep -v /var/run | grep -v /unattended | grep -v /upstart | grep -v /log/journal | grep -v /log/pm | grep -v /log/cron | grep -v /log/dpkg | grep -v /log/apt | grep -v /log/altern | grep -v /lib/u | grep -v /lib/systemd | grep -v /lib/snapd | grep -v /lib/shim | grep -v /lib/NetworkManager | grep -v /lib/lightdm | grep -v /lib/initram | grep -v /lib/dpkg | grep -v /lib/doc-base | grep -v /var/lib/dkms | grep -v /lib/blue | grep -v /lib/binfmts | grep -v /lib/apt | grep -v /lib/app-info | grep -v /lib/Accounts | grep -v /var/crash | grep -v /var/cache
No reference for: /var
No reference for: /var/lib/flashplugin-installer
No reference for: /var/lib/gems
No reference for: /var/lib/gems/2.3.0
No reference for: /var/lib/git
No reference for: /var/lib/tlp/rfkill-saved

Многие из ответов являются проблемными, потому что они требуют sudo, но sudo сломано. Вы не можете использовать sudo чинить sudo, Другие ответы требуют перезагрузки компьютера с использованием Live CD или режима восстановления, что неудобно.

Другой вариант заключается в использовании pkexec добраться до оболочки с правами root.

  1. Бежать pkexec bash в терминале получить оболочку с правами root.

  2. Установите бит setuid:

    chmod u+s /usr/bin/sudo
    
  3. sudo теперь должны быть доступны для любых дальнейших ремонтов, которые могут потребоваться.

Для пакетов самый простой, быстрый и стабильный вариант, который я знаю, — это команда Aptitude ниже.

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

Три шага

Шаг 1

Используя Терминал/Консоль, подключитесь к соответствующей учетной записи пользователя Linux. Это важно, потому что на шагах 2 и 3 ниже все команды будут выполняться от имени этого пользователя.

Шаг 2

Если это еще не сделано, с помощью терминала выполните эту команду, чтобы установить Sudo.

      apt install sudo

Примечание. Для тех, кто не знаком с Sudo, разрешите пользователям Linux ограниченные привилегии суперпользователя.

Если это еще не сделано, с помощью терминала выполните эту команду, чтобы установить Aptitude.

      sudo apt install aptitude

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

Шаг 3

Выберите один из четырех вариантов ниже. Что сбросит права доступа к пакету по умолчанию. И сохраните конфигурацию пакета(ов):

Вариант 1: ОДИН пакет. БЕЗ бэкпорта.

  • Формат: sudo aptitude reinstall <PACKAGE NAME>

  • Пример: sudo aptitude reinstall jami

Вариант 2: ВСЕ пакеты. БЕЗ бэкпорта.

  • Пример: sudo aptitude reinstall '~i'

Примечание

  • Эта опция выше переустановит ВСЕ уже установленные пакеты и сбросит их разрешения по умолчанию. Включая вашу операционную систему (ОС). Перед выполнением этой команды предлагается выполнить соответствующие действия. Например, но не ограничиваясь этим, создайте резервную копию, убедитесь, что у вас достаточно доступного хранилища локали. Время, необходимое для этой команды, аналогично установке новой ОС.

Вариант 3: ОДИН пакет. С Бэкпортом.

  • Формат: sudo aptitude -t <CODE NAME DEBIAN>-backports reinstall <PACKAGE NAME>

  • Пример: sudo aptitude -t buster-backports reinstall jami

Примечание

  • Этот вариант выше предназначен для Debian 10 Buster. Если вы используете Ubuntu, вам нужно будет адаптировать эту команду. Связанная документация на

Вариант 4: ВСЕ пакеты. С Бэкпортом.

  • Формат: sudo aptitude -t <CODE NAME DEBIAN>-backports reinstall '~i'

  • Пример: sudo aptitude -t buster-backports reinstall '~i'

Примечание

  • Этот вариант выше предназначен для Debian 10 Buster. Если вы используете Ubuntu, вам нужно будет адаптировать эту команду. Связанная документация на https://help.ubuntu.com/community/UbuntuBackportshttps://help.ubuntu.com/community/UbuntuBackports Примечание .

  • Эта опция выше переустановит ВСЕ уже установленные пакеты и сбросит их разрешения по умолчанию. Включая вашу операционную систему (ОС). Перед выполнением этой команды предлагается выполнить соответствующие действия. Например, но не ограничиваясь этим, создайте резервную копию, убедитесь, что у вас достаточно доступного хранилища локали. Время, необходимое для этой команды, аналогично установке новой ОС.

Примечания ко всем четырем вариантам выше

  • В зависимости от пакета в большинстве случаев приведенные выше команды будут сбрасывать разрешения только для папок и файлов пакета. Другие файлы, такие как файл(ы) конфигурации, не могут быть затронуты. Другими словами, файл конфигурации останется неизменным. При необходимости и при необходимости вы можете вручную сбросить разрешения только для файла (файлов) конфигурации. Часто эти файлы конфигурации хранятся в другом месте. Например, но не ограничиваясь этим, куда-нибудь в домашнюю папку пользователя. Если вы не уверены, найдите документацию по каждому пакету.

Атрибуция

Спасибо этой вики Debian за указанные выше параметры на странице https://wiki.debian.org/Permissions/ResetPackagePermissions.

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

Я вышел из-под root и не мог запускать команды с root-правами, и я работал над Debian 10.

1-Запустите или перезагрузите компьютер и нажмите ESC(на некоторых машинах нажмите и удерживайте клавишу Shift), чтобы отобразить меню загрузки Grub.

2-Выберите « Дополнительные параметры для... » в меню и загрузите запись ядра с помощью (режим восстановления)

3-Это дает вам корневую оболочку, если у вас есть пароль root, поэтому вы можете запускать эти команды

chmod -R 755 /bin /boot /dev /etc/ /home /lib /lib64/media /mnt /opt /run /sbin /srv /usr /var

chmod -R 777 /initrd.img /vmlinuz

chmod -R 1777 /tmp

chmod -R 555 /sys

chmod -R 555 /proc

chmod -R 700 /корень

4-Если вы получаете сообщение об ошибке, когда хотите войти в систему как пользователь root, вы можете запустить chmod +s /bin/su и проверить результат с помощью ls -lt /bin/su
результат должен быть таким - rwsr -sr- х вместо - rwxr-sr-x

Я надеюсь, что это помогает.

Я сделал то же самое. Короче говоря. Я не переустанавливал свою систему . Когда я заметил, что он работает не со всеми файлами в текущем каталоге, я сразу же отменил свою команду. Потом я увидел , что НЕ МОГУ БЕЖАТЬ !

Всякий раз, когда я пытаюсь запустить, я получаю сообщение об ошибке ниже.

      sudo: /etc/sudoers is world writable 
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin

Когда я погуглил, я нашел https://www.thegeekdiary.com/sudo-etc-sudoers-is-world-writable-how-to-correct-the-permissions-of-sudoers-file/

в основном, он говорит выполнять как root . Как я могу быть root, если я не могу печатать?

Для этого я перехожу в режим восстановления в Ubuntu, например /questions/377822/kak-mne-zagruzitsya-v-kornevuyu-obolochku/377823#377823 . Оттуда я вхожу в систему как root, затем выполняю chmod 440 /etc/sudoersТогда я могу выполнить . Когда я выполняю команду с sudoЯ получаю еще одно предупреждение о том, что sudo: /etc/sudoers.d is world writableя казнил chmod 440 /etc/sudoers.dисправить это.

После этого я вижу много странных вещей, например, я не могу использовать SSH на своей машине. Я удалил программу «OpenSSHD», а затем переустановил ее. Когда я удаляю и переустанавливаю, я вижу много предупреждений

      WARN: /etc/default/ufw is group writable!
WARN: /etc/default is group writable!
WARN: /etc is group writable!
WARN: / is group writable!
WARN: /lib/ufw/user.rules is group writable!
WARN: /lib/ufw is group writable!
WARN: /lib is group writable!
WARN: /etc/ufw/applications.d is group writable!
WARN: /etc/ufw is group writable!
WARN: /etc/ufw/after6.rules is group writable!
WARN: /lib/ufw/ufw-init is group writable!
WARN: /etc/ufw/ufw.conf is group writable!
WARN: /lib/ufw/user6.rules is group writable!
WARN: /etc/ufw/before6.rules is group writable!
WARN: /etc/ufw/after.rules is group writable!
WARN: /etc/ufw/before.rules is group writable!
WARN: /usr/sbin/ufw is group writable!
WARN: /usr/sbin is group writable!
WARN: /usr is group writable!

Затем я последовал предложениям Как исправить предупреждения о разрешениях в корневой папке?

Затем я все еще вижу, что имя моего сервера изменено. Поэтому установите имя в «/etc/hosts». Тогда я все еще не могу подключиться по SSH к данному имени моего сервера. Затем мы изменили IP-адрес обратно на предыдущий. Я не знаю, как изменился IP-адрес.

Другие вопросы по тегам