Вопрос или проблема
Я использую Midnight Commander для SFTP на моем Ubuntu VPS.
VPS требует sudo для любых важных действий, например, для копирования/перемещения/удаления файлов. Так для примера, я не могу нажать F5 для копирования (за исключением ~
).
Возможно ли, чтобы mc запрашивал повышение привилегий / использовал sudo
, когда это необходимо?
Да, это возможно. Я не знаю внутренностей mc
, но в общем, вы должны вызывать sftp-server
на удаленном хосте с помощью sudo
. Есть два способа это сделать: на клиенте или на сервере. На клиенте вам нужно знать, как mc
вызывает sftp
, и изменить способ его вызова. Это проще сделать на сервере, где вы можете заставить его работать с помощью ForceCommand
. См. https://unix.stackexchange.com/a/637624/330987
Изменение на клиенте (sudo
на удаленном хосте настроен)
Для справки, нельзя использовать опцию RemoteCommand
, sftp
завершается с ошибкой Cannot execute command-line and remote command.
(потому что в фоновом режиме sftp
вызывает ssh ... -oRemoteCommand="/usr/bin/sudo /usr/libexec/sftp-server" ... -- localhost sftp
, и sftp в конце фоновой команды, похоже, конфликтует с опцией RemoteCommand)
sftp -b - -s '/usr/bin/sudo /usr/libexec/sftp-server'
Но поскольку неясно, как mc
использует SFTP, я бы рекомендовал перейти к подходу на стороне сервера (см. ниже).
Изменение на сервере
LogLevel DEBUG3
AuthorizedKeysFile .ssh/authorized_keys
ChallengeResponseAuthentication no
UsePAM yes
PrintMotd no
Subsystem sftp /usr/libexec/sftp-server
Match User <mc user>
X11Forwarding no
AllowTcpForwarding no
PermitTTY no
ForceCommand /usr/bin/sudo /usr/libexec/sftp-server
Ответ или решение
Как выполнять команды sudo через Midnight Commander и SFTP на Ubuntu VPS
Midnight Commander (mc) является мощным файловым менеджером, который значительно упрощает работу с файлами на сервере. Однако, когда у вас есть права sudo на удалённом сервере, встречаются определенные ограничения, особенно когда вы хотите использовать функции, такие как копирование и перемещение файлов, которые требуют повышенных прав доступа. В данной статье мы рассмотрим, как эффективно использовать mc с SFTP для выполнения команд с правами sudo.
1. Проблема с использованием SFTP и sudo
При попытке выполнить команды, требующие прав суперпользователя (например, копирование файлов в защищенные директории), вы столкнетесь с тем, что стандартное использование SFTP с Midnight Commander ограничено. Ключи, такие как <kbd>F5</kbd>
для копирования, работают только в домашней директории пользователя (~
) без использования sudo. Это происходит из-за того, что mc не инициирует сессию SFTP с повышенными правами, и, следовательно, не может обращаться к системным директориям.
2. Подходы к решению проблемы
Существует два основных подхода, которые вы можете использовать для решения этой проблемы: изменение настроек на клиентской стороне или настройка сервера.
2.1 Изменение настроек на клиентской стороне
Для начала, если вы хотите изменить конфигурацию клиента, нужно протестировать, как именно mc вызывает SFTP. К сожалению, использование параметра RemoteCommand
может вызвать проблемы, так как его использование с SFTP заканчивается ошибкой.
sftp -b - -s '/usr/bin/sudo /usr/libexec/sftp-server'
Этот подход может быть полезен, однако сложности в конфигурации mc могут сделать его менее эффективным.
2.2 Изменение настроек на серверной стороне
Более надежный подход заключается в конфигурации на стороне сервера. Вы можете использовать директиву ForceCommand
в вашем файле конфигурации SSH, чтобы запускать sftp-server
с правами sudo для определенного пользователя. Выполните следующие шаги:
-
Редактирование конфигурационного файла SSH:
Откройте файл конфигурации SSH на вашем сервере, обычно это/etc/ssh/sshd_config
. -
Добавьте необходимые параметры:
LogLevel DEBUG3 AuthorizedKeysFile .ssh/authorized_keys ChallengeResponseAuthentication no UsePAM yes PrintMotd no Subsystem sftp /usr/libexec/sftp-server Match User <mc_user> X11Forwarding no AllowTcpForwarding no PermitTTY no ForceCommand /usr/bin/sudo /usr/libexec/sftp-server
Здесь
<mc_user>
замените на имя пользователя, под которым вы будете использовать Midnight Commander. -
Перезапустите SSH сервис:
После внесения изменений сохраните файл и перезапустите SSH-сервер для применения изменений:
sudo systemctl restart ssh
3. Проверка работоспособности
После выполнения всех вышеперечисленных шагов вы сможете подключаться к вашему VPS через Midnight Commander и выполнять команды, которые требуют повышения прав. Теперь, когда вы будете копировать или перемещать файлы, mc автоматически выполнит необходимые команды через sudo, что значительно упростит вашу работу.
Заключение
Использование Midnight Commander через SFTP с повышенными правами доступа возможно и может быть реализовано несколькими способами. С учетом предоставленных решений, вы сможете эффективно управлять файлами на вашем Ubuntu VPS даже при ограничениях, наложенных на использование sudo. Однако, рекомендуется предпочесть серверный подход с использованием ForceCommand
, так как он обеспечивает лучшую безопасность и управляемость.
Эти шаги помогут вам оптимизировать ваш рабочий процесс и улучшить производительность при работе с удаленными серверами. Проводя необходимые настройки, вы значительно упростите выполнение команд с правами sudo в Midnight Commander, что сделает вашу работу более эффективной и удобной.