💡 Быстрый обзор:
- ➡️ Проблема: По умолчанию
SFTPне дает прав суперпользователя, даже если у вас естьsudo. - ✅ Решение: Настройка специальной команды запуска сервера
SFTPвнутри клиента. - 💡 Варианты: Использование протокола
SCPили модификация конфигов сервера. - ❗ Безопасность: Как настроить вход без пароля для конкретных команд, не открывая
rootполностью.
Работа с удаленным сервером часто требует прав администратора для редактирования конфигурационных файлов или управления системными директориями. Однако, подключаясь через WinSCP под обычным пользователем, вы часто сталкиваетесь с ошибкой «Permission denied» при попытке изменить файлы за пределами домашней папки.
Прямой вход под root часто отключен из соображений безопасности, а стандартный протокол SFTP не умеет запрашивать пароль для повышения привилегий «на лету». В этой статье мы разберем надежные способы обойти это ограничение, настроив WinSCP на работу через sudo. Это позволит вам безопасно управлять файловой системой сервера, сохраняя при этом контроль над безопасностью.
Ниже приведена таблица совместимости методов, которые мы рассмотрим:
| Метод | Протокол | Сложность | Безопасность |
|---|---|---|---|
| Команда SFTP Server |
SFTP
|
⭐⭐ | Высокая |
| Смена протокола |
SCP
|
⭐ | Средняя |
| Правка sshd_config |
SFTP
|
⭐⭐⭐ | Средняя |

Важное замечание: Перед внесением изменений убедитесь, что у вас есть доступ к терминалу сервера (через
PuTTYили другой SSH-клиент) на случай, если потребуется отладить конфигурацию.
🚀 WinSCP — Базовая настройка клиента
Самый распространенный и элегантный способ получить права — заставить WinSCP запускать SFTP-сервер сразу с правами суперпользователя. Это делается путем подмены команды запуска в настройках сессии.
Этот метод идеален, так как не требует перенастройки всего сервера SSH, а действует точечно для вашего подключения.
Инструкция по шагам:
- Запустите
WinSCPи откройте менеджер сайтов. - Выберите нужное подключение и нажмите кнопку Редактировать (Edit).
- Нажмите кнопку Продвинутые… (Advanced…) внизу окна.
- В левом меню выберите раздел
Environment(Среда) ->SFTP. - В поле «Сервер SFTP» (SFTP Server) вместо значения «По умолчанию» (Default) впишите следующую команду:
sudo su -c /usr/lib/sftp-serverИли, если путь отличается:sudo /usr/lib/openssh/sftp-server
Это заставит систему выполнить запуск подсистемы передачи файлов сразу с привилегиями root. Однако, чтобы это сработало гладко, ваш пользователь должен уметь выполнять sudo без ввода пароля (об этом в следующем разделе).
- Особенность: Путь к файлу сервера может отличаться в зависимости от дистрибутива.
-
Совместимость: Работает на большинстве систем
Debian,Ubuntu,CentOS.
⚙️ Sudoers — Настройка прав доступа
Для того чтобы метод выше сработал, сервер не должен спрашивать пароль при выполнении команды sudo. Поскольку протокол SFTP не интерактивен в момент рукопожатия, у вас не будет возможности ввести пароль в всплывающем окне.

Вам необходимо отредактировать файл /etc/sudoers. Это делается через терминал командой visudo.
Как настроить NOPASSWD:
- Подключитесь к серверу через
SSH. - Введите команду
sudo visudo. - Добавьте в конец файла строку для вашего пользователя (замените
usernameна ваш логин):username ALL=(ALL) NOPASSWD: ALL -
Более безопасный вариант: Если вы не хотите давать полный беспарольный доступ ко всему, разрешите без пароля только конкретную команду запуска сервера:
username ALL=NOPASSWD: /usr/lib/openssh/sftp-server
Это критически важный этап. Без него WinSCP попытается соединиться, сервер запросит пароль для sudo, клиент не сможет его передать и соединение разорвется с ошибкой или вернется к правам обычного пользователя.
-
Безопасность: Вариант с указанием конкретного пути к
sftp-serverпредпочтительнее. -
Проверка: Проверьте путь командой
whereis sftp-server.
☁️ AWS EC2 — Специфика облачных серверов
Если вы работаете с облачными серверами Amazon, пути к файлам и настройки пользователя могут немного отличаться. Образы Amazon Linux или Ubuntu в облаке часто имеют свои предустановки.
Например, в Ubuntu 18.04 и новее на AWS пользователь ubuntu часто уже имеет нужные права, но путь к серверу может быть другим.

Нюансы для AWS:
- Проверьте файл конфигурации
cloud-init, который часто управляет правами:/etc/sudoers.d/90-cloud-init-users. Там может уже содержаться строка:ubuntu ALL=(ALL) NOPASSWD:ALL - В настройках
WinSCPиспользуйте команду:sudo /usr/lib/openssh/sftp-server - Для
Amazon Linux(не Ubuntu) путь часто находится вlibexec:sudo /usr/libexec/openssh/sftp-server
Ошибка в одну букву в пути (например, lib вместо libexec) приведет к мгновенному разрыву соединения с кодом ошибки 127 (Command not found).
-
Совет: Всегда проверяйте наличие файла на сервере через консоль перед тем, как вписывать его в настройки
WinSCP.
🔄 Протокол SCP — Альтернативный метод
Если возиться с путями к sftp-server не хочется или они постоянно меняются, можно сменить сам протокол передачи данных. WinSCP поддерживает старый, но надежный протокол SCP.
Этот метод часто работает «из коробки» проще, так как SCP легче подхватывает настройки оболочки (shell).

Как переключиться:
- В настройках сессии
WinSCPизмените File protocol сSFTPнаSCP. - Перейдите в Advanced -> SCP/Shell.
- В поле Shell выберите или впишите:
sudo su -
При подключении WinSCP выполнит эту команду сразу после входа. Это переключит сессию в режим root.
-
Минусы: Протокол
SCPможет быть медленнееSFTPпри передаче множества мелких файлов и менее гибок в плане возобновления прерванных загрузок. - Плюсы: Работает очень стабильно на старых системах и не требует поиска бинарника сервера.
🛡️ sshd_config — Глобальная серверная настройка
Существует метод для «джедаев», который позволяет настроить само поведение SSH-сервера так, чтобы он автоматически повышал привилегии при запуске подсистемы SFTP, если это разрешено.
Это требует редактирования файла /etc/ssh/sshd_config на сервере.
Суть метода:
Вы находите строку, начинающуюся с Subsystem sftp и заменяете её на сложную логическую конструкцию. Старая строка обычно выглядит так: Subsystem sftp /usr/lib/openssh/sftp-server
Новая строка: Subsystem sftp sudo -n true && sudo -n /usr/lib/openssh/sftp-server || /usr/lib/openssh/sftp-server
Разбор логики:
-
sudo -n true— проверяет, может ли пользователь выполнитьsudoбез пароля. - Если да (
&&), то запускается сервер с правамиroot. - Если нет (
||), то запускается обычная версия сервера с правами пользователя.
После правки файла необходимо перезагрузить сервис: sudo systemctl restart sshd.
- Риски: Ошибка в синтаксисе этого файла может полностью закрыть доступ к серверу по SSH. Будьте предельно осторожны.
⁉️🤔 Популярные вопросы и ответы
-
Нужно ли мне включать root-пользователя для этого?
Нет, весь смысл описанных методов в том, чтобы использовать вашу обычную
учетную запись, но временно повышать права через
sudo
. Включение прямого входа под
root
(PermitRootLogin yes) считается плохой практикой безопасности.
-
Почему WinSCP выдает ошибку «Command not found»?
Скорее всего, вы указали неверный путь к
sftp-server
. В разных версиях Linux он может лежать в
/usr/lib/
,
/usr/lib/openssh/
или
/usr/libexec/openssh/
. Проверьте точный путь командой
find / -name sftp-server
.
-
Безопасно ли использовать NOPASSWD в sudoers?
Это компромисс. Давая полный доступ
ALL=(ALL)
, вы снижаете уровень защиты учетной записи: если злоумышленник получит
доступ к вашему пользователю, он получит и
root
. Рекомендуется ограничивать
NOPASSWD
только конкретной командой запуска
sftp-server
.
-
Можно ли использовать авторизацию по ключам SSH вместе с этим методом?
Да, абсолютно. Авторизация по ключам (
SSH Key Authentication
) отлично сочетается с
sudo
. Ключ заменяет пароль на вход, а настройка
sudoers
убирает запрос пароля на повышение прав.
-
Работает ли это с Mac или Linux клиентами (например, FileZilla)?
Принцип тот же, но настройка клиента отличается. В
FileZilla
нет удобного поля для ввода команды сервера SFTP в графическом
интерфейсе, поэтому
WinSCP
здесь выигрывает по удобству.
-
Что делать, если я вижу файлы, но не могу их редактировать?
Проверьте владельца файлов. Даже с
sudo
в SFTP иногда возникают коллизии прав при создании новых файлов. Однако,
если вы настроили
sudo su -c ...
правильно, все операции будут идти от имени
root
.
-
Можно ли просто сменить группу файлов на свою?
Можно, но это «грязный» хак. Изменение прав (
chmod
) или владельца (
chown
) системных файлов может привести к поломке сервисов, которые ожидают,
что файлами владеет именно
root
. Лучше использовать описанные выше методы.
-
В чем разница между SCP и SFTP в контексте sudo?
SCP
— это просто копирование через SSH, оно легче перехватывает оболочку
(shell).
SFTP
— это полноценная подсистема, которая работает как отдельный процесс.
Для
SFTP
нужен трюк с запуском сервера, для
SCP
достаточно смены оболочки.
-
Повлияет ли это на логирование действий?
Да. При использовании
sudo
в логах
/var/log/auth.log
будет видно, что пользователь
user
повысил права. Если бы вы заходили сразу как
root
, отследить конкретного администратора (если их несколько) было бы
сложнее.
-
Что такое «tty tickets» и почему они мешают?
В некоторых конфигурациях
sudo
требует наличия реального терминала (TTY).
WinSCP
не предоставляет TTY. Если в
sudoers
есть опция
requiretty
, её нужно закомментировать или отключить для вашего пользователя, иначе
sudo
не сработает.
-
Как узнать точный путь к sftp-server на моем сервере?
Зайдите через PuTTY и выполните команду:
cat /etc/ssh/sshd_config | grep Subsystem
. Она покажет, какой путь использует сам сервер SSH по умолчанию.
-
Можно ли редактировать файлы от имени другого пользователя, не root?
Да, команда
sudo -u username -c /path/to/sftp-server
позволит запустить сессию от имени любого другого пользователя
(например,
www-data
), если у вас есть на это права в
sudoers
.
Нужно ли мне включать root-пользователя для этого?
Нет, весь смысл описанных методов в том, чтобы использовать вашу обычную
учетную запись, но временно повышать права через
sudo
. Включение прямого входа под
root
(PermitRootLogin yes) считается плохой практикой безопасности.
Почему WinSCP выдает ошибку «Command not found»?
Скорее всего, вы указали неверный путь к
sftp-server
. В разных версиях Linux он может лежать в
/usr/lib/
,
/usr/lib/openssh/
или
/usr/libexec/openssh/
. Проверьте точный путь командой
find / -name sftp-server
.
Безопасно ли использовать NOPASSWD в sudoers?
Это компромисс. Давая полный доступ
ALL=(ALL)
, вы снижаете уровень защиты учетной записи: если злоумышленник получит
доступ к вашему пользователю, он получит и
root
. Рекомендуется ограничивать
NOPASSWD
только конкретной командой запуска
sftp-server
.
Можно ли использовать авторизацию по ключам SSH вместе с этим методом?
Да, абсолютно. Авторизация по ключам (
SSH Key Authentication
) отлично сочетается с
sudo
. Ключ заменяет пароль на вход, а настройка
sudoers
убирает запрос пароля на повышение прав.
Работает ли это с Mac или Linux клиентами (например, FileZilla)?
Принцип тот же, но настройка клиента отличается. В
FileZilla
нет удобного поля для ввода команды сервера SFTP в графическом
интерфейсе, поэтому
WinSCP
здесь выигрывает по удобству.
Что делать, если я вижу файлы, но не могу их редактировать?
Проверьте владельца файлов. Даже с
sudo
в SFTP иногда возникают коллизии прав при создании новых файлов. Однако,
если вы настроили
sudo su -c ...
правильно, все операции будут идти от имени
root
.
Можно ли просто сменить группу файлов на свою?
Можно, но это «грязный» хак. Изменение прав (
chmod
) или владельца (
chown
) системных файлов может привести к поломке сервисов, которые ожидают,
что файлами владеет именно
root
. Лучше использовать описанные выше методы.
В чем разница между SCP и SFTP в контексте sudo?
SCP
— это просто копирование через SSH, оно легче перехватывает оболочку
(shell).
SFTP
— это полноценная подсистема, которая работает как отдельный процесс.
Для
SFTP
нужен трюк с запуском сервера, для
SCP
достаточно смены оболочки.
Повлияет ли это на логирование действий?
Да. При использовании
sudo
в логах
/var/log/auth.log
будет видно, что пользователь
user
повысил права. Если бы вы заходили сразу как
root
, отследить конкретного администратора (если их несколько) было бы
сложнее.
Что такое «tty tickets» и почему они мешают?
В некоторых конфигурациях
sudo
требует наличия реального терминала (TTY).
WinSCP
не предоставляет TTY. Если в
sudoers
есть опция
requiretty
, её нужно закомментировать или отключить для вашего пользователя, иначе
sudo
не сработает.
Как узнать точный путь к sftp-server на моем сервере?
Зайдите через PuTTY и выполните команду:
cat /etc/ssh/sshd_config | grep Subsystem
. Она покажет, какой путь использует сам сервер SSH по умолчанию.
Можно ли редактировать файлы от имени другого пользователя, не root?
Да, команда
sudo -u username -c /path/to/sftp-server
позволит запустить сессию от имени любого другого пользователя
(например,
www-data
), если у вас есть на это права в
sudoers
.
Почему нам можно доверять
Мы не просто пересказываем документацию, а анализируем реальные сценарии администрирования. При подготовке этого материала мы опирались как на официальные мануалы WinSCP и Ubuntu, так и на опыт сообщества Stack Exchange, проверив работоспособность методов на актуальных версиях дистрибутивов. Мы понимаем баланс между удобством работы и безопасностью сервера, поэтому всегда рекомендуем методы, минимизирующие риски, такие как точечная настройка sudoers вместо полного открытия root-доступа.
💎 Итоги и выводы
Настройка WinSCP для работы с правами суперпользователя — это мощный инструмент в арсенале администратора. Он избавляет от необходимости постоянного переключения в консоль для элементарных операций с файлами.
Ключевые рекомендации:
- 🛡️ Используйте SFTP метод: Прописывание
sudoкоманды в настройкахEnvironment— самый чистый способ. - 🔑 Настройте ключи: Комбинируйте этот метод с SSH-ключами для максимальной безопасности.
- 📝 Следите за путями: 90% ошибок связаны с неправильным путем к
sftp-server(/usr/lib vs /usr/libexec). - 🚫 Не открывайте Root: Избегайте соблазна включить прямой вход под
rootв конфиге SSH, это огромная дыра в безопасности.
Следуя этой инструкции, вы сможете управлять сервером с комфортом графического интерфейса, не жертвуя при этом стандартами безопасности Linux.