Oregon 2026. április 18.

Root jogú fájlkezelés két szerver között Midnight Commanderrel

Gyakori adminisztrációs feladat, hogy két távoli szerver között kell fájlokat mozgatnunk. Amíg ezek a felhasználónk tulajdonában vannak, a Midnight Commander (MC) beépített Shell-link vagy SFTP funkciója tökéletesen teszi a dolgát. A probléma akkor kezdődik, ha olyan rendszerfájlokhoz kell nyúlnunk, amelyek a root tulajdonában vannak.

A korlátok

Bár az MC-t elindíthatjuk sudo mc-ként az egyik szerveren, ettől még másik szerveren (VFS rétegen keresztül) továbbra is csak a bejelentkezett felhasználó jogaival fogunk rendelkezni. Mivel a biztonsági ajánlások tiltják a közvetlen root SSH-bejelentkezést, patthelyzet alakul ki: nem tudjuk írni a távoli konfigokat, hiába van sudo jogunk mindkét gépen.

A megoldás: SSHFS és emelt szintű SFTP alrendszer

A megoldás lényege, hogy a távoli fájlrendszert SSHFS segítségével csatoljuk fel a helyi gépünkre, de úgy instruáljuk a protokollt, hogy a távoli oldalon az SFTP-kiszolgálót már eleve sudo-val futtassa.

1. Távoli oldal előkészítése

Ahhoz, hogy az SSHFS jelszókérés nélkül tudja emelni a jogosultságot, módosítanunk kell a távoli gépeken a sudoers fájlt. Hozzunk létre egy új fájlt a /etc/sudoers.d/ könyvtárban:

Bash

# Visudo használata erősen ajánlott, minden sudo jog szerkesztésnél
# sudo visudo -f /etc/sudoers.d/sshfs-root
felhasznalonev ALL=(root) NOPASSWD: /usr/lib/openssh/sftp-server

2. Kézi csatlakoztatás

A csatolás során az -o sftp_server kapcsolóval adjuk meg a módosított indítóparancsot:

Bash

mkdir -p ~/mnt/srv1
sshfs user@szerver1:/ ~/mnt/srv1 -o sftp_server="sudo /usr/lib/openssh/sftp-server" -o reconnect,ServerAliveInterval=15

Automatizálás szkripttel

Ha gyakran dolgozunk a két gép között, érdemes egy kis bash szkriptet írni, ami elvégzi a felcsatolást, megnyitja az MC-t a két megfelelő könyvtárban, majd kilépéskor lecsatolja a meghajtókat.

Bash

#!/usr/bin/env bash
set -euo pipefail

# Elérési utak definiálása
SRV1_MNT="$HOME/mnt/srv1"
SRV2_MNT="$HOME/mnt/srv2"

mkdir -p "$SRV1_MNT" "$SRV2_MNT"

# Csatlakoztatás, ha még nincsenek felcsatolva
mountpoint -q "$SRV1_MNT" || sshfs user@szerver1:/ "$SRV1_MNT" \
  -o sftp_server="sudo /usr/lib/openssh/sftp-server" \
  -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3

mountpoint -q "$SRV2_MNT" || sshfs user@szerver2:/ "$SRV2_MNT" \
  -o sftp_server="sudo /usr/lib/openssh/sftp-server" \
  -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3

# MC indítása a két panelen a két távoli eléréssel
mc "$SRV1_MNT" "$SRV2_MNT"

# Kilépés után takarítás (leválasztás)
fusermount -u "$SRV1_MNT" 2>/dev/null || true
fusermount -u "$SRV2_MNT" 2>/dev/null || true

Megfontolni valók

  • Hálózati forgalom: Ne felejtsük el, hogy az SSHFS transzparens módon működik. Ha a Szerver1-ről másolunk a Szerver2-re, az adatmennyiség először lejön a mi gépünkre, majd onnan megy fel a másik szerverre. Kisebb konfig fájloknál ez elhanyagolható, de több gigabájtos állományoknál használjunk inkább rsync-et.
  • Biztonság: A NOPASSWD beállítása biztonsági kockázatot jelenthet, ha a felhasználói fiókunk kompromittálódik. Csak olyan gépeken alkalmazzuk, ahol ez a kockázat kezelhető, vagy feladatunk végeztével vegyük vissza ezta jogosultságot.
  • Stabilitás: A reconnect és ServerAliveInterval opciók segítenek életben tartani a kapcsolatot instabilabb hálózat esetén is, megelőzve az MC lefagyását.

Ezzel a módszerrel végre visszakapjuk a jól megszokott kétpaneles kényelmet, anélkül, hogy a jogosultságokkal kellene bűvészkednünk a parancssorban.