Hur man ändrar användardata med chfn och usermod på Linux

By rik

Ett användarkonto på ett operativsystem är mer än bara ett namn. Denna artikel utforskar hur du kan justera och modifiera all metadata som är kopplad till ett Linux-användarkonto, med hjälp av kommandoraden.

Vad döljer sig i ett namn?

Varje användare av ett Linux- eller Unix-liknande system har ett användarkonto. Användarkontots namn är det du använder för att logga in, samt namnet på din standardinloggningsgrupp och hemkatalog. Alla dessa använder samma identifikation.

Förutom användarnamnet kan ytterligare information kopplas till varje konto. Det kan vara personuppgifter såsom fullständigt namn, kontorsnummer och telefonnummer, eller annan valfri information.

Denna funktion är mest användbar för systemadministratörer som hanterar datorer med många användarkonton, men det är även intressant för enanvändarsystem för att få insikt i vad som sker under ytan.

GECOS-fältet: En återanvänd historia

I de tidiga dagarna av Unix, när skrivare inte var lättillgängliga, behövde användare skicka sina utskriftsjobb till en General Electric stordator som körde General Electric Comprehensive Operating System (GECOS). För detta behövde Unix-användarna lagra sina GECOS-autentiseringsuppgifter på sina system.

GECOS-fältet skapades just för detta ändamål. Nu, när detta behov inte längre finns, används GECOS-fältet för att lagra andra data relaterade till användarkontot. Trots ändamålet, kallas det fortfarande GECOS-fältet.

Detta fält finns i filen `/etc/passwd`, tillsammans med:

  • Användarnamnet för kontot.
  • Användar-ID.
  • Grupp-ID.
  • Sökväg till hemkatalogen.
  • Skalet som används vid inloggning.

Det är från denna information som kommandona finger och pinky hämtar den information de presenterar.

Kommandot `chfn`

Med kommandot `chfn` (change finger information) kan du justera och ändra informationen som lagras i GECOS-fältet. Informationen lagras som en kommaseparerad lista.

`chfn` finns förinstallerat på Ubuntu 18.04.1 och Manjaro 18.1.0, men på Fedora 31 behöver det installeras:

sudo dnf install util-linux-user

För att undersöka informationen om användaren ”dave”, använd kommandot `finger` med optionen `-l` (långt format):

finger dave -l

Initialt hittar vi:

Detta visar användarnamn, hemkatalog och standardskal, vilka hör till användarkontot och inte till den faktiska personen. Med `chfn` kan vi lägga till information om personen:

chfn dave

Detta startar en interaktiv process. Du ombeds mata in värden för varje del av GECOS-fältet. Det aktuella värdet visas inom hakparenteser `[]`. För att behålla nuvarande värde trycker du på Enter.

Vi anger följande:

  • Rumsnummer: 512
  • Arbetstelefon: 555-4567
  • Hemtelefon: 555-5432

Låt oss kontrollera `finger` igen:

finger dave -l

Den nya informationen syns. Vi kanske märkte att vi inte angav fullständigt namn. Detta kräver `sudo`, men vi kan enkelt ändra värden individuellt.

Ändra individuella datavärden

Vi kan ange fullständigt namn med option `-f` (full name), tillsammans med `sudo`:

sudo chfn -f "Dave McKay" dave

En ny kontroll med `finger` visar:

Det fullständiga namnet har nu lagts till.

Det finns andra options för att ändra rumsnummer, hem- och arbetstelefonnummer. För att ändra rumsnummer, använd `-r` (room number):

sudo chfn -r 633 dave

Vissa distributioner använder `-o` (office room number) istället för `-r`. För att se vilka options som finns på ditt system, använd:

man chfn

För att ändra arbetstelefonnummer, använd `-w` (work phone):

sudo chfn -w 555-1122 dave

Slutligen, för att ändra hemtelefonnummer använd option `-h` (home phone):

sudo chfn -h 555-6576 dave

Låt oss kontrollera `finger` igen:

finger dave -l

Alla ändringar har genomförts.

Använda `chfn` på andra konton

För att ändra informationen för andra användare krävs `sudo`, annars är det samma process. Låt oss kolla informationen för användaren `mary`:

finger mary -l

Standardinformationen är inställd. Låt oss lägga till ny information:

sudo chfn mary

Nu får vi genomgå samma interaktiva session som tidigare, och eftersom vi använder `sudo`, ombeds vi även om det fullständiga namnet:

Vad är ”Annat”?

Detta stöds inte av alla versioner av `chfn`, och syns bara med `sudo`. Tidigare när vi inte använde `sudo` med:

chfn dave

så såg vi inte det. Fältet ”Annat” kan innehålla valfri information.

Versioner av `chfn` som stöder ”Annat” erbjuder även `-o` (other) för att ändra värdet direkt. Just konflikten mellan `-o` för ”kontorsnummer” och `-o` för ”annat” gör att vissa system använder `-r` för ”rumsnummer”.

Vi kan se datan som lagras för `mary` i filen `/etc/passwd` genom att använda kommandot `less`:

less /etc/passwd

På system som stöder detta kan vi direkt justera ”annat”-fältet med `-o` (other):

sudo chfn -o "HTG Freelancer" dave

Vi kan sedan bekräfta med kommandot `less`:

less /etc/passwd

En fråga uppstår: om din version av `chfn` inte stöder ”Annat”, hur kan vi ändra det? Svaret är `usermod`.

Kommandot `usermod`

Med `usermod` kan du justera olika delar av ett användarkonto, till exempel lägga till eller ta bort användare från grupper, och ändra standardskal. Kommandot kan även direkt hantera GECOS-fältet.

Låt oss titta närmare på raden i `/etc/passwd` för användaren `mary`. Vi använder `grep` för att isolera den raden. Detta fungerar eftersom användarnamn måste vara unika:

grep mary /etc/passwd

Fälten i `/etc/passwd` visas. Kolon (`:`) används som avgränsare. Från vänster till höger är fälten:

  • Användarnamnet för kontot.
  • `x`, som visar att lösenordet lagras krypterat i `/etc/shadow`.
  • Användar-ID för `mary`.
  • Grupp-ID för `mary`.
  • GECOS-fältet.
  • Sökväg till hemkatalogen för `mary`.
  • Skalet som startas vid inloggning.

Kommaseparerade värden (` , `) i GECOS-fältet är, från vänster till höger:

  • Fullständigt namn.
  • Rumsnummer (eller kontor).
  • Arbetstelefonnummer.
  • Hemtelefonnummer.
  • Annan information.

Observera att `usermod` sätter hela GECOS-fältet till det nya värdet som anges. Om du bara anger fullständigt namn, så blir det enda värdet i GECOS-fältet just det fullständiga namnet. Alltså, du behöver ange alla värden du vill behålla.

Exempel: Mary har blivit befordrad och flyttar till fjärde våningen. Hennes nya kontor, jobbtelefonnummer och mellannamn läggs till. ”Annat”-värdet ändras också. Även om hemtelefonnumret inte ändras, måste det inkluderas i strängen till `usermod`:

Vi använder optionen `-c` (comment) och vi måste köra kommandot med `sudo`:

sudo usermod -c "Mary Carol Quinn,405,5559654,555-7704,Linux Advocate" mary

Med `grep` kan vi bekräfta ändringarna i `/etc/passwd` för `mary`:

grep mary /etc/passwd

Allt är i förändring

Felaktig information är inte till någon nytta. När uppgifter om personer ändras (kontorsflytt, namnändringar, osv.) kan du enkelt uppdatera deras metadata för att återspegla deras aktuella situation.