Как я мог достигнуть корня после переключения от удара до zsh?

Перезапуск atd сервис не сбрасывал идентификатор задания, как мы подозревали:

Пример

некоторые тестовые представления

$ at -f test.bash now
job 105 at Mon Sep 23 20:04:00 2013
$ at -f test.bash now
job 106 at Mon Sep 23 20:04:00 2013

проверение дважды dir шпульки

$ sudo ls -l /var/spool/at/spool/
total 0

перезапуск фактического времени отправления

$ sudo/etc/init.d/atd фактическое время отправления Остановки перезапуска: [хорошо] Стартовое фактическое время отправления: [хорошо]

последующие тестовые представления

$ at -f test.bash now
job 107 at Mon Sep 23 20:05:00 2013
$ at -f test.bash now
job 108 at Mon Sep 23 20:05:00 2013

Рытье глубже

Таким образом, если Вы смотрите на исполняемый файл atd с инструментом такой как lsof Вы заметите следующее:

$ sudo lsof | grep atd
atd       22341      root  cwd       DIR              253,0      4096    2103653 /var/spool/at
atd       22341      root  rtd       DIR              253,0      4096          2 /
atd       22341      root  txt       REG              253,0     24712    1192814 /usr/sbin/atd
atd       22341      root  mem       REG              253,0     57440     393478 /lib64/libnss_files-2.13.so
atd       22341      root  mem       REG              253,0    387352     393694 /lib64/libfreebl3.so
atd       22341      root  mem       REG              253,0     43304     393695 /lib64/libcrypt-2.13.so
atd       22341      root  mem       REG              253,0     99128     393328 /lib64/libaudit.so.1.0.0
atd       22341      root  mem       REG              253,0     22536     393671 /lib64/libdl-2.13.so
atd       22341      root  mem       REG              253,0   1956608     393664 /lib64/libc-2.13.so
atd       22341      root  mem       REG              253,0     13776     393333 /lib64/libpam_misc.so.0.82.0
atd       22341      root  mem       REG              253,0     55280     393331 /lib64/libpam.so.0.82.2
atd       22341      root  mem       REG              253,0    124592     393682 /lib64/libselinux.so.1
atd       22341      root  mem       REG              253,0    151456     393578 /lib64/ld-2.13.so
atd       22341      root    0u      CHR                1,3       0t0       4066 /dev/null
atd       22341      root    1u      CHR                1,3       0t0       4066 /dev/null
atd       22341      root    2u      CHR                1,3       0t0       4066 /dev/null
atd       22341      root    3uW     REG              253,0         6    1966556 /var/run/atd.pid

Исследование dir шпульки.

Таким образом, нет никакого открытого файла, но существует каталог, /var/spool/at, поэтому давайте займемся расследованиями немного далее там:

$ sudo ls -la /var/spool/at/
total 20
drwx------.  3 daemon daemon 4096 Sep 23 20:42 .
drwxr-xr-x. 15 root   root   4096 Aug  8  2011 ..
-rw-------.  1 daemon daemon    6 Sep 23 20:05 .SEQ
drwx------.  2 daemon daemon 4096 Sep 23 20:42 spool

Бинго! Существует вещь, которую мы ищем, названный файл .SEQ. Больше файл показывает это:

$ sudo more .SEQ 
0006c

Мы можем убедить нас в том, что это - правильное использование значения bc преобразовать это от шестнадцатеричного числа к десятичному числу:

$ echo "ibase=16; 0006C"|bc
108

Эксперимент

Кажется, помещает число здесь в шестнадцатеричное число. Мы можем сделать немного эксперимента и изменить это значение на 0. Но сначала остановитесь atd сервис.

$ sudo /etc/init.d/atd stop
...edit file using vim, change it to 0...
$ sudo /etc/init.d/atd start

Теперь запустите другой тест at:

$ at -f test.bash now
job 1 at Mon Sep 23 20:52:00 2013

И число перезапустило, мы вернулись к 1. Если я останавливаю, редактирую, запустите его снова и поместите значение 0006c въезжайте задним ходом:

$ at -f test.bash now
job 109 at Mon Sep 23 20:53:00 2013

Тайна решена.

Примечание по другим дистрибутивам

Вышеупомянутое было выслежено в системе Fedora, другие дистрибутивы, такие как Debian & Ubuntu могут сохранить .SEQ файл в совершенно другом каталоге. Например, Ubuntu хранит файл как это:

$ sudo pwd
/var/spool/cron/atjobs
$ sudo ls -la
total 12
drwxrwx--T 2 daemon daemon 4096 Sep 23 21:19 .
drwxr-xr-x 5 root   root   4096 Oct 17  2012 ..
-rw------- 1 daemon daemon    6 Sep 23 21:19 .SEQ
3
05.01.2015, 02:23
3 ответа

Попробуйте: CD / USR / BIN; су . Так как вы не дали абсолютный путь к ZSH. SU проверяет PWD . Смена в каталог ZSH существует в работе на некоторых системах. Пример:

% su
Password:
su: zsh: No such file or directory
% cd /usr/local/bin
% su
Password:
# print $OSTYPE
freebsd10.0
#
9
27.01.2020, 21:07

В

if [ $x -eq 0 ]

x пуст, так как строка

x= divisible_by "$divider"

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

divisible_by "$divider"
x=$?

И вы всегда должны цитировать ваши переменные.

-121--252922-

Что делать? Что я сделал не так?

Вы создали невыгружаемый изо. Для установки базовой системы необходимо прочитать файл РИДМИ , в котором указано:

Boot from base1.img и следовать инструкциям на экране.

Это означает, что необходимо добавить контроллер дискеты к виртуальной машине и использовать файл с именем base1.img (фактически « Base 01 (2 .1a) .img ») в качестве виртуального носителя вместо создания iso.

Если честно, это может быть не конец ваших проблем, как, используя те же файлы и VirtureBox, я никогда не пошел дальше, чем паника во время загрузки:

PANIC: HD CONTROLLER: COMMAND ABORTED

или прекращение с этим сообщением:

Incorrect UNIX System "Base System Package" Floppy Disk 1

This disk is not appropriate for
machines exclusively equipped with SCSI peripherals.
-121--89322-

Ваша запись в /etc/passwd является

 root: x: 0:0: root:

Это недопустимая запись: оболочка должна быть полным путем к исполняемому файлу, программа входа не выполняет поиск $ PATH.

Вы не сможете войти в корневую учетную запись обычным способом. Можно использовать sudo для вызова команды, например sudo vipw , если ваша учетная запись имеет разрешения sudo. Это единственный распространенный метод обхода настройки оболочки входа в целевой учетной записи.

Если вы не судоер, вы, вероятно, заблокировали себя от корневой учетной записи. Для восстановления системы потребуется доступ консоли. Загрузитесь в однопользовательском режиме (см. Как выполнить команду в качестве системного администратора (root) ) и отредактируйте /etc/passwd , чтобы он содержал

root:x:0:0:root:/root:/bin/zsh

(с правильным путем для zsh в вашей системе).

Некоторые администраторы настраивают учетную запись с UID 0, но другую оболочку (как правило, статически связанный двоичный файл, такой как sash , чтобы разрешить root входить в систему даже в случае неправильной конфигурации, такой как эта (наиболее распространенной неправильной конфигурацией является разорванная общая библиотека в обычной оболочке).

Чтобы избежать подобных проблем в будущем, используйте команду chsh для изменения оболочки пользователя, а не для непосредственного редактирования /etc/passwd . Если необходимо отредактировать /etc/passwd или какой-либо другой файл, связанный с получением доступа root, оставьте корневую оболочку открытой в терминале и не закрывайте ее до тех пор, пока не будет проверена возможность входа в качестве root.

7
27.01.2020, 21:07
  • Проверьте свою текущую оболочку с помощью

     GREP '^ root:' / etc / passwd
     

    Вы должны увидеть в конце строки полного пути к Shell, используемой пользователем root, вроде / bin / zsh . Затем проверьте, отсутствует ли путь неправильно, файл существует и имеет правильные набор разрешений ( R EAD и E x ECUTE).

  • Если бы путь не был правильным, проверьте, где ваш исполняемый ZSH помещен с

     Тип ZSH
     
  • После этого SU root, используя правильный путь оболочки, например, В случае / Bin / ZSH :

     SU -S / BIN / ZSH -
     
  • Наконец-то работает CHSH , чтобы изменить оболочку по умолчанию на / Bin / ZSH

4
27.01.2020, 21:07

Теги

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