Я изменил/etc/sudoers, и теперь я не могу работать как sudo

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

/tmp очищен во время начальной загрузки в некоторых системах (иногда, это находится даже в RAM, например, по умолчанию на Солярисе, и на некоторых установках Linux), таким образом, это не может использоваться для файлов, которые должны пережить сбой питания или перезагрузку. /var/tmp может использоваться для файлов, которые должны пережить перезагрузку, но это может время от времени чиститься системным администратором. Если Ваше приложение должно сохранить файлы на постоянной основе, запишите им где-нибудь в корневом каталоге пользователя (в ~/.programmingnoobsapp или ~/.cache/programmingnoobsapp) или под /var/lib/programmingnoobsapp или /var/cache/programmingnoobsapp.

Отметьте это /tmp совместно используется всеми пользователями, таким образом, необходимо принять меры предосторожности при создании файла там. Необходимо выбрать имя файла, которое еще не существует, и необходимо бояться позволять состояние состязания, где другой процесс создает файл перед Вами с различными полномочиями, которые могли быть дырой в системе безопасности (если другой процесс работает как другой пользователь, это могло бы затем получить доступ и изменить данные Вашего процесса). Используйте mktemp команда для создания файла в /tmp или /var/tmp. По умолчанию, mktemp создает файл в $TMPDIR, или /tmp если TMPDIR сброшен, который обычно является правильным местом. Если необходимо использовать несколько временных файлов, или даже если Вам нужен единственный, я рекомендую создать каталог для всех Ваших временных файлов с mktemp -d и удаление его в конце Вашего сценария.

#!/bin/sh
tmp_root=
trap 'rm -rf "$tmp_root"' EXIT INT TERM HUP
tmp_root=$(mktemp -d)
tmpfile1=$tmp_root/file1
tmpfile2=$tmp_root/file2
…

5
23.05.2017, 15:40
1 ответ

Самое простое исправление - это загрузка с Live CD, затем монтирование локального диска и редактирование или возврат к старому файлу sudoers.

  1. Загрузка с живого CD

  2. Найдите свой раздел /. Откройте терминал и запустите lsblk или sudo fdisk -l или blkid и определите ваш корневой (/) раздел. Для данного примера, я буду считать, что это /dev/sda1.

  3. Разместите ваш корневой раздел во временное место

    sudo mkdir /foo.
    sudo mount /dev/sda /foo
    
  4. Теперь, когда раздел смонтирован, проверьте каталог /foo/etc. Вероятно, у вас есть файл с именем /etc/sudoers~, который является резервной копией файла sudoers. Если да, то это, вероятно, решит все проблемы:

    sudo cp /foo/etc/sudoers~ /foo/etc/sudoers
    

    Если это не сработает, просто отредактируйте файл и верните изменения как можно лучше (или добавьте его в свой вопрос, и мы поможем вам с ним справиться). Если вы ввели строки с синтаксической ошибкой, удалите их или прокомментируйте, добавив # в начале. Если вы удалили строку, которая дала вам sudo полномочия, вероятно, это было так (где sudo - это группа, в которой находится ваш пользователь, т.е. ваше имя пользователя упоминается в строке в /etc/group, которая начинается с sudo:)

    %sudo ALL=(ALL:ALL) ALL
    
  5. Вытащите компакт-диск и перезагрузитесь.

12
27.01.2020, 20:33

Теги

Похожие вопросы