Herroep root-privileges op linux centos. Overschakelen naar superuser in de terminal. Leesmachtiging bestand

Zoals u weet, neemt Linux het beheren van gebruikers en het verlenen van rechten om met het systeem te werken zeer serieus. Een normale gebruiker kan alleen bestanden naar hun eigen directory en de /tmp/ directory schrijven. Het is ook mogelijk om sommige bestanden in het rootbestandssysteem te lezen. Maar u kunt geen programma's installeren omdat het schrijfrechten vereist, u kunt bestandskenmerken niet wijzigen, u kunt geen services starten, u kunt sommige logbestanden niet lezen en u kunt niet veel meer doen.

Op Linux kan alleen de rootgebruiker bestanden beheren en maken op het rootbestandssysteem.

In dit artikel zullen we bekijken welke programma's nodig zijn om rootrechten te krijgen. linux-gebruiker hoe ze werken, hoe een programma als root te draaien als een normale gebruiker, en hoe te draaien? grafische programma's met root-rechten. En ontdek ook wat sudo is, wat het verschil is tussen su en sudo.

Het is erg lang om op te sommen wat een gewone Linux-gebruiker niet kan, het is gemakkelijker om te zeggen waar hij recht op heeft, namelijk wanneer standaard instelling bestandspermissies in Linux, kan een normale gebruiker:

  • Lees, schrijf en wijzig bestandskenmerken in uw directory
  • Lezen, schrijven, wijzigen van bestandskenmerken in de /tmp-directory
  • Programma's uitvoeren waar het niet verboden is met de noexec-vlag
  • Lees bestanden waarvan de leesvlag is ingesteld voor alle gebruikers.

Als we iets meer moeten doen, hebben we linux root gebruikersrechten nodig. Root heeft het recht om alles op je bestandssysteem te doen, ongeacht de permissies die voor het bestand zijn ingesteld.

Superuser-login

Om als root in te loggen, kunt u overschakelen naar een van de virtuele consoles, bijvoorbeeld met de sneltoets Ctrl + Alt + F1 en vervolgens de root-login invoeren en root wachtwoord gebruiker.

Je krijgt een volledige rootomgeving met de mogelijkheid om alle acties uit te voeren, maar deze manier is erg onpraktisch, omdat je alle voordelen van het gebruik van een grafische interface verliest.

U kunt het tegenovergestelde doen, voer de root-login en het wachtwoord in de grafische login-manager in om de desktopomgeving te laten werken van stamnaam, en we krijgen alle rechten van root linux, maar deze optie wordt ten zeerste afgeraden, en erg gevaarlijk, je kunt per ongeluk het hele systeem beschadigen. Daarom is deze methode in veel login-managers uitgeschakeld.

Overschakelen naar superuser in terminal

Nu komen we bij iets interessanters en praktischer. Met behulp van speciale hulpprogramma's kunt u de huidige terminalemulator overschakelen naar de superuser-omgeving en alle volgende opdrachten niet namens u maar namens hem uitvoeren, waardoor het programma root-linux-rechten krijgt. Hier is een su-hulpprogramma voor. Over het algemeen kunt u met dit hulpprogramma niet alleen overschakelen naar: root gebruiker maar ook voor elke andere gebruiker, maar standaard wordt root gebruikt. Laten we het in meer detail bekijken. De opdracht su linux heeft de volgende syntaxis:

$ su opties gebruiker

Dit zijn de belangrijkste opties:

  • -c, --opdracht- commando uitvoeren
  • -g, --groep- stel de primaire groep van de gebruiker in (alleen voor root)
  • -G --supp-groep - extra groepen gebruiker (alleen voor root)
  • -, -l, --login- inlogmodus, alles wordt gewist en geïnitialiseerd met de nieuwe gebruiker in gedachten omgevingsvariabelen en ook de homedirectory gewijzigd
  • -p, --behoud-omgeving
  • -s, --shell- login-shell instellen
  • --versie- geef de versie van het programma weer.

Laten we nu een beetje experimenteren om te begrijpen hoe het su linux-commando werkt.

Laten we eerst su uitvoeren zonder opties, maar eerst zullen we een omgevingsvariabele maken om te controleren hoe deze opdracht ze behandelt:

Nu voeren we uit:

Laten we nu eens kijken wat er is gebeurd:

wie ben ik
$pwd
$ echo $VAR
$ echo $PATH
$exit

Uit deze commando's zien we dat we nu de root-gebruiker zijn, maar de directory van onze vorige gebruiker wordt beschouwd als de homedirectory en onze variabele is niet opgeslagen, de PATH-variabele is ook gewijzigd, nu is het / sbin-pad daar toegevoegd .

Nu gebruiken we de login-modus login:

En herhaal dezelfde combinatie:

wie ben ik
$pwd
$ echo $VAR
$ echo $PATH
$exit

Dezelfde situatie, alleen deze keer is de homedirectory ook gewijzigd in de rootdirectory. Maar we kunnen onze omgevingsvariabelen indien nodig opslaan, daar is een -p optie voor:

Zoals je kunt zien, is onze variabele gebleven. U kunt ook overschakelen naar een andere gebruiker. Bijvoorbeeld:

Het op deze manier verkrijgen van rootrechten wordt in veel distributies gebruikt, bijvoorbeeld Debian, OpenSUSE, ArchLInux, Gentoo, enz. Maar in Ubuntu, als distributie voor beginners, is rootaanmelding uitgeschakeld. Dit wordt gedaan omdat het ook niet erg veilig is, je kunt vergeten dat je een commando uitvoert als root en iets met het systeem doet. Dus laten we doorgaan naar het volgende programma.

Root-rechten verkrijgen zonder over te schakelen

Om de veiligste interface voor het werken met superuser-rechten in Linux te implementeren, is het sudo-commando ontwikkeld. Laten we eens kijken naar wat sudo is. Deze opdracht wordt geschreven vóór elke opdracht die namens de supergebruiker moet worden uitgevoerd, en voor de uitvoering ervan moet je het wachtwoord niet langer root invoeren, maar alleen je gebruiker. Net als de vorige heeft dit hulpprogramma zijn eigen opties. Laten we eerst naar de syntaxis kijken:

$ sudo opties commando

Programma opties:

  • -b- voer het gelanceerde hulpprogramma op de achtergrond uit
  • -E- bewaar omgevingsvariabelen
  • -g- opdracht uitvoeren vanuit groep
  • -H- gebruik thuismap
  • -l- toon een lijst met machtigingen in sudo voor de huidige gebruiker
  • -r- gebruik de SELinux-rol voor het commando
  • -s- gebruik shell
  • -u- voer de opdracht uit als gebruiker, zo niet, gebruik dan root
  • -i- voer het commando niet uit, maar voer een shell in, equivalent aan su -

U kunt dezelfde experimenten doen voor deze opdracht om te begrijpen hoe u de opdracht sudo gebruikt. Bijvoorbeeld:

Het gebruik van sudo is de aanbevolen manier om opdrachten als root op Linux uit te voeren. Zo vergeet u niet waar u mee te maken heeft en heeft u het minste risico op beschadiging van het systeem. Maar er is er nog een onopgeloste kwestie- hoe om te gaan met grafische hulpprogramma's? De opdracht sudo voert ze immers niet uit en het is niet veilig om een ​​grafische shell als root uit te voeren. Dit is wat we hierna zullen overwegen.

Grafische toepassingen als superuser

om te beginnen: grafische toepassingen als superuser bestaat speciale hulpprogramma's. Ze behouden alle noodzakelijke omgevingsvariabelen en machtigingen. In KDE is dit het kdesu-commando en in Gnome het gksu-commando.

Typ gewoon gksu of kdesu gevolgd door het gewenste commando:

Deze opdracht wordt uitgevoerd bestandsbeheer KDE met superuser-rechten. In Gnome ziet het er als volgt uit:

Het programma zal om een ​​wachtwoord vragen, al in het grafische venster, en dan wordt de bestandsbeheerder geopend.

bevindingen

Dat is alles. Nu weet je hoe je superuser-rechten kunt krijgen in Linux, je weet hoe je de opdracht sudo moet gebruiken en wat het verschil is tussen sudo en su. Nu zullen programma's die extra privileges in het systeem vereisen geen problemen veroorzaken. Als je vragen hebt, schrijf dan in de comments!

Hoe kan ik mijn privileges verhogen tot systeemprivileges in? Windows-wereld. Daar zijn, zo bleek, meer dan genoeg mogelijkheden voor. Welke u moet kiezen, hangt zowel van de situatie als van uw voorkeuren af. Zoals je echter begrijpt, moet je je krachten uitbreiden, niet alleen voor ramen, maar ook voor pinguïns. Wat zijn hier de mogelijkheden? Goed, laten we even kijken...

voorfase

Zoals je je herinnert (en zoals elke adequate beheerder zich zou moeten herinneren), wordt het werken in Linux als root sterk afgeraden. In een ideale wereld zou je het alleen moeten gebruiken voor serverconfiguratie, software-installatie en -updates en andere puur administratieve taken. Het probleem is dat we in een gewone wereld leven, die verre van ideaal is. Daarom komt deze situatie nog wel eens voor. Toegegeven, in de meeste gevallen puur door nalatigheid, omdat het historisch zo was dat Linux-gebruikers moesten uitzoeken hoe hun besturingssysteem werkt. En zelfs als je het systeem en zijn beveiligingsmechanismen een beetje begrijpt, zit je niet langer onder de wortel. Daarom zullen we vandaag, in tegenstelling tot Windows, waar we het hadden over het verkrijgen van systeemrechten van onder de beheerder, alleen opties overwegen voor het escaleren van privileges van een onbevoegde gebruiker naar root. Dus laten we beginnen.

exploits

Alle methoden voor het verkrijgen van superuser-rechten in Linux kunnen worden onderverdeeld in twee categorieën. De eerste is alleen het gebruik van exploits. In tegenstelling tot Windows, met zijn mechanisme automatische installatie updates, moeten Penguin-volgers vooral de releases en installatie van patches bijhouden. In dit opzicht is de kans op het vinden van een niet-gepatcht systeem onder Linux-machines veel groter. Wat zijn de voordelen deze methode kan worden geïdentificeerd? Om te beginnen gebruiken de meeste exploits kwetsbaarheden in de OS-kernel, waardoor je maximale privileges kunt krijgen. Het vinden van een geschikte exploitcode is niet zo moeilijk, en u kent waarschijnlijk een aantal bronnen. Bovendien hoeft u, om een ​​sploit te gebruiken, soms niet alle fijne kneepjes van het misbruikte beveiligingslek te begrijpen - u hoeft het alleen maar correct te compileren en uit te voeren (soms moet u het echter een beetje aanpassen, maar vaak zal alles werken zonder het aan te passen met een bestand). BIJ algemeen beeld het algoritme van acties is als volgt:

  1. Bepaal de versie van de kernel en de distributie.
  2. Krijg een lijst beschikbare tools om de spleet te monteren.
  3. Lever een sploit aan de doelmachine.
  4. Compileren (indien nodig) en uitvoeren.
  5. Geniet van de ontvangen wortel.

Welnu, nu over elke stap in meer detail.

Identificatie

Afgaande op het plan, moeten we eerst uitzoeken waar we in het algemeen zijn beland, wat voor soort distro we gebruiken en wat de versie van de kernel is. De kernelversie kan worden opgehaald met het bekende uname -a commando of zijn analogen. Om informatie te krijgen over de gebruikte distributiekit, moet u kijken naar het *-release-bestand in de etc-directory (afhankelijk van de distributie kan het anders worden genoemd: lsb-release in Ubuntu, redhat-release in rode Hoed/ CentOS enzovoort):
cat /etc/*-release

Als u de distributiekit en de kernelversie kent, kunt u de tweede stap doen - een geschikte "hoofdsleutel" vinden.

Een exploit vinden

Zodra alle de nodige informatie zal zijn, wordt het tijd om naar een geschikte exploit te zoeken. Het eerste dat in je opkomt is exploit-db.com, maar er zijn alternatieven: 1337day , SecuriTeam , ExploitSearch , Metasploit , securityreason , seclists . Uiteindelijk is er Google, hij weet absoluut meer dan wie dan ook over sploits. Een beetje vooruitkijkend, zeg ik: soms, om de een of andere reden, werkt de "hoofdsleutel" misschien niet, of moet deze enigszins worden aangepast aan bepaalde omstandigheden of uw behoeften, dat wil zeggen, ga er met een bestand doorheen. In dat geval kan het geen kwaad om meer over haar te weten te komen. Extra informatie, die kan worden afgeleid uit een van de volgende bronnen:
www.cvedetails.com
packetstormsecurity.org
cv.mitre.org

Laten we zeggen dat je een geschikte exploit vindt die je toegang geeft tot de wereld van root. Het blijft alleen om het op de een of andere manier naar de auto te vervoeren.

Levering aan huis

Om een ​​sploit op zijn plaats te brengen, zijn er nogal wat manieren, van de bekende cURL / wget, Netcat, FTP, SCP / SFTP, SMB tot het gebruik van DNS TXT-records. Om erachter te komen welke van deze tools we hebben, voeren we het volgende uit:

Find / -name wget find / -name nc* find / -name netcat* find / -name tftp* find / -name ftp

Laten we zeggen dat we Netcat hebben gevonden. Om een ​​bestand over te zetten aan de ontvangende kant, voer je uit:
nc -l -p 1234 > uit.bestand

Dat wil zeggen, we luisteren naar poort 1234. Op de afzender doen we het volgende:
nc -w 3 1234< out.file

Als de overdracht van *nix . is op een *nix-systeem, dat wil zeggen, daar en daar standaard hulpprogramma's, kunt u compressie gebruiken om het overdrachtsproces te versnellen. In dit geval zien de opdrachten er als volgt uit:

Nc -l -p 1234 | decomprimeer -c | tar xvfp - // om tar cfp te krijgen - /some/dir | comprimeren -c | nc -w 3 1234 // om te verzenden

De overige opties zijn nog eenvoudiger, dus we zullen het gebruik van wget, FTP en andere bekende methoden buiten beschouwing laten.

verstoppertje

Nou, hoe te leveren, bedacht. Maar hoe kun je niet in slaap vallen? Als uw splot wordt ontdekt, zorg er dan voor dat de maas in de wet snel wordt gedicht. Je moet het dus plaatsen, compileren en uitvoeren vanaf een onopvallende plek. In Linux zijn mappen die beginnen met een punt (bijv. .secret_folder) verborgen. Daarom zou het logisch zijn om ze te gebruiken om hun activiteit te verbergen. Plaats er bijvoorbeeld de exploitcode in: /tmp/.nothingthere/exploit.c . Toegegeven, in dit geval moet je er eerst voor zorgen dat tmp is gemount zonder de noexec-optie en dat je de geassembleerde sploit ervan kunt uitvoeren (gebruik hiervoor het mount-commando).

Bouw en run een sploit

Nadat we de sploit hebben geleverd en ingezet, moet deze worden geassembleerd/geconfigureerd. In de regel worden sploits geschreven in C of in een van de Python/Perl/PHP scripttalen. Gewone lezers ][ weten dat het niet de beste is om een ​​compiler op je server te laten staan De beste beslissing, dus het is meestal uitgesneden. Als je vraag over de compilerversie gcc -v bash zweert gcc: command niet gevonden, dan heb je "geluk" en moet je er omheen. Dat wil zeggen, zoek een sploit in python, perl of iets anders, of compileer het op virtuele machine met hetzelfde besturingssysteem en dezelfde kernelversie. Verplaats vervolgens het resulterende uitvoerbare bestand naar de doelhost (hoewel deze methode geen honderd procent werk garandeert, kan het systeem crashen en crashen, dus wees hier voorzichtiger). Echter, zoals de praktijk leert, moet er nog een tolk voor een van de genoemde talen in het systeem aanwezig zijn. We moeten dus niet meteen opgeven, in plaats daarvan checken we alle opties:

Find / -name perl* find / -name python* find / -name gcc* find / -name cc

Als dit lukt, hoeft u alleen de gecompileerde exploit uit te voeren en van de promotie te genieten. Nou, of om te begrijpen waarom het niet werkte, wat een geluk.

Anti-splot

Het is moeilijk om hier enkele innovatieve recepten te bedenken. Alles is al lang bekend. U hoeft alleen op tijd patches te installeren. Dit is de eerste. De tweede is om de plaatsen te beperken waar u bestanden voor uitvoering kunt uitvoeren (de tmp-map moet deze mogelijkheid zeker worden ontnomen). Wel, pas een soort beveiligingsoplossing toe, bijvoorbeeld grsecurity .

Machtigingen, bestanden, paden en configuraties

De tweede categorie die bij privilege-escalatie kan worden onderscheiden, zijn methoden die niet gerelateerd zijn aan het gebruik van exploits, maar zijn gebaseerd op het zoeken naar bestanden met onjuist ingestelde rechten. Hier, net als in het geval van Windows, zijn er trucs, maar eigenlijk is het nog steeds hetzelfde werk van het verzamelen en analyseren van gegevens. Meestal is het eerste wat u moet doen, zoeken naar bestanden die voor iedereen beschikbaar zijn om te lezen en te schrijven:
zoek / -perm 2 ! -type l -ls

Er kunnen er nogal wat zijn, en onder hen kun je iets interessants vinden: configuratiebestanden, site/toepassingsbronnen, scripts die worden uitgevoerd door init of cron. In principe is de situatie dat een bestand voor iedereen beschikbaar is om te lezen en te schrijven een normaal verschijnsel. Er ontstaan ​​problemen wanneer gebruikers/beheerders/scripts gedachteloos permissies veranderen. Dus als je permissies wijzigt, probeer dan het gebruik van chmod 777 te vermijden. Wel, voer periodieke audits uit om belangrijke bestanden waren niet voor iedereen beschikbaar.

setid + setgid

Zoals de documentatie zegt, zijn setuid en setgid toestemmingsvlaggen waarmee uitvoerbare bestanden kunnen worden uitgevoerd met de rechten van de eigenaar of groep van het uitvoerbare bestand (meestal root). Deze uitvoerbare bestanden, uitgevoerd met verhoogde bevoegdheden, hebben toegang tot meer bevoorrechte informatie. Als bijvoorbeeld setuid is ingesteld op het ls-commando, kunt u de inhoud bekijken van mappen waartoe u aanvankelijk de toegang werd geweigerd. En in het geval van vim - om de configuratiebestanden te bewerken waarin hij daarvoor niet het recht had om te kijken.

Dienovereenkomstig, als toepassingen met de setuid/setgid-vlagset kwetsbaarheden bevatten zoals bufferoverloop of opdrachtinjectie, kan een aanvaller willekeurige code uitvoeren met verhoogde bevoegdheden. Dus volgende optie zoek meestal naar uitvoerbare bestanden met de gegeven vlaggen.
sudo find / -xdev \(-perm 4000\) -type f -print0 -exec ls -s () \;

In principe kan het zonder sudo, dit is alleen nodig om directory's te controleren waar je geen toegang toe hebt.

Er zijn meestal drie opties voor verder gebruik van dergelijke uitvoerbare bestanden. De eerste is om te proberen privileges te verhogen op basis van de functionaliteit die door deze applicatie wordt geboden (of beter gezegd, bedenk je eigen manier ongebruikelijk gebruik deze functionaliteit). De tweede optie is om een ​​openbare splitsing te vinden of een onafhankelijke fuzzing uit te voeren om bugs te identificeren. De derde is commando-injectie. Er is geen universeel recept, het hangt allemaal af van de situatie.

SUDO

Met de opdracht sudo (gebruiker vervangen en doen), wat letterlijk betekent "gebruiker vervangen en doen", kunt u bepaalde bevoorrechte bronnen delegeren aan gebruikers met logboekregistratie van werk. Dat wil zeggen, het biedt gebruikers de mogelijkheid om commando's uit te voeren als root (of andere gebruikers) met hun eigen wachtwoord, en niet het root-wachtwoord. De regels voor het nemen van toegangsbeslissingen staan ​​in het bestand /etc/sudoers. Meer informatie over het formaat van dit bestand en het instellen van de regels vind je in de officiële handleiding of Wikipedia. Ik wil alleen zeggen dat dit bestand ook zorgvuldig moet worden gecontroleerd. Omdat het vaak voorkomt dat sommige applicaties het tijdens de installatie wijzigen, en bovendien niet in betere kant. Als gevolg hiervan hebben gebruikers de mogelijkheid om hun privileges te verhogen (post op Offensive security, die over een dergelijk geval vertelt).

PAD

Net als in Windows, zullen in Linux onjuist geconfigureerde paden ook helpen om uw privileges te verhogen. Dit gebeurt meestal met de PATH-omgevingsvariabele (gebruik printenv om deze te bekijken). Gekeken? Geweldig, zeg nu: wat als de PATH-omgevingsvariabele begint met. (.:/bin:/usr/sbin ....)? Dit wordt meestal gedaan door gebruikers die geen twee willen bellen extra karakters, dat wil zeggen, ze willen het commando als volgt aanroepen: $ program in plaats van $ ./program . Aanvulling. in PATH betekent de mogelijkheid om bestanden/scripts uit de werkdirectory uit te voeren. Je kunt het als volgt toevoegen:

PATH=.:$(PATH) export PATH

Laten we ons nu voorstellen dat we twee gebruikers hebben: Joe (de aanvaller) en Bob. Joe weet dat Bob sudo-rechten heeft om gebruikerswachtwoorden te wijzigen, inclusief rootwachtwoorden. Ook is Bob lui en toegevoegd. naar de PATH-omgevingsvariabele. Sly Joe schrijft een programma dat het root-wachtwoord verandert, noemt het ls en plaatst het in een map waar Bob graag kijkt. Nu, wanneer de laatste de map binnengaat en de inhoud ervan wil zien, zal het programma dat Joe schreef worden uitgevoerd en het root-wachtwoord worden gewijzigd. Daarom controleren we altijd de omgevingsvariabelen op de aanwezigheid van interessante dingen en trekken we voor onszelf de volgende conclusies:

  1. Wij gebruiken nooit. in de PATH-variabele.
  2. Als de stip er nog steeds is, plaats dan volgende regel in .bashrc of .profile:
    PATH= echo $PATH | sed -e "s/::/:/g; s/:.:/:/g; s/:.$//; s/^://"

instrumenten

Zoeken automatiseren zwakke punten u kunt de volgende hulpmiddelen gebruiken:

1. LinEnum is een bash-script dat al het vuile werk voor je zal doen, door alle controles uit te voeren die in deze spiekbrief worden beschreven. In totaal in zijn arsenaal ongeveer 65 verschillende controles, variërend van het verkrijgen van informatie over de kernelversie tot het vinden van potentieel interessante SUID/GUID-bestanden. Bovendien kan het script worden doorgegeven trefwoord, waarnaar het zal zoeken in alle configuratie- en logbestanden. De controle wordt als volgt gestart: ./LinEnum.sh -k trefwoord -r rapport -e /tmp/ -t . Nadat de scan is voltooid, krijgt u een redelijk gedetailleerd rapport, de meeste interessante plaatsen die in het geel wordt gemarkeerd.
2. LinuxPrivChecker - Een Python-script dat ook van pas zal komen bij het zoeken naar mogelijke opties voor escalatie van bevoegdheden. Over het algemeen voert het dezelfde standaarddingen uit: privileges controleren, informatie over het systeem krijgen ... Maar het belangrijkste kenmerk is dat het u na voltooiing van de controle een lijst met exploits zal bieden die, naar zijn mening, zullen helpen privileges verhogen. Zo'n goede vent :).
3. unix-privesc-check - met dit script kun je zoeken naar opties voor het pompen van privileges, niet alleen in Linux, maar ook in Solaris, HPUX, FreeBSD. Het probeert configuratiefouten te detecteren waardoor een onbevoegde gebruiker in het systeem kan klimmen.
4. g0tmi1k's Blog - en dit is een blog die alle controles beschrijft die worden uitgevoerd door de drie genoemde tools. Ik raad je dan ook ten zeerste aan daar eens te kijken en kennis te maken om je voor te stellen hoe deze tools “van binnenuit” werken.



LinuxPrivChecker bevat: grote lijst exploits, die voortdurend wordt bijgewerkt met de Exploit Database

Nawoord

Zoals je kunt zien, is escalatie van bevoegdheden in de wereld van Linux ook heel gewoon. Het geheim van succes is simpel: om je doel te bereiken, moet je geduld hebben en weten waar je moet zoeken en waar je moet zoeken. Waar je moet zoeken, nu weet je ook welke hulpprogramma's je moet gebruiken voor automatisering, dus nu kun je niet alleen het win-, maar ook het nix-systeem veroveren. Durven!

|

Linux is een besturingssysteem voor meerdere gebruikers dat het Unix-concept van privileges gebruikt om beveiliging op niveau te bieden. bestandssysteem. Bij het werken met Linux is het erg belangrijk om te begrijpen wat permissies en eigendom zijn. Dit artikel helpt u de basisconcepten met betrekking tot Linux-gebruikersprivileges te begrijpen.

Voorwaarden

  • Basis Linux-vaardigheden.
  • Linux-server (optioneel).

Linux-gebruikers

Omdat Linux een systeem voor meerdere gebruikers is, is het belangrijk om te begrijpen hoe gebruikers en groepen werken. Laten we deze concepten in meer detail bekijken.

Er zijn twee soorten gebruikers in Linux: systeem en normaal. Systeemgebruikers zijn bedoeld om niet-interactieve en achtergrondprocessen, en gewone gebruikers zijn verantwoordelijk voor het uitvoeren van interactieve taken. Wanneer u zich voor de eerste keer aanmeldt bij Linux, merkt u misschien dat het veel opstart systeem gebruikers, die op hun beurt verschillende services uitvoeren waarvan het systeem afhankelijk is.

Controleer het bestand /etc/passwd om alle gebruikers op het systeem te zien. Elke regel in dit bestand bevat gegevens over een individuele gebruiker, te beginnen met de gebruikersnaam (vóór de eerste dubbele punt). Om de inhoud van een bestand op het scherm weer te geven, typt u:

Super gebruiker

Naast de twee belangrijkste soorten gebruikers in Linux, is er ook een superuser of root. Deze gebruiker kan de rechten van andere gebruikers op bestanden overschrijven en de toegang beperken. In wezen heeft de supergebruiker toegangsrechten tot alle bestanden die op de server staan. Deze gebruiker heeft het recht om systeembrede wijzigingen aan te brengen, omdat zijn beveiliging erg belangrijk is voor de beveiliging van de server zelf.

U kunt ook andere gebruikers configureren om superuser-privileges uit te voeren. Om dit te doen, moet u een normale gebruiker toegang geven tot het sudo-commando. In het dagelijkse werk van een serverbeheerder wordt aanbevolen om juist zo'n account met uitgebreide privileges te gebruiken, aangezien root gebruiken op permanente basis is gevaarlijk en kan het systeem vernietigen.

Linux-groepen

Groepen zijn verzamelingen van 0 of meer gebruikers. De gebruiker behoort tot de standaardgroep en kan ook lid zijn van een van de andere groepen.

Om alle beschikbare groepen en lijsten van hun leden te bekijken, opent u het bestand /etc/group.

Bestandseigendom en toegangsrechten

Op Linux is elk bestand eigendom van één gebruiker en één groep en heeft: individuele instellingen toegang.

De opdracht ls wordt gebruikt om de machtigingen te bekijken. Het heeft een lange lijst met opties (bijv. ls -l mijnbestand). Om de instellingen voor bestandstoegang in de huidige map te bekijken, voert u de opdracht uit zonder argumenten:

Om de inhoud van de /etc directory op te vragen, typt u:

De eerste kolom van de uitvoer geeft de toegangsmodus van het bestand aan, de tweede en derde kolom bevatten de gebruikersnaam en groep, de vierde kolom bevat de grootte van het bestand en de vijfde kolom bevat de datum. laatste wijziging, de laatste kolom is de bestandsnaam.

Over het algemeen is de uitvoer van het ls-commando vrij eenvoudig te begrijpen, behalve misschien voor de eerste kolom, die bestandspermissies beschrijft. Het ziet er ongeveer zo uit:

drwxrwxrwx
drwxrwx---
-rw-rw----
teken------
-rw-------

Laten we, om te begrijpen wat deze letters en koppeltekens betekenen, de inhoud van een kolom in zijn componenten verdelen. De eerste regel van het bovenstaande voorbeeld kan worden onderverdeeld in de volgende categorieën:

rwx(1) rwx(2) rwx(3)

  • d – bestandstype veld.
  • rwx(1) - de rechten van de gebruiker die eigenaar is van het bestand.
  • rwx(2) - permissies van de eigenaarsgroep.
  • rwx(3) - rechten van andere gebruikers.

Bestand types

Er zijn twee hoofdtypen bestanden in Linux: normaal en speciaal.

Normale bestanden worden geïdentificeerd door een koppelteken in het typeveld. Gewone bestanden zijn eenvoudige bestanden waarin gegevens kunnen worden opgeslagen.

Een bestand is bijzonder als het typeveld een letter bevat. Dergelijke bestanden worden verwerkt besturingssysteem anders dan normale bestanden. Het symbool in het veld bestandstype geeft aan welke soort speciale bestanden is van toepassing specifiek bestand. Het meest voorkomende soort speciaal bestand is een directory (of directory) en wordt aangeduid met het symbool d (zoals in het bovenstaande voorbeeld). BIJ Linux-systeem Er zijn verschillende soorten speciale bestanden, maar: dit onderwerp valt buiten het bestek van dit artikel.

Toegang tot lessen

Zoals eerder vermeld, heeft elk bestand instellingen voor: drie categorieën(of klassen) toegang:

  1. gebruiker - de eigenaar van het bestand;
  2. group - de eigenaar van het bestand (deze klasse omvat alle leden van de groep waarvan de gebruiker - de eigenaar van het bestand lid is);
  3. en andere gebruikers (deze klasse omvat alle gebruikers die niet tot de vorige klassen behoren).

Deze volgorde van privileges wordt gevolgd door alle Linux-distributies.

Soorten toegang

  • r (lezen) - het recht om het bestand te lezen,
  • w (schrijven) - het recht om te wijzigen (bewerken),
  • x (uitvoeren) - het recht om uit te voeren (in sommige speciale gevallen kan een ander teken worden gebruikt in plaats van x).

Als er een koppelteken is in plaats van een teken, dan gegeven klasse niet over de juiste toegangsrechten beschikt. Bijvoorbeeld:

In dit geval hebben de gebruiker en de groep die eigenaar zijn van het bestand alle toegangsrechten en is de toegang tot het bestand volledig afgesloten voor andere gebruikers.

Laten we eens nader bekijken wat elk type toegang precies geeft.

Opmerking: Om normale toegang tot bestanden en directory's te bieden, worden toegangstypes vaak in combinatie met elkaar gebruikt.

Leesmachtiging bestand

Het recht om een ​​regulier bestand te lezen is de mogelijkheid om de inhoud ervan te bekijken.

Het leesrecht op een map stelt de gebruiker in staat om de namen van de bestanden die erin zijn opgeslagen te bekijken.

Het recht om een ​​bestand te wijzigen

In het geval van een regulier bestand geeft dit recht de gebruiker de mogelijkheid om de inhoud van het bestand te wijzigen of te verwijderen.

Als een gebruiker het recht heeft om een ​​map te wijzigen, kan die gebruiker de map verwijderen, de inhoud ervan wijzigen (dat wil zeggen bestanden erin maken, hernoemen of verwijderen) en de inhoud van de bestanden die erin zijn opgeslagen.

Start rechts

Met dit recht kan de gebruiker een normaal bestand draaien, maar hiervoor heeft hij ook leesrechten nodig gegeven bestand. Startrechten moeten zijn ingesteld op uitvoerbare programma's en shellscripts.

Als de gebruiker het recht heeft om een ​​directory te starten, kan hij een dergelijke directory lezen en toegang krijgen tot de metadata over de opgeslagen bestanden.

Privilege-voorbeelden

Laten we nu eens kijken naar enkele nuttige algemene voorbeelden van bestandspermissies.

  • -rw——-: Alleen de gebruiker die eigenaar is van het bestand heeft toegang tot het bestand.
  • -rwxr-xr-x: elke gebruiker op het systeem kan zo'n bestand uitvoeren.
  • -rw-rw-rw-: elke gebruiker van het systeem heeft het recht om een ​​dergelijk bestand te wijzigen.
  • drwxr-xr-x: Elke systeemgebruiker kan deze map lezen.
  • drwxrwx—: De inhoud van de directory kan alleen worden gelezen en gewijzigd door de gebruiker en de eigenaar van de groep.

Zoals u kunt zien, heeft de gebruiker die eigenaar is van het bestand doorgaans alle rechten op het bestand (of op zijn minst meer rechten dan de rest van de klassen). Om veiligheidsredenen zouden bestanden alleen beschikbaar moeten zijn voor die gebruikers die er om een ​​specifieke reden toegang toe nodig hebben.

Er zijn veel combinaties van machtigingen, maar slechts enkele zijn in elk geval nuttig. Wijzig- en uitvoeringsrechten worden bijvoorbeeld bijna altijd gecombineerd met leesrechten op een bestand, omdat het bestand moeilijk te wijzigen is en niet kan worden uitgevoerd zonder leesrechten.

Opmerking: lees voor meer informatie over het wijzigen van machtigingen. Het gaat over het gebruik van de opdrachten chown, chgrp en chmod.

Conclusie

U bent nu bekend met de basisconcepten van machtigingen en eigendom in een Linux-omgeving.

Trefwoorden:

1. Met het commando: su

Veel commando's kunnen alleen door de superuser worden uitgevoerd, dus we moeten weten hoe we root kunnen worden. Om dit te doen, kunnen we het commando gebruiken: su (wijzig gebruiker). De opdracht su accepteert de volgende formaten:

maar meestal zullen we gebruiken zo een gebruiker worden wortel:

Zo - wortel

als de gebruikersnaam niet is opgegeven in de regel, wordt automatisch de rootgebruiker aangenomen, dus het commando kan worden ingekort:

maar beide commando's gedragen zich anders. "su" geeft huidige gebruiker de identiteit, terwijl "su - " de huidige gebruiker de identiteit geeft samen met de omgeving die zou worden verkregen door in te loggen als.

Vaak gebruiken gebruikers "su" om over te schakelen naar root. Als u een opdracht probeert uit te voeren (bijvoorbeeld - ifconfig), krijgt u de foutmelding "opdracht niet gevonden".

Su Wachtwoord: ifconfig bash: ifconfig: opdracht niet gevonden

De reden is dat normale systeemgebruikers en de rootgebruiker verschillende PATH-omgevingsvariabelen hebben (je kunt het PATH van de gebruiker opzoeken met "echo $PATH"). Na het typen van een Linux-commando zal de shell in het PATH van de gebruiker zoeken om een Het begint met het doorzoeken van elke map in PATH totdat het doel is gevonden.

Gewone gebruikerscommando's bevinden zich meestal in /usr/local/bin, /usr/bin en /bin. En de root-gebruikerscommando's bevinden zich voornamelijk in /usr/local/sbin, /usr/sbin, /sbin en het root-PATH weerspiegelt dit. Dus als je superuser wordt met "su -", accepteer je ook nieuwe manier PATH naar basiscommando's. En door alleen "su" te gebruiken, wordt het PATH-pad van de gebruiker standaard opgeslagen. Wanneer u daarom een ​​programma probeert uit te voeren dat zich in /usr/local/sbin, /usr/sbin, /sbin bevindt, is het resultaat: "opdracht niet gevonden " fout. Voor een meer gedetailleerde uitleg, zie de man-pagina (man bash), vooral de login-shells-sectie.

Dus je moet ofwel specificeren: vol pad naar een commando (voorbeeld - /sbin/ifconfig) als je "su" gebruikt, of gebruik "su -" als je root wordt.

2. Sudo gebruiken

U hoeft niet elke keer root te zijn als u bepaalde specifieke beheerfuncties wilt uitvoeren. Dankzij sudo, kunt u sommige of alle opdrachten als root uitvoeren. Wanneer sudo geïnstalleerd (pakket: sudo), kunt u het configureren met het "visudo"-commando als root. Het bewerkt in feite (standaard Vim) /etc/sudoers, maar het wordt niet aanbevolen om het handmatig te doen.

Alex ALL=(ALL)ALL

Alex is de gebruikersnaam. Opslaan (druk op escape en typ wq) en je bent klaar. Log in als alex en voer bijvoorbeeld uit:

$sudo yum update

Sudo zal om een ​​wachtwoord vragen. Dit is het wachtwoord van Alex, niet de rootgebruiker. Wees dus voorzichtig wanneer u gebruikersrechten geeft met sudo.

Maar Sudo kan meer dan dat alleen. We kunnen een gebruiker of een groep gebruikers toestaan ​​om slechts één opdracht of groep opdrachten uit te voeren. Laten we teruggaan naar ons sudoers-bestand. Laten we beginnen met alex en alisa, leden van de beheerdersgroep. Als we willen dat alle gebruikers in de "administrator"-groep elk commando als root kunnen uitvoeren, moeten we ons voorbeeld wijzigen:

%admin ALL=(ALL)ALL

Alex kan ook een superuser-commando uitvoeren en alisa krijgt het recht om sudo uit te voeren, met dezelfde rechten en met haar wachtwoord. Als alex en alisa geen lid zijn van dezelfde groep, kunnen we de alias van de gebruiker definiëren in het sudoers-bestand:

User_Alias ​​​​ADMINS = alisa,alex

Hier hebben we een alias gedefinieerd met de naam ADMINS, met leden alisa en alex.

We willen echter niet dat alex en alisa elk programma als root kunnen draaien. We willen dat ze alleen "updatedb" kunnen uitvoeren. Laten we de opdrachtalias definiëren:

Cmnd_Alias ​​LOCATE=/usr/sbin/updatedb

Maar dit is niet genoeg! We moeten Sudo vertellen dat gebruikers die als ADMINS zijn gedefinieerd, de opdrachten in LOCATE kunnen uitvoeren. Om dit te doen, zullen we de regels met "%admin" vervangen door deze:

ALLE BEHEERDERS = LOCATIE

Dit betekent dat gebruikers in de ADMINS-alias alle opdrachten in de LOCATE-alias kunnen uitvoeren.

Deze keer ziet /etc/sudoers er als volgt uit:

User_Alias ​​ADMINS=alisa, alex Cmnd_Alias ​​LOCATE=/usr/bin/updatedb ADMINS ALL=LOCATE

Als resultaat kunnen alex en alisa updatedb als root uitvoeren door hun wachtwoord in te voeren.

Als de laatste regel in het bestand is gewijzigd:

ALLE BEHEERDERS = NOPASSWD:LOCATE

dan kunnen alex en alisa "sudo updatedb" zonder een wachtwoord in te voeren.

U kunt andere opdrachten aan een opdrachtalias toevoegen en meer aliassen aan een regel. We kunnen bijvoorbeeld een alias NETWORKING maken met daarin enkele netwerk commando's zoals: ifconfig, route of iwconfig:

Cmnd_Alias ​​NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhcclient, /usr/bin/net, sbin/iptables, /usr/bin/rfcom, /usr/bin/wvdial, /sbin /iwconfig, /sbin/mii-tool

Laten we dit alles toevoegen aan ons bestand /etc/sudoers (met behulp van visudo!). We zullen onze ADMINS-groep ook de rechten verlenen om programma's uit te voeren vanaf de NETWORKING-alias:

User_Alias ​​ADMINS = alice, bob Cmnd_Alias ​​​​LOCATE = /usr/bin/updatedb Cmnd_Alias ​​​​NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net , /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool ALLE BEHEERDERS = LOCATE, NETWORKING

Kleine proef: log in als alisa (of alex) en typ:

$ping -c 10 -i localhost

Het antwoord zou snel terug moeten komen:

PING localhost.localdomain (127.0.0.1) 56(84) bytes aan gegevens. ping: kan niet overstromen; minimale interval, toegestaan ​​voor gebruiker, is 200ms

Nu hetzelfde, maar met Sudo:

$sudo ping -c 10 -i 0 localhost PING localhost.localdomain (127.0.0.1) 56(84) bytes aan gegevens. 64 bytes van localhost.localdomain (127.0.0.1): icmp_seq=1 ttl=64 tijd=0.049 ms (127.0.0.1): icmp_seq=3 ttl=64 tijd=0.021 ms 64 bytes van localhost.localdomain (127.0.0.1): icmp_seq=4 ttl=64 tijd=0.030 ms 64 bytes van localhost.localdomain (127.0.0.1): icmp_seq=5 ttl=64 tijd=0.017 ms 64 bytes van localhost.localdomain (127.0.0.1): icmp_seq=6 ttl=64 tijd=0.016 ms 64 bytes van localhost.localdomain (127.0.0.1): icmp_seq=7 ttl=64 tijd=0.016 ms 64 bytes van localhost.localdomain (127.0.0.1): icmp_seq=8 ttl=64 tijd=0.016 ms 64 bytes van localhost.localdomain (127.0.0.1): icmp_seq=9 ttl=64 tijd=0.016 ms 64 bytes van localhost.localdomain (127.0.0.1): icmp_seq=10 ttl=64 tijd=0.016 ms --- localhost.localdomain ping-statistieken --- 10 pakketten verzonden, 10 ontvangen, 0% pakketverlies, tijd 1ms rtt min/avg/ max/mdev = 0,016/0,023/0,049/0,010 ms, ipg/ewma 0,187/0,028 ms

sudo vaak gebruikt om bepaalde gebruikers gedeeltelijke toegang te verlenen tot bevoorrechte opdrachten, zodat ze beperkte administratieve functies kunnen uitvoeren. Een van de voorzieningen sudo dat alle opdrachten worden geschreven naar /var/log/secure. Het bovenstaande voorbeeld wordt beschreven door een regel in het logboek:

18 april 11:23:17 localhost sudo: alex: TTY=pts/0 ; PWD=/home/alex ; GEBRUIKER=root ; COMMANDO=/bin/ping -c 10 -i 0 localhost

Dat is alles. Nu zal ik nooit vergeten wanneer ik Sudo gebruikte: "met grote kracht komt grote verantwoordelijkheid."

2.1 Sudo-shell

Als je genoeg rechten hebt in sudoers, kun je ook root openen schelp gebruik makend van:

BIJ laatste versies alleen op CentOS 5 wordt sudo -s gebruikt om een ​​shell als root uit te voeren. Wees heel voorzichtig, want hierdoor kunnen nieuwe bestanden in de root-homedirectory worden gewijzigd of aangemaakt, en in de homedirectory van de bellende gebruiker worden geïnstalleerd.

3.console-helper:

Consolehelper is een wrapper voor het uitvoeren van GUI-toepassingen. Wanneer het begint te draaien, controleert het de PAM-configuratie voor de vereiste toepassing. Dit betekent dat we de gebruiker kunnen authenticeren met alle geïnstalleerde PAM-modules. De belangrijkste methode is om een ​​wachtwoord te vragen, maar als we de juiste apparatuur hebben. we kunnen authenticeren met een smartcard, tokens, vingerafdrukken, etc. PAM-configuratie valt buiten het bestek van dit document (zie de PAM Administrator's Guide), dus we zullen de configuratiestap van de consolehelper behandelen die nodig is om applicaties als root uit te voeren en om het root-wachtwoord te vragen.

Laten we als voorbeeld /usr/bin/xterm zo instellen dat het als root wordt uitgevoerd.

Ln -s /usr/sbin/consolehelper /usr/bin/xterm-root

Nu om PAM te configureren - maak een bestand /etc/pam.d/xterm-root:

#%PAM-1.0 auth include config-util account include config-util session include config-util

Configureer ten slotte consolehelper om /usr/bin/xterm als root uit te voeren met de opdracht "xterm-root". Maak het bestand /etc/security/console.apps/xterm-root:

GEBRUIKER=root PROGRAMMA=/usr/bin/xterm

Dat is alles. Voer "xterm-root" uit (van opdrachtregel of snelkoppeling .desktop-bestand), voer het wachtwoord in en ga. Als u een foutmelding krijgt: "Xlib: verbinding met ":0.0" geweigerd door server", voer dan eerst "xhost local:root" uit.

In veel linux (en niet alleen linux) handleidingen raden beveiligingsproblemen regelmatig aan om alle niet-administratieve acties uit te voeren onder een gebruiker die geen administrator-/superuser-rechten heeft. Simpel gezegd, iedereen raadt aan om niet altijd als root te draaien en alleen als dat nodig is zijn toevlucht te nemen tot het draaien als root.
In veel situaties wordt het zelfs nodig om processen uit te voeren onder een gebruiker die niet alleen rootrechten, maar kan ook zijn rootrechten niet verhogen. Geen manier, geen manier. Een dergelijke behoefte ontstaat (het is logisch om dergelijke gebruikers aan te maken) voor services die op de server worden uitgevoerd. Bijvoorbeeld Apache, Asterisk, enzovoort. Dat wil zeggen, zodat iemand die de rechten van zo'n gebruiker kan krijgen, niet alleen geen rootrechten zou krijgen, maar zelfs (plotseling) het root-wachtwoord zou hebben geleerd, niet in staat zou zijn om met dit wachtwoord in te loggen (hun privileges verhogen).

In oudere versies van Linux was het standaardgedrag dat gebruikers in de wielgroep het su-commando konden uitvoeren, maar alle anderen niet. Dat wil zeggen, iedereen kan su uitvoeren, maar voor gebruikers die niet uit de wielgroep komen, kan het su-commando zelfs met correct wachtwoord root zal een foutmelding geven.
BIJ moderne versies linux, bijvoorbeeld CentOS en Debian, is deze functie standaard uitgeschakeld, d.w.z. alle gebruikers kunnen hun rechten verhogen (het root-wachtwoord kennen). In dit artikel laten we zien hoe u de modus die ervoor was terug kunt keren - zodat alleen gebruikers uit de wielgroep hun privileges kunnen "verhogen".

Waar te beginnen

Allereerst moet je jezelf beschermen. Dat wil zeggen, zorg ervoor dat u de gebruiker waaronder u werkt toevoegt aan de groep wiel. Welnu, als er meerdere gebruikers in het systeem werken, waarbij het nodig is om van tijd tot tijd de privileges te verhogen om te rooten, dan iedereen van deze gebruikers moeten in de wielgroep worden opgenomen!
Let op: dit is belangrijk voordat hoe je verandert linux instellingen, anders (als u bijvoorbeeld via SSH verbinding maakt met de server, wordt SSH-toegang als root afgesloten) door onder te gaan gewone gebruiker via SSH kunt u uw privileges niet verhogen naar root!

Wielgroep maken

Het is mogelijk dat in uw linux-versies er is standaard geen wielgroep. Dan moet het gemaakt worden. Om dit te doen, is er het volgende commando:
addgroup wiel
Wees niet bang om dit commando in te voeren: als de wielgroep bestaat, wordt een bericht weergegeven dat zo'n groep al bestaat. Als er geen dergelijke groep is, wordt deze gemaakt.

Een gebruiker toevoegen aan de wielgroep

Hier is een commando voor:
usermod -a -G wiel gebruikersnaam
Bijvoorbeeld:
usermod -a -G wiel gebruikersnaam

Deze opdracht voegt de gebruikersnaam van de gebruiker toe aan de wielgroep. Als de gebruiker ook lid is van een of meer andere groepen, blijft het lidmaatschap in alle groepen behouden, alleen wordt de gebruiker toegevoegd aan een andere (extra) groep.

Controleer nu of alles correct is gedaan. Hier is een commando voor:
id gebruikersnaam
Bijvoorbeeld:
id gebruikersnaam

De gebruikers-ID, gebruikersnaam en de ID en naam van elke groep waartoe de gebruiker behoort, worden weergegeven. Zorg ervoor dat alles vereiste gebruikers toegevoegd aan de wielgroep.

Voer su alleen uit door gebruikers in de wielgroep

Open in je tekstverwerker bestand: /etc/pam.d/su
Zoek in dit bestand naar een regel die lijkt op de volgende:
auth vereist pam_wheel.so
of
auth vereist pam_wheel.so use_uid
Standaard begint deze regel met een "#"-teken, wat hetzelfde is als een opmerking. Verwijder het commentaarteken aan het begin van deze regel en sla het bestand op.

Alles! Nu kunnen alleen gebruikers uit de wielgroep het su-commando uitvoeren en hun privileges naar root verhogen. Vergeet het niet te bekijken!