Замена Процесса Bash не работает 'корнем' на OS X

С недавними ядрами (≥ 2.6.37), см. ответ Petr Uzel. С более старыми ядрами этот предел длины свойственен.

Strace показывает это losetup -a получает имя через LOOP_GET_STATUS ioctl, который звонит loop_get_status_old, который получает его данные из a struct loop_info. Поле имени в той структуре данных ядра ограничено LO_NAME_SIZE = 64 байта. (Существует также a loop_get_status64 и struct loop_info64, но у них есть то же ограничение.), Таким образом, это ограничение является внутренним, Вы не можете сделать немного лучше.

Так или иначе та структура данных показывает настоящее имя базового устройства или файла, но можно переименовать его (или даже удалить его), и это не будет отражено в выводе от losetup.

Вывод losetup показывает идентификатор файловой системы (st_dev) и inode (st_ino) из файла, например, [fc03]:33030504. Можно найти блочное устройство для файловой системы путем поиска его в /proc/partitions (начало строки 252 3). Затем ищите точку монтирования того блочного устройства в /proc/mounts. Затем выполненный find /mount/point -inum 33030504 определять местоположение файла. Да, это является замысловатым, и не, нет никакого более быстрого пути (хорошо, существует debugfs для некоторых типов файловой системы).

3
14.07.2012, 02:40
2 ответа

Если Вы хотите изменить оболочку, работать chsh -s /bin/bash

Если Вы хотите выполнить оболочку однажды, в то время как зарегистрированный как корень, просто выполненный bash или /bin/bash

chsh после изменения корневой оболочки:

# Changing user information for root.
# Use "passwd" to change the password.
##
# Open Directory: /Local/Default
##
Login: root
Uid [#]: 0
Gid [# or name]: 0
Generated uid: FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000000
Home directory: /var/root
Shell: /bin/bash
Full Name: System Administrator
Office Location:
Office Phone:
Home Phone:
4
27.01.2020, 21:13
  • 1
    Кажется, что удар является стандартным двоичным файлом в моей системе OSX, но я могу быть неправильной двойной проверкой, Ваш путь. –  Tim 13.07.2012, 19:52
  • 2
    , который я не знаю о OS X, но некоторых системах, использует статически связанный sh как оболочка корня так, чтобы это могло работать во время начальной загрузки восстановления, даже если библиотеки не доступны (например, на размонтированном /usr файловая система). См. также, toor учетная запись: freebsd.org/doc/en_US.ISO8859-1/books/faq / … –  mrb 13.07.2012, 19:54
  • 3
    я должен прокомментировать, что пытался редактировать/etc/passwd и заменить/bin/sh к пути к удару, но он был проигнорирован... (возможно/etc/passwd не то, как оболочка выбрана на OS X?) А-ч –  Robottinosino 13.07.2012, 20:10
  • 4
    @Robottinosino проверяет мой вывод выше, он хранится в открытом каталоге./etc/passwd там по другим причинам. –  Tim 13.07.2012, 20:13
  • 5
    @Robottinosino, который является неправильным синтаксисом. Сделать chsh -l /Local/Default -s /opt/local/bin/bash или просто chsh -s /opt/local/bin/bash будет достаточен. –  Tim 13.07.2012, 20:33

Если Вы не используете удар, Вы не можете использовать ту функцию удара.

Вы могли начать использовать sudo bash пойти корень вместо этого, или sudo bash -l пойти корень с оболочкой входа в систему, прочитать конфигурацию удара.

3
27.01.2020, 21:13
  • 1
    Можно также измениться rootокружите к bash, или просто вызовите его при входе в систему как корень (оболочки являются просто программами, можно запустить оболочку из оболочки (просто выполненный bash), единственная вещь, которая происходит, состоит в том, что при отъезде его, Вы вернулись к оболочке, которую Вы запустили bash от), –  njsg 13.07.2012, 19:47
  • 2
    я постарался не предлагать изменить оболочку. Некоторое системное значение по умолчанию к sh для оболочек восстановления, в особенности системы, где они включают статически связанный sh в /bin, и библиотеки могли бы быть недоступными во время восстановления (например, потому что они находятся в размонтированных файловых системах как /usr). –  mrb 13.07.2012, 19:51
  • 3
    я хочу, чтобы мое переключение базировалось, чтобы быть интерактивным входом в систему во всех эффектах (например, на OS X, читая .profile в предпочтении к .bashrc...), Ваше решение сделает это? –  Robottinosino 13.07.2012, 20:09
  • 4
    , нет, необходимо было бы использовать sudo bash -l для этого. Немного неловкий, к сожалению. –  mrb 13.07.2012, 20:13
  • 5
    На самом деле sudo колотят-l, действительно похож на интерактивный вход в систему, действительно читает .profile корня, НО... это сохраняет $HOME как/Users/robottinosino, а не/var/root?! –  Robottinosino 13.07.2012, 20:23

Теги

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