
🔓 Jak uzyskać uprawnienia root w WinSCP: konfiguracja sudo do przesyłania plików
Łączą się Państwo z serwerem jako zwykły użytkownik, wchodzą do /etc/nginx i otrzymują „Permission denied". Pliki konfiguracyjne, katalogi systemowe, logi, wszystko to jest zamknięte dla konta bez uprawnień root. Natomiast bezpośrednie logowanie na root przez SSH jest na większości serwerów wyłączone ze względów bezpieczeństwa.
WinSCP, wygodny menedżer plików dla Windows, domyślnie działa w sesji SFTP z uprawnieniami użytkownika, na którego się Państwo zalogowali. Protokół SFTP nie potrafi zażądać podniesienia uprawnień „w locie", jak w terminalu: nie jest interaktywny w momencie uzgadniania połączenia i nie może wyświetlić okna do wpisania hasła sudo.
Poniżej cztery działające sposoby, aby zmusić WinSCP do pracy z uprawnieniami superużytkownika, od najprostszego do „mistrzowskiego". Każdy został sprawdzony na Ubuntu, Debianie i CentOS. Proszę wybrać ten, który najlepiej pasuje do Państwa infrastruktury.
💡 Szybki przegląd:
- ➡️ Problem: WinSCP domyślnie nie daje uprawnień
root, nawet jeśli użytkownik masudo. - ✅ Główna metoda: Podmiana polecenia uruchomienia serwera SFTP w ustawieniach witryny WinSCP, szybko i punktowo.
- 🔄 Alternatywa: Przełączenie na protokół SCP z poleceniem
sudo su -jako powłoką. - ⚙️ Zaawansowane: Edycja
sshd_configna serwerze, globalne rozwiązanie dla wszystkich połączeń.
Krok 1: Polecenie uruchomienia serwera SFTP, metoda główna
Najpopularniejszy i najbardziej elegancki sposób na uzyskanie uprawnień root w WinSCP to zmuszenie go do uruchamiania serwera SFTP od razu w imieniu superużytkownika. Robi się to poprzez podmianę polecenia uruchomienia w ustawieniach konkretnego połączenia. Serwer nie jest przy tym rekonfigurowany, rozwiązanie działa punktowo.

Instrukcja krok po kroku:
- Proszę uruchomić WinSCP i otworzyć menedżera witryn.
- Proszę wybrać odpowiednie połączenie i kliknąć Edytuj.
- Proszę kliknąć Zaawansowane… na dole okna.
- W lewym menu proszę przejść do sekcji Środowisko → SFTP.
- W polu „Serwer SFTP" zamiast wartości „Domyślny" proszę wpisać polecenie:
1 sudo /usr/lib/openssh/sftp-server
W przypadku starszych dystrybucji ścieżka może być inna. Typowe lokalizacje sftp-server:
Dystrybucja | Ścieżka do sftp-server |
|---|---|
Ubuntu / Debian (aktualne) |
|
Ubuntu / Debian (starsze) |
|
CentOS / RHEL / Fedora |
|
Amazon Linux |
|
Dokładną ścieżkę na swoim serwerze można sprawdzić przez terminal: cat /etc/ssh/sshd_config | grep Subsystem. To polecenie pokaże, którego pliku binarnego używa sam serwer SSH.
System uruchomi podsystem przesyłania plików od razu z uprawnieniami root. Aby jednak zadziałało to bez błędu, Państwa użytkownik musi wykonywać sudo bez pytania o hasło, o tym w następnym kroku.
Krok 2: Konfiguracja sudoers, zezwalamy na sudo bez hasła
Ponieważ uzgadnianie połączenia SFTP nie jest interaktywne, WinSCP nie ma możliwości wyświetlenia okna do wpisania hasła sudo. Serwer po prostu zerwie połączenie z błędem, jeśli hasło jest wymagane. Rozwiązaniem jest dodanie użytkownikowi prawa do wykonania potrzebnego polecenia bez hasła poprzez plik /etc/sudoers.

Co należy zrobić:
- Proszę połączyć się z serwerem przez SSH (przez PuTTY lub wbudowany terminal WinSCP).
- Proszę otworzyć edytor sudoers poleceniem
sudo visudo. Nigdy nie należy edytować/etc/sudoersbezpośrednio, błąd składni zablokujesudodla całego systemu, avisudosprawdza składnię przed zapisaniem. - Proszę dodać na końcu pliku wiersz (proszę zastąpić
usernameswoim loginem):
1 username ALL=(ALL) NOPASSWD: ALL
Daje to użytkownikowi pełny dostęp bez hasła. Bezpieczniejszy wariant to ograniczenie uprawnienia tylko do polecenia uruchomienia serwera SFTP:
1 username ALL=NOPASSWD: /usr/lib/openssh/sftp-server
Jeśli na serwerze jest kilku administratorów z różnymi loginami, wąskie ustawienie zmniejsza ryzyko: nawet w przypadku przejęcia konta, intruz nie uzyska root do wszystkiego, a jedynie do uruchomienia SFTP.
Proszę zwrócić uwagę: opcja requiretty w sudoers musi być wyłączona. We współczesnych implementacjach sudo-rs nie jest ona domyślnie obsługiwana, ale na starszych serwerach proszę sprawdzić i zakomentować wiersz Defaults requiretty, jeśli istnieje.
Krok 3: Przełączenie na protokół SCP, szybka alternatywa
Jeśli nie chcą się Państwo zajmować ścieżkami do sftp-server, można zmienić sam protokół przesyłania danych. WinSCP obsługuje SCP, starszy, ale niezawodny protokół, który łatwiej przejmuje ustawienia powłoki.

Jak się przełączyć:
- W ustawieniach sesji WinSCP proszę zmienić File protocol z SFTP na SCP.
- Proszę przejść do Advanced → SCP/Shell.
- W polu Shell proszę wpisać:
sudo su -
Podczas łączenia WinSCP wykona to polecenie natychmiast po zalogowaniu i przełączy sesję w tryb root.
| SFTP | SCP |
|---|---|---|
Uprawnienia root | Poprzez podmianę pliku binarnego serwera | Poprzez podmianę powłoki ( |
Szybkość | Wyższa, szczególnie przy dużej liczbie małych plików | Niższa |
Wznawianie po przerwaniu | Jest | Nie ma |
Niezawodność na starych systemach | Wymaga dokładnej ścieżki do pliku binarnego | Działa „od ręki" |
Bezpieczeństwo | Można ograniczyć NOPASSWD do jednego polecenia | Potrzebne pełne sudo bez hasła |
Metoda z SCP jest kompromisowa. Jest prostsza w konfiguracji, ale przegrywa z SFTP pod względem szybkości i możliwości wznawiania po przerwaniu. Przy jednorazowych poprawkach konfiguracji różnica jest niezauważalna. Do regularnego przesyłania setek plików lepiej skonfigurować metodę SFTP.
Krok 4: Globalna konfiguracja sshd_config, dla doświadczonych
To metoda dla administratorów, którzy chcą skonfigurować zachowanie serwera SSH centralnie. Sedno: zastąpić wiersz Subsystem sftp w /etc/ssh/sshd_config konstrukcją logiczną, która sama określa, czy użytkownik może wykonać sudo bez hasła, i uruchamia SFTP z odpowiednimi uprawnieniami.
Co zmieniamy:
Stary wiersz (zazwyczaj):
1 Subsystem sftp /usr/lib/openssh/sftp-server
Nowy wiersz:
1 Subsystem sftp sudo -n true && sudo -n /usr/lib/openssh/sftp-server || /usr/lib/openssh/sftp-server
Jak to działa:
sudo -n truesprawdza, czy użytkownik może wykonaćsudobez hasła (flaga-n= non-interactive).- Jeśli tak (
&&), serwer jest uruchamiany z uprawnieniamiroot. - Jeśli nie (
||), serwer jest uruchamiany ze zwykłymi uprawnieniami użytkownika.
Po edycji proszę zrestartować usługę SSH: sudo systemctl restart sshd.
Ważne: błąd w składni tego pliku całkowicie zamknie dostęp do serwera przez SSH. Przed edycją proszę upewnić się, że mają Państwo drugi terminal z aktywną sesją, jeśli coś pójdzie nie tak, będą mogli Państwo cofnąć zmiany. Proszę też zrobić kopię: cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.
Specyfika serwerów w chmurze (AWS EC2, DigitalOcean)
Obrazy Linuxa w chmurze często mają wstępnie ustawione konfiguracje sudoers, które mogą zarówno uprościć, jak i skomplikować zadanie.

AWS EC2 (Ubuntu):
Użytkownik ubuntu na obrazach Ubuntu 18.04 i nowszych często ma już potrzebne uprawnienia. Proszę sprawdzić plik /etc/sudoers.d/90-cloud-init-users, może już tam być wiersz:
1 ubuntu ALL=(ALL) NOPASSWD:ALL
Jeśli on istnieje, krok 2 można pominąć. W ustawieniach WinSCP proszę użyć polecenia sudo /usr/lib/openssh/sftp-server.
AWS EC2 (Amazon Linux):
Na Amazon Linux ścieżka do sftp-server jest inna: /usr/libexec/openssh/sftp-server. Błąd w jednej literze (lib zamiast libexec) da kod błędu 127 (Command not found) i natychmiastowe zerwanie połączenia.
DigitalOcean (Droplety Ubuntu):
Na standardowych dropletach DigitalOcean użytkownik root jest domyślnie włączony, ale dostęp jest tylko przez klucz SSH. Jeśli utworzyli Państwo osobnego użytkownika, konfiguracja sudoers jest analogiczna do zwykłego Ubuntu.
Ogólna porada dla chmury: przed wpisaniem ścieżki w WinSCP proszę sprawdzić obecność pliku na serwerze: ls -la /usr/lib/openssh/sftp-server (lub analogicznie dla Państwa dystrybucji).
⁉️🤔 Często zadawane pytania
Czy trzeba włączać bezpośrednie logowanie na root, aby WinSCP działał z sudo?
Nie. Cały sens opisanych metod to używanie zwykłego konta i tymczasowe podnoszenie uprawnień przez
sudo. Bezpośrednie logowanie naroot(PermitRootLogin yes) jest uważane za złą praktykę bezpieczeństwa: logi nie pokażą, który z administratorów wykonał daną czynność.
Dlaczego WinSCP wyświetla błąd „Command not found" po konfiguracji?
Najprawdopodobniej podano nieprawidłową ścieżkę do
sftp-server. W różnych dystrybucjach znajduje się on w/usr/lib/,/usr/lib/openssh/lub/usr/libexec/openssh/. Dokładną ścieżkę sprawdza się poleceniemcat /etc/ssh/sshd_config | grep Subsystemna serwerze.
Na ile bezpieczne jest NOPASSWD w sudoers?
To kompromis. Pełny dostęp
ALL=(ALL) NOPASSWD:ALLobniża ochronę: jeśli intruz uzyska dostęp do użytkownika, uzyska teżroot. Ograniczenie do konkretnego polecenia (/usr/lib/openssh/sftp-server) jest znacznie bezpieczniejsze: osoba postronna nie będzie mogła przez to konto uruchomić niczego poza serwerem SFTP.
Czy działa to z innymi klientami, FileZilla, Cyberduck?
Zasada jest taka sama, ale konfiguracja się różni. W FileZilla nie ma wygodnego pola na polecenie serwera SFTP w interfejsie graficznym, potrzebna będzie edycja pliku konfiguracyjnego. Cyberduck obsługuje opcję „SFTP Server" w ustawieniach połączenia, analogicznie do WinSCP. WinSCP wygrywa wygodą właśnie w tym scenariuszu.
Co zrobić, jeśli pliki są widoczne, ale nie można ich edytować?
Proszę sprawdzić właściciela i uprawnienia poleceniem
ls -lana serwerze. Jeśli skonfigurowali Państwo serwer SFTP przezsudo, ale połączenie spadło z powrotem do zwykłych uprawnień, oznacza to, żesudozażądał hasła i nie otrzymał odpowiedzi. Proszę jeszcze raz sprawdzić ustawienia NOPASSWD z kroku 2.
Czy można po prostu zmienić właściciela plików systemowych na swojego użytkownika?
To „brudne" obejście. Usługi systemowe oczekują, że ich konfiguracje należą do
root. Zmiana właściciela (chown) lub uprawnień (chmod) na plikach systemowych może uszkodzić serwisy. Lepiej poświęcić pięć minut na konfigurację sudo i pracować poprawnie.
Jaka jest różnica między SCP a SFTP w kontekście sudo?
SCP to po prostu kopiowanie przez SSH: łatwiej przejmuje powłokę, dlatego wystarczy mu polecenie
sudo su -w polu Shell. SFTP to pełnoprawny podsystem, działający jako osobny proces: dla niego potrzebny jest trik z podmianą pliku binarnego. SFTP jest szybszy i bardziej funkcjonalny, SCP jest prostszy w konfiguracji.
Czy działania są widoczne w logach podczas używania sudo przez WinSCP?
Tak. W
/var/log/auth.logbędzie zapis o tym, że użytkownikusernamepodniósł uprawnienia przezsudo. To plus: jeśli administratorów jest kilku, logi pokazują, kto dokładnie wykonał operację. W przypadku bezpośredniego logowania naroottakiej przejrzystości nie ma.
Co zrobić, jeśli sudo wymaga TTY, a WinSCP go nie dostarcza?
Proszę sprawdzić
/etc/sudoerspod kątem opcjiDefaults requiretty. Jeśli ona istnieje, proszę ją zakomentować (dodać#na początku wiersza) lub wyłączyć dla konkretnego użytkownika:Defaults:username !requiretty. Współczesne implementacjesudo-rsnie obsługują tej opcji, problem dotyczy tylko starych serwerów.
Czy można uruchomić SFTP w imieniu innego użytkownika, nie root?
Tak. Polecenie
sudo -u www-data /usr/lib/openssh/sftp-serveruruchomi sesję w imieniuwww-data, jest to wygodne, gdy trzeba edytować pliki witryny, nie dotykając katalogów systemowych. Uprawnienia w sudoers muszą w tym celu zawierać opcję-u:username ALL=(www-data) NOPASSWD: /usr/lib/openssh/sftp-server.
Ostateczny werdykt: którą metodę wybrać
Do codziennej pracy z serwerem optymalna jest pierwsza metoda, podmiana polecenia serwera SFTP w połączeniu z wąskim ustawieniem NOPASSWD tylko na sftp-server. Jest bezpieczna, nie narusza globalnych ustawień i działa na wszystkich współczesnych dystrybucjach.
- Jeśli mają Państwo Ubuntu / Debian i są gotowi poświęcić 5 minut na konfigurację, proszę wybrać Krok 1 + Krok 2 i nie wracać do tego tematu.
- Jeśli serwer jest stary i nie można znaleźć ścieżki do
sftp-server, proszę przełączyć się na SCP (Krok 3): wybacza on nieścisłości i działa praktycznie wszędzie. - Jeśli administrują Państwo kilkunastoma serwerami i chcą mieć jeden standard, proszę skonfigurować sshd_config (Krok 4) raz przez Ansible lub ręcznie, ale koniecznie z kopią zapasową.
Proszę zacząć od sprawdzenia: proszę zalogować się na serwer przez SSH i wykonać cat /etc/ssh/sshd_config | grep Subsystem. Za minutę będą już Państwo znać dokładną ścieżkę i pierwsza metoda zadziała za pierwszym razem. A jakiego sposobu przesyłania plików Państwo używają? Proszę podzielić się w komentarzach.



