После scp
-защищенный bash
двоичный файл в виртуальную машину Linux openSUSE 12.2 и заменив им оболочку входа, ни один пользователь не сможет войти через ssh
или консоль. Как оказалось, исполняемый бит при передаче потерялся, несмотря на использование -p
переключатель.
Я попытался исправить это, установив файловую систему на хост Linux Xen и выполнив chmod +x /mnt/usr/local/bin/bash
, но ситуация не улучшилась. Поможет ли перезагрузка гостевой ВМ?
Вот что я вижу на консоли:
xxx login: root
Password:
Last login: xxx
Have a lot of fun...
-- root: no shell: permission denied
Это появляется в /mnt/var/log/messages
…
при входе в ssh:
sshd: User root not allowed because shell /bin/bash is not executable
sshd: input_userauth_request: invalid user root [preauth]
sshd: Postponed keyboard-interactive for invalid user root from x.x.x.x port xxxxx ssh2 [preauth]
при входе в консоль:
systemd-logind: New session x of user root.
login: ROOT LOGIN ON xvc0
console-kit-daemon: WARNING: Unable to spawn /etc/ConsoleKit/run-session.d/dbus_at_console.ck: Failed to execute child process "/etc/ConsoleKit/run-session.d/dbus_at_console.ck" (Permission denied)
systemd-logind: Removed session x.
И вот как я вызвал проблему:
# my /bin/bash has been a symlink to /usr/local/bin/bash since the first shellshock patch
scp -p buildhost:/tmp/bash /tmp/bash
# then I forgot to do chmod +x /tmp/bash
# then I forgot to do chsh -s /usr/bin/zsh, logout and login
mv /tmp/bash /usr/local/bin/bash && \
mv /bin/bash /var/tmp/bash-unpatched && \
chmod -x /var/tmp/bash-unpatched && \
ln -s /usr/local/bin/bash /bin/bash
Замена /bin/bash
символическая ссылка реальным двоичным файлом тоже не помогла.
Придется перезагрузиться. Изменения прав доступа к файлам, сделанные гипервизором в файловой системе, используемой гостем, не будут обнаружены гостем.
В будущем при выполнении этого типа «обновления» открывайте отдельный сеанс оболочки для сервера, который вы обновляете, на случай, если что-то пойдет не так.
Похоже, у вас есть доступ к серверу. Вы можете попробовать разные подходы.
У вас должен быть работающий клиент ssh, попробуйте использовать ssh для исправления разрешений или войдите в систему с другой оболочкой.
ssh root@host chmod +x /bin/bash
ssh root@host /bin/dash
Если вы можете подключиться к пользователю без полномочий root, попробуйте sudo
.
sudo chmod +x /bin/dash
sudo /bin/bash
Или просто используйте su
от пользователя без полномочий root
su -c 'chmod +x /bin/bash'
su -c '/bin/dash'
Вы сможете найти доступные оболочки в /etc/shells
.