
🔓 Как получить root-права в WinSCP: настройка sudo для передачи файлов
Подключаетесь к серверу под обычным пользователем, заходите в /etc/nginx, и получаете «Permission denied». Файлы конфигурации, системные директории, логи, всё это закрыто от учётной записи без root-прав. А прямой вход под root по SSH на большинстве серверов отключён из соображений безопасности.
WinSCP, удобный файловый менеджер для Windows, но по умолчанию его SFTP-сессия работает с правами того пользователя, под которым вы зашли. Запросить повышение привилегий «на лету», как в терминале, протокол SFTP не умеет: он не интерактивен в момент рукопожатия и не может показать окно для ввода пароля sudo.
Ниже, четыре работающих способа заставить WinSCP работать с правами суперпользователя, от самого простого до «джедайского». Каждый проверен на Ubuntu, Debian и CentOS. Выберите тот, который лучше ложится на вашу инфраструктуру.
💡 Быстрый обзор:
- ➡️ Проблема: WinSCP по умолчанию не даёт прав
root, даже если у пользователя естьsudo. - ✅ Основной метод: Подмена команды запуска SFTP-сервера в настройках сайта WinSCP, быстро и точечно.
- 🔄 Альтернатива: Переключение на протокол SCP с командой
sudo su -в качестве оболочки. - ⚙️ Продвинутый: Правка
sshd_configна сервере, глобальное решение для всех подключений.
Шаг 1: Команда запуска SFTP-сервера, основной метод
Самый распространённый и элегантный способ получить root-права в WinSCP, заставить его запускать SFTP-сервер сразу от имени суперпользователя. Это делается подменой команды запуска в настройках конкретного подключения. Сервер при этом не перенастраивается, решение работает точечно.

Пошаговая инструкция:
- Запустите WinSCP и откройте менеджер сайтов.
- Выберите нужное подключение и нажмите Редактировать.
- Нажмите Продвинутые… внизу окна.
- В левом меню перейдите в раздел Среда → SFTP.
- В поле «Сервер SFTP» вместо значения «По умолчанию» впишите команду:
1 sudo /usr/lib/openssh/sftp-server
Для старых дистрибутивов путь может быть другим. Типичные расположения sftp-server:
Дистрибутив | Путь к sftp-server |
|---|---|
Ubuntu / Debian (актуальные) |
|
Ubuntu / Debian (старые) |
|
CentOS / RHEL / Fedora |
|
Amazon Linux |
|
Проверить точный путь на вашем сервере можно через терминал: cat /etc/ssh/sshd_config | grep Subsystem. Эта команда покажет, какой бинарник использует сам SSH-сервер.
Система запустит подсистему передачи файлов сразу с привилегиями root. Но чтобы это сработало без ошибки, ваш пользователь должен выполнять sudo без запроса пароля, об этом следующий шаг.
Шаг 2: Настройка sudoers, разрешаем sudo без пароля
Поскольку SFTP-рукопожатие не интерактивно, у WinSCP нет возможности показать окно для ввода пароля sudo. Сервер просто разорвёт соединение с ошибкой, если пароль запрашивается. Решение, добавить пользователю право на выполнение нужной команды без пароля через файл /etc/sudoers.

Что делать:
- Подключитесь к серверу по SSH (через PuTTY или встроенный терминал WinSCP).
- Откройте редактор sudoers командой
sudo visudo. Никогда не редактируйте/etc/sudoersнапрямую, ошибка синтаксиса заблокируетsudoдля всей системы, аvisudoпроверяет синтаксис перед сохранением. - Добавьте в конец файла строку (замените
usernameна ваш логин):
1 username ALL=(ALL) NOPASSWD: ALL
Это даёт пользователю полный доступ без пароля. Более безопасный вариант, ограничить разрешение только командой запуска SFTP-сервера:
1 username ALL=NOPASSWD: /usr/lib/openssh/sftp-server
Если на сервере несколько администраторов с разными логинами, узкая настройка снижает риск: даже при компрометации учётной записи злоумышленник не получит root на всё, а только на запуск SFTP.
Обратите внимание: опция requiretty в sudoers должна быть выключена. В современных реализациях sudo-rs она не поддерживается по умолчанию, но на старых серверах проверьте, закомментируйте строку Defaults requiretty, если она есть.
Шаг 3: Переключение на протокол SCP, быстрая альтернатива
Если возиться с путями к sftp-server не хочется, можно сменить сам протокол передачи данных. WinSCP поддерживает SCP, более старый, но надёжный протокол, который легче подхватывает настройки оболочки.

Как переключиться:
- В настройках сессии WinSCP измените File protocol с SFTP на SCP.
- Перейдите в Advanced → SCP/Shell.
- В поле Shell впишите:
sudo su -
При подключении WinSCP выполнит эту команду сразу после входа и переключит сессию в режим root.
| SFTP | SCP |
|---|---|---|
Права root | Через подмену бинарника сервера | Через подмену оболочки ( |
Скорость | Выше, особенно на множестве мелких файлов | Ниже |
Докачка при обрыве | Есть | Нет |
Надёжность на старых системах | Требует точного пути к бинарнику | Работает «из коробки» |
Безопасность | Можно ограничить NOPASSWD одной командой | Нужен полный беспарольный sudo |
Метод с SCP, компромиссный. Он проще в настройке, но проигрывает SFTP в скорости и возможностях восстановления при обрыве. Для разовых правок конфигов разница незаметна. Для регулярной передачи сотен файлов лучше настроить SFTP-метод.
Шаг 4: Глобальная настройка sshd_config, для опытных
Это метод для администраторов, которые хотят настроить поведение SSH-сервера централизованно. Суть: заменить строку Subsystem sftp в /etc/ssh/sshd_config на логическую конструкцию, которая сама определяет, может ли пользователь выполнить sudo без пароля, и запускает SFTP с соответствующими правами.
Что меняем:
Старая строка (обычно):
1 Subsystem sftp /usr/lib/openssh/sftp-server
Новая строка:
1 Subsystem sftp sudo -n true && sudo -n /usr/lib/openssh/sftp-server || /usr/lib/openssh/sftp-server
Как это работает:
sudo -n true, проверяет, может ли пользователь выполнитьsudoбез пароля (флаг-n= non-interactive).- Если да (
&&), запускается сервер с правамиroot. - Если нет (
||), сервер запускается с обычными правами пользователя.
После правки перезагрузите SSH-сервис: sudo systemctl restart sshd.
Важно: ошибка в синтаксисе этого файла полностью закроет доступ к серверу по SSH. Перед правкой убедитесь, что у вас есть второй терминал с активной сессией, если что-то пойдёт не так, вы сможете откатить изменения. И сделайте копию: cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.
Особенности облачных серверов (AWS EC2, DigitalOcean)
Облачные образы Linux часто имеют предустановленные настройки sudoers, которые могут как упростить, так и усложнить задачу.

AWS EC2 (Ubuntu):
Пользователь ubuntu на образах Ubuntu 18.04 и новее часто уже имеет нужные права. Проверьте файл /etc/sudoers.d/90-cloud-init-users, там может уже быть строка:
1 ubuntu ALL=(ALL) NOPASSWD:ALL
Если она есть, шаг 2 можно пропустить. В настройках WinSCP используйте команду sudo /usr/lib/openssh/sftp-server.
AWS EC2 (Amazon Linux):
На Amazon Linux путь к sftp-server отличается, /usr/libexec/openssh/sftp-server. Ошибка в одной букве (lib вместо libexec) даст код ошибки 127 (Command not found) и мгновенный разрыв соединения.
DigitalOcean (Droplets Ubuntu):
На стандартных дроплетах DigitalOcean пользователь root по умолчанию включён, но доступ только по SSH-ключу. Если вы создали отдельного пользователя, настройка sudoers аналогична обычному Ubuntu.
Общий совет для облака: перед тем как вписывать путь в WinSCP, проверьте наличие файла на сервере: ls -la /usr/lib/openssh/sftp-server (или аналог для вашего дистрибутива).
⁉️🤔 Частые вопросы
Нужно ли включать прямой вход под root для работы WinSCP с sudo?
Нет. Весь смысл описанных методов, использовать обычную учётную запись и временно повышать права через
sudo. Прямой вход подroot(PermitRootLogin yes) считается плохой практикой безопасности: логи не покажут, кто именно из администраторов выполнил действие.
Почему WinSCP выдаёт ошибку «Command not found» после настройки?
Скорее всего, указан неверный путь к
sftp-server. В разных дистрибутивах он лежит в/usr/lib/,/usr/lib/openssh/или/usr/libexec/openssh/. Точный путь проверяется командойcat /etc/ssh/sshd_config | grep Subsystemна сервере.
Насколько безопасен NOPASSWD в sudoers?
Это компромисс. Полный доступ
ALL=(ALL) NOPASSWD:ALLснижает защиту: если злоумышленник получит доступ к пользователю, он получит иroot. Ограничение конкретной командой (/usr/lib/openssh/sftp-server) существенно безопаснее: посторонний не сможет через эту учётную запись запустить ничего, кроме SFTP-сервера.
Работает ли это с другими клиентами, FileZilla, Cyberduck?
Принцип тот же, но настройка отличается. В FileZilla нет удобного поля для команды SFTP-сервера в графическом интерфейсе, потребуется правка конфигурационного файла. Cyberduck поддерживает опцию «SFTP Server» в настройках подключения, аналогично WinSCP. WinSCP выигрывает по удобству именно в этом сценарии.
Что делать, если файлы видны, но не редактируются?
Проверьте владельца и права командой
ls -laна сервере. Если вы настроили SFTP-сервер черезsudo, но соединение упало обратно к обычным правам, значит,sudoзапросил пароль и не получил ответа. Перепроверьте настройку NOPASSWD из шага 2.
Можно ли просто сменить владельца системных файлов на своего пользователя?
Это «грязный» обходной путь. Системные службы ожидают, что их конфигурациями владеет
root. Смена владельца (chown) или прав (chmod) на системных файлах может сломать сервисы. Лучше потратить пять минут на настройку sudo, и работать правильно.
В чём разница между SCP и SFTP в контексте sudo?
SCP, это просто копирование через SSH: оно легче перехватывает оболочку, поэтому для него достаточно команды
sudo su -в поле Shell. SFTP, полноценная подсистема, работающая как отдельный процесс: для неё нужен трюк с подменой бинарника. SFTP быстрее и функциональнее, SCP, проще в настройке.
Видны ли действия в логах при использовании sudo через WinSCP?
Да. В
/var/log/auth.logбудет запись о том, что пользовательusernameповысил права черезsudo. Это плюс: если администраторов несколько, логи показывают, кто именно выполнил операцию. При прямом входе подrootтакой прозрачности нет.
Что делать, если sudo требует TTY, а WinSCP его не предоставляет?
Проверьте
/etc/sudoersна наличие опцииDefaults requiretty. Если она есть, закомментируйте её (добавьте#в начале строки) или отключите для конкретного пользователя:Defaults:username !requiretty. Современные реализацииsudo-rsэту опцию не поддерживают, проблема актуальна только для старых серверов.
Можно ли запустить SFTP от имени другого пользователя, не root?
Да. Команда
sudo -u www-data /usr/lib/openssh/sftp-serverзапустит сессию от имениwww-data, это удобно, когда нужно править файлы сайта, не трогая системные директории. Права в sudoers для этого должны включать опцию-u:username ALL=(www-data) NOPASSWD: /usr/lib/openssh/sftp-server.
Итоговый вердикт: какой метод выбрать
Для ежедневной работы с сервером оптимален первый метод, подмена команды SFTP-сервера в сочетании с узкой настройкой NOPASSWD только на sftp-server. Он безопасен, не затрагивает глобальные настройки и работает на всех современных дистрибутивах.
- Если у вас Ubuntu / Debian и вы готовы потратить 5 минут на настройку, берите Шаг 1 + Шаг 2 и не возвращайтесь к вопросу.
- Если сервер старый и путь к
sftp-serverне находится, переключитесь на SCP (Шаг 3): он прощает неточности и работает практически везде. - Если администрируете десяток серверов и хотите единый стандарт, настройте sshd_config (Шаг 4) один раз через Ansible или вручную, но обязательно с бэкапом.
Начните с проверки: зайдите на сервер по SSH и выполните cat /etc/ssh/sshd_config | grep Subsystem. Через минуту вы уже будете знать точный путь, и первый метод заработает с первой попытки. А какой способ передачи файлов используете вы, делитесь в комментариях.



