the comprehensive guide to Master Sudoers File.

Wat is de Sudoers File?
Het Sudoers-bestand is net als elk ander bestand op het Linux-besturingssysteem., Maar het speelt een vitale rol in het beheer van wat een “gebruiker” of “gebruikers in een groep” kan doen op het systeem.
waarom de naam Sudoers?
Het woord Sudo is de afkorting van de term “Super User Do”. Zoals het duidelijk suggereert-het is net als het vertellen van de Kernel / OS “je hebt geen keuze, Doe het gewoon!”. Dus de gebruikers met Sudo toestemming worden genoemd als Sudo-gebruikers. Beheer van al deze sudo-gebruikers wordt gedaan door middel van een bestand genaamd Sudoers-bestand. Dit bestand bevindt zich ook in de /etc directory, net als elk ander configuratiebestand.,

waarom Sudoers-bestand?
een normale gebruiker op Linux zal veel beperkingen in het systeem hebben. Bijvoorbeeld-de gebruiker zal niet in staat zijn om een service te starten, een configuratiebestand te wijzigen of een script uit te voeren op het systeem standaard. Vanuit een veiligheidsperspectief ziet dit er perfect uit.,
maar, laten we een voorbeeld nemen van — u als systeembeheerder moet alle gebruikers en hun besturingselementen beheren. U hebt een website gehost op Apache in een van uw servers. Je hebt al een Web-Admin om het te beheren. Een gebruiker moet voor hem worden gemaakt op de Web-Server. Deze gebruiker zou twee dingen moeten kunnen doen die een normale gebruiker niet kan :
- start/herstart Apache Service in het geval het stopt.
- Bewerk Het configuratiebestand van Apache.
u hebt standaard twee gebruikersopties:
- Root gebruiker die alle rechten op het systeem heeft, inclusief Apache.,
- een normale gebruiker, die standaard niet in staat zal zijn om een Service te starten of configuratiebestanden op het systeem te bewerken.
Dit is wanneer een sudoers-bestand handig voor u zal zijn. In Sudoers bestand kunnen we precies definiëren:
- Web-Admin gebruiker kan alleen Apache Service starten &
- hij kan alleen Apache configuratiebestand bewerken.
spelen met het Sudoers bestand
genoeg theorie, we zullen nu beginnen met het echte werk. Ik zal uitleggen elke sectie in Sudoers bestand met een aantal voorbeelden., Standaard ziet een Sudoers —bestand er zo uit-

voornamelijk kunnen we vijf secties in het bestand zien — de eerste drie secties in het bestand zijn gerelateerd aan ALIAS van Host, gebruiker en Cmnd., We zullen het later over ALIAS hebben, laten we het eerst hebben over de core sectie:
#User Privilege Specification
root ALL = (ALL:ALL) ALL
opmerking: ‘#’ geeft commentaar in het bestand aan, OS zal deze regel negeren tijdens het uitvoeren.,gebruik : User <spatie >OnHost = (Runas-User:Group)< spatie >commando ‘ s
voorbeeld: root ALL = (All:All) All
Lees het als — gebruiker root kan elk commando uitvoeren als elke gebruiker van elke groep op elke host.
→ de eerste ALL wordt gebruikt om HOSTS te definiëren. We kunnen hostnaam/Ip-adres definiëren in plaats van alle. Alles betekent elke gastheer.
→ tweede alles: derde alles is Gebruiker: Groep., In plaats van alles kunnen we Gebruiker of gebruiker definiëren met de groep zoals gebruiker: groep. ALL: ALL betekent alle gebruikers en alle groepen.
→ Last ALL is het commando. In plaats van alle, kunnen we een commando of set commando ‘ s definiëren. Alles betekent alle commando ‘ s.
om het heel eenvoudig te stellen, het is”who where = (as_whom) what”.
opmerking: de meeste mensen begrijpen HOSTS als hosts op afstand. Het is de lokale hostnaam / IP-adres., HOSTS veld zal zelden gebruikt worden, als je meer wilt weten over HOSTS in Sudoers, zie dan → https://www.sudo.ws/man/1.7.10/sudoers.man.html
in principe kunnen we een gebruiker toestaan om iets op slechts twee manieren te doen —
- geef hem direct de toestemming om het commando uit te voeren door de toestemming van het bestand te wijzigen.
- laat hem het commando uitvoeren als een andere gebruiker die al de rechten heeft om dit commando uit te voeren.
in het Sudoers-bestand zullen we de laatste implementeren.,
We zullen een ander voorbeeld gebruiken om de velden in de syntaxis duidelijk te begrijpen:
voorbeeld : sysadmin ALL = (root) /usr/bin/cat /etc/shadow
Lees dit als — gebruiker “sysadmin” kan het commando “/usr/bin/cat /etc/shadow” als ROOT gebruiker uitvoeren op alle HOSTS.
hier in het bovenstaande voorbeeld, in de sectie Commando — ik heb iets meer dan een commando toegevoegd, Dit is om de flexibiliteit van Sudoers-bestand te tonen. Het deel “/usr / bin / cat ” is een binair uitvoerbaar bestand of commando dat gebruikt wordt om de inhoud van een bestand te bekijken., Het deel ” / etc / shadow “is een vertrouwelijk bestand dat wachtwoorden opslaat, dus het betekent dat de gebruiker” sysadmin “alleen” /usr/bin/cat “kan uitvoeren op” /etc/shadow ” bestand, als deze gebruiker probeert de inhoud van een ander bestand te bekijken waarop hij geen leesrechten heeft, zal hij dat niet kunnen.,
syntaxis van Sudo commando: sudo <Commando>
voorbeeld: sudo cat /etc/shadow
nu als de gebruiker “sysadmin” sudo gebruikt voor een commando, zal os hem eerst het gebruikerswachtwoord vragen, het wachtwoord verifiëren en vervolgens naar sudoers-bestand gaan en controleren of hij dit commando als elke gebruiker mag uitgeven. Als hij is toegestaan — succes, anders zal het rapporteren een van deze twee dingen —
→ gebruiker is niet in het Sudoers bestand. Dit incident zal worden gemeld.,
Note : You can see this reported incident in /var/log/auth.log

→Sorry, user <username> is not allowed to execute <command> as <User> on <hostname>

Hier mag de WebAdmin van de gebruiker alleen”cat /etc/shadow” uitvoeren. Maar hij probeerde het commando ‘cat’ uit te voeren op “/etc/gshadow” wat niet is toegestaan.
aangezien we genoeg grip hebben op de velden in de syntaxis van Sudoers-bestand, Laten we verder gaan en andere secties in het bestand begrijpen. Alle andere secties zullen afhangen van de kern sectie die we al besproken.,
de volgende sectie is GROEPSSECTIE, die
#toestaan dat leden van groep sudo elk commando uitvoeren
%sudo ALL = (ALL:ALL) ALL
percentiel symbool ‘%’ wordt gebruikt om een groep in Sudoers-bestand te vertegenwoordigen. Alle velden en hun functionaliteiten in deze sectie zijn precies hetzelfde als besproken in de vorige sectie — de gebruikers sectie. We kunnen dezelfde Sudo — Privileges aan een groep in plaats van een gebruiker toewijzen door de groepsnaam op te geven – %<groepsnaam>., Dus alle leden in de groep zullen dezelfde privileges erven die aan de groep worden gegeven.
standaard bestaat er een SUDO-groep gedefinieerd in het Sudoers-bestand. We kunnen zien dat deze machtigingen precies hetzelfde zijn als ROOT gebruikers machtigingen in het bestand. Dus als een gebruiker lid is van deze SUDO groep, kan hij alle commando ‘ s uitvoeren die een ROOT gebruiker kan uitvoeren.
laten we een aangepaste groep definiëren en de syntaxis beter begrijpen. Laten we hetzelfde oude systeembeheerder voorbeeld om dit te doen. Neem aan dat het nee is. van de medewerkers zijn nu meer, dus de systeembeheerders zijn nu 3., Elk van deze hebben dezelfde exacte machtigingen nodig die we aan de eerste systeembeheerder hadden gegeven. Een ding dat we kunnen doen om dit te bereiken is drie ingangen hebben voor alle drie de systeembeheerders in het Sudoers bestand. Als we deze aanpak volgen, beledigen we de mogelijkheden van een Sudoers-bestand.
het beste is om alle drie systeembeheerders te groeperen in een groep genaamd ‘SystemAdminGroup’., We zullen de vereiste permissies voor deze groep definiëren met –
%SystemAdminGroup ALL = (root) /usr/bin/cat /etc/shadow
nu kunnen alle drie de beheerders het geprivilegieerde commando uitvoeren. We deden dit in één keer met behulp van de Groepsdefinitie.
Sudoers bestand is in staat om dit hele proces efficiënter te maken met behulp van verschillende functionaliteiten. De eerste drie secties-aliassen worden gebruikt om dit te bereiken., Zoals het woord al suggereert, gebruiken we een ALIAS voor iets dat we in het hele bestand kunnen gebruiken, het is net als een globale variabele in een Script. Hoe maakt dit alles efficiënter? We kunnen set commando ‘s, hosts en gebruikers in één regel definiëren, we wijzen deze regel toe aan een ALIAS naam, deze alias zal gebruikt worden wanneer en waar nodig zonder alle commando’ s/hosts/gebruikers opnieuw te definiëren.
Ik wil nog een ALIAS toevoegen die standaard niet in het Sudoers-bestand staat, namelijk “Run_as ALIAS”., Nu hebben we vier aliassen —
- User ALIAS als User_Alias
- Run-As ALIAS als Runas_Alias
- Host ALIAS als Host_Alias
- commando ALIAS als Cmnd_Alias
opmerking : Alias naam moet worden gedefinieerd in hoofdletters en kan nummer, alfabet en underscore bevatten (_). Alias naam moet beginnen met alfabet.,3e”>
Naam> = <gebruikersnaam>,<gebruikersnaam>, <gebruikersnaam>…
Voorbeeld: User_Alias SYSTEEMBEHEERDERS = john,tim,tom
Gebruik: ALLE SYSTEEMBEHEERDERS = (wortel) /usr/bin/cat /etc/shadow
Als ik wat instellen van sudo rechten die zijn gedefinieerd voor de gebruikers — john, tim en tom, ik heb geen definitie van het drie keer, in plaats daarvan kan ik bepalen van een Alias en deze Alias gebruiken de Naam terwijl het delegeren van de sudo toegang tot hen.,

Run As ALIAS Syntax —
Runas_Alias <ALIAS Name> =<username>,<username>,<username>…
Example: Runas_Alias MGRS = root,sradmin
Usage: systemadmin ALL = (MGRS) /usr/bin/cat /etc/shadow
If i want to define the set of users a user can run a command as, i can use Runas_Alias., Raak hier niet in de war, vergeet niet de meester mantra — wie waar = (as_whom) wat. We gebruiken een alias om no op te nemen. van gebruikers in het veld “as_whom”.

host ALIAS syntaxis —
gebruik: systemadmin HOSTS = (root)/usr/bin /cat/etc/shadow
als ik een set hostnamen, ip-adressen of ip-adresbereik moet definiëren waarop een gebruiker de geprivilegieerde / Sudo-opdrachten mag geven, kan ik dit bereiken met behulp van Host Alias. Nogmaals, dit deel behoort tot het veld” waar ” in de hoofdzin.

Cmnd_Alias <ALIAS Name> = <cmd1>,<cmd2>, <cmd3>…
Example: Cmnd_Alias SYSADMIN = /usr/sbin/apache2, /usr/bin/cat
Usage: systemadmin ALL = (root) SYSADMIN
If i need to permit a user to execute a set of commands as SUDO, i can define them under a Cmnd_Alias Section and use this ALIAS name while delegating the access., Dit deel behoort tot het” wat ” veld in de hoofdzin.

NOPASSWD Mode:
Dit is nog een speciale functie in Sudoers die een gebruiker in Sudoers-bestand toestaat om een geprivilegieerde opdracht uit te voeren zonder het wachtwoord in te voeren., Dit is erg handig bij het draaien van geautomatiseerde scripts in het systeem als een normale gebruiker, het script kan een geprivilegieerd commando uit te voeren. Maar we weten al wat er gebeurt als een gebruiker SUDO gebruikt, zal hij zijn wachtwoord moeten invoeren!
onthoud dat, zelfs als het een script of proces is, het als gebruiker moet draaien, het niet alleen kan draaien.
alle geautomatiseerde scripts zijn niet intelligent genoeg om een wachtwoord in te voeren wanneer daarom wordt gevraagd. Maar het is mogelijk om automatisch wachtwoord in te voeren. Laten we voorlopig niet denken aan intelligente scripts., Dus tot slot, een geprivilegieerd commando kan worden gebruikt door een gebruiker zonder het invoeren van het wachtwoord.
voorbeeld van een script dat NOPASSWD nodig heeft: Supervisor in Linux.We zullen bespreken over Supervisor in een ander artikel.gebruik : sysadmin ALL = (root) NOPASSWD : /usr/sbin/apache2
Parameteruitsluiting in aliassen
We kunnen ook parameters toevoegen die moeten worden uitgesloten in de aliassen. Bijvoorbeeld –
User_Alias EXCEPT_ROOT = ALL,!,root
sysadmin ALL = (EXCEPT_ROOT)/usr/sbin/apache2
Deze User_Alias kan worden gebruikt om ervoor te zorgen dat een gebruiker het opgegeven commando kan uitvoeren als “alle gebruikers behalve ROOT”.
dit soort uitsluiting kan worden gedaan in alle aliassen, niet alleen User_Alias. In elke ALIAS, uitsluiting syntaxis blijft hetzelfde.
voorzichtig omgaan met Sudoers bestand
inmiddels moet u begrepen hebben wat een Sudoers bestand kan doen en hoe belangrijk het is om het bestand zorgvuldig te behandelen. Linux implementeert al een mechanisme om ervoor te zorgen dat het Sudoers bestand correct wordt afgehandeld.,
Het wordt altijd aanbevolen om /etc/sudoers bestand niet direct te bewerken. Er is een gereedschap genaamd “visudo”. Dit wordt gebruikt om veilig wijzigingen aan te brengen in een sudoers-bestand. Wanneer u sudoers-bestand bewerkt met visudo, heeft visudo een ingebouwde functionaliteit om de syntaxis te controleren voordat u het bestand opslaat, als u een fout maakt zal het onmiddellijk de regel aanwijzen waar de syntaxis niet correct is. Deze functionaliteit van visudo voorkomt dat het bestand en het systeem per ongeluk beschadigd raken.
conclusie:
Sudoers-bestand speelt altijd een belangrijke rol in gebruikersbeheer., Hoewel er veel manieren zijn om te beheren en te controleren wat een gebruiker wel en niet kan doen op het systeem, zal Sudoers Methode altijd efficiënt en robuust genoeg zijn om elke no te beheren en te controleren. van de gebruikers. Een andere methode vergelijkbaar met deze die het vermelden waard is SUID en SGID. We zullen praten over SUID en SGID in een ander artikel.