Файл Sudoers испорчен

Этот сценарий подойдет, по крайней мере, для большинства типичных сценариев. Для этого требуются blkid , lsscsi и sed :

#!/bin/bash
mkdir -p /dev/disk/by-{path,uuid}
for dev in `blkid -o device | grep -v block`; do
  ln -s "$dev" "/dev/disk/by-uuid/$(blkid -o value -s UUID "$dev")"
done

lsscsi -v | sed 'N;s/\n//' |\
  sed 's/.*\(\/dev\/\w\+\).*\(pci\)[0-9]\{4\}[^/]\+\/[^/]\+\/\([0-9:.]\+\)[^ ]*\/\([0-9:]\+\)[]].*/\1 \2-\3-scsi-\4/' |\
  sed 's/.*\(\/dev\/\w\+\).*\(pci\)[^/]*\/\([0-9:.]\+\)\/ata[^ ]*\/\([0-9:]\+\)[]].*/\1 \2-\3-ata-\4/' |\
  while read dev pci; do
    pp="/dev/disk/by-path/$pci"
    ln -s "$dev" "$pp"
    for part in "${dev}"[0-9]*; do
      [ -e "$part" ] && ln -s "$part $pp-part${part/$dev/}"
    done
  done
3
29.09.2016, 22:05
1 ответ

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

Существуют методы в зависимости от дистрибутива, но если у вас уже установлен и работает Docker, то, как правило, вы можете устранить проблему через контейнер Docker. Это связано с тем, что обычно служба Docker работает от имени root, и все, что делается с примонтированным томом внутри контейнера, затрагивает права root на хосте.

На хосте:

docker run --rm -ti -v /etc:/usr/local/etc busybox sh

"busybox" - это просто хороший маленький дистрибутив, загрузка которого не займет много времени. Если у вас уже есть образ Docker, в котором есть оболочка, просто используйте его.

На Docker-контейнере:

cd /usr/local/etc
vi sudoers

Возможно, вы добавили плохой файл в каталог /etc/sudoers.d/. В этом случае, вероятно, просто удалите этот файл.

Когда вы выйдете из контейнера, вы сможете sudo снова.

Ух ты!

1
27.01.2020, 21:09

Теги

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