Usuaris i grups a Linux

La comanda usermod -c -g -d -s a Linux: convertir un usuari en un compte només per a fitxers



Aquesta línia fa servir usermod per convertir un usuari normal en un compte només per a transferència de fitxers: li canvia la descripció, el grup primari, el directori personal i li treu la possibilitat d’obrir una sessió al terminal.

sudo usermod -c "Usuari de FTP" -g system -d /ftp/usuari1 -s /sbin/nologin usuari1

Peça a peça

PartQuè fa
sudoExecuta la comanda com a administrador
usermodModifica un compte que ja existeix
-c "Usuari de FTP"Canvia el comentari (camp GECOS) de /etc/passwd
-g systemCanvia el grup primari de l’usuari al grup system
-d /ftp/usuari1Canvia la ruta del directori personal
-s /sbin/nologinCanvia el shell d’inici per nologin, que no deixa obrir sessió
usuari1L’usuari que es modifica

Resultat

La línia de l’usuari a /etc/passwd quedarà així:

$ getent passwd usuari1
usuari1:x:1002:2001:Usuari de FTP:/ftp/usuari1:/sbin/nologin

Si l’usuari intenta entrar per consola o per SSH, veurà aquest missatge i la connexió es tancarà:

This account is currently not available.

Coses a tenir en compte

El grup system ha d’existir

Linux no té cap grup system de sèrie. Si no l’has creat abans, usermod s’atura amb un error i no aplica cap canvi:

usermod: group 'system' does not exist

Crea’l primer (millor amb un nom que digui per a què serveix):

sudo groupadd ftpusuaris

-d no crea ni mou el directori

-d només canvia la ruta que hi ha a /etc/passwd. Si /ftp/usuari1 no existeix, no es crea; i els fitxers de l’antic directori personal es queden on eren. Tens dues opcions:

# Moure-hi el contingut de l'antic directori personal
sudo mkdir -p /ftp
sudo usermod -d /ftp/usuari1 -m usuari1

# O crear-lo a mà, buit
sudo mkdir -p /ftp/usuari1
sudo chown usuari1:ftpusuaris /ftp/usuari1

Amb -m, el directori pare (/ftp) ha d’existir. Si no hi és, usermod mostra cannot rename directory /home/usuari1 to /ftp/usuari1, però sí que canvia la ruta a /etc/passwd: tornar a executar la comanda ja no mourà res, així que hauràs de moure el directori a mà (sudo mv /home/usuari1 /ftp/usuari1).

/sbin/nologin o /usr/sbin/nologin

A les distribucions actuals (Debian 12 i 13, Ubuntu, RHEL 9, Fedora) /sbin és un enllaç a /usr/sbin, de manera que totes dues rutes funcionen. La ruta «oficial» és /usr/sbin/nologin.

Alguns servidors FTP comproven el shell

Molts servidors FTP fan servir PAM, i si la seva configuració inclou el mòdul pam_shells, només deixen entrar els usuaris que tenen un shell llistat a /etc/shells. nologin no hi sol ser, de manera que l’usuari tampoc podria entrar per FTP. Revisa la configuració PAM del teu servidor (/etc/pam.d/vsftpd, per exemple) abans de donar-ho per bo.

La versió completa i corregida

sudo groupadd ftpusuaris
sudo mkdir -p /ftp
sudo usermod -c "Usuari de FTP" -g ftpusuaris -d /ftp/usuari1 -m -s /usr/sbin/nologin usuari1

I per comprovar-ho:

getent passwd usuari1
id usuari1
ls -ld /ftp/usuari1

I avui, millor SFTP

FTP envia les contrasenyes i les dades sense xifrar. Si l’objectiu és donar accés per pujar i baixar fitxers, avui és més recomanable SFTP, que funciona sobre SSH i no necessita cap servidor addicional. Amb OpenSSH pots restringir un grup d’usuaris a només SFTP i tancar-los dins del seu directori, afegint al final de /etc/ssh/sshd_config:

Match Group ftpusuaris
    ChrootDirectory /ftp/%u
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

Amb ForceCommand internal-sftp aquests usuaris no poden obrir un terminal encara que tinguin Bash com a shell. Compte: OpenSSH exigeix que el directori del ChrootDirectory (i tots els de sobre) sigui propietat de root i que no hi puguin escriure ni el grup ni la resta d’usuaris; l’usuari ha d’escriure en un subdirectori seu. Després reinicia el servei amb sudo systemctl restart ssh (a RHEL i Fedora, sshd).

Comandes relacionades