
🔓 Як отримати 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. За хвилину ви вже знатимете точний шлях, і перший метод запрацює з першої спроби. А який спосіб передавання файлів використовуєте ви, діліться в коментарях.



