Maak en configureer setgid-mappen voor samenwerking - RHCSA Objective Preparation

  • Vovich Masterovich
  • 0
  • 4338
  • 241
>

Machtigingen en rechten voor GNU / Linux-bestandssystemen vormen de basis van de beveiliging van het systeem, en een van de principes is de duidelijke scheiding van rechten op bestanden en mappen. In een omgeving met veel verschillende gebruikers, zoals de server van een school, voorkomen bestandsrechten dat een gebruiker per ongeluk de documenten van een ander verwijdert of overschrijft. Er zijn echter gebruiksscenario's waarbij meerdere gebruikers de bestanden van andere gebruikers moeten openen (lezen, schrijven en zelfs verwijderen) - dit kan het geval zijn in de bovengenoemde schoolserver, waar studenten aan hetzelfde project werken. In dit gedeelte van de voorbereiding op het RHCSA-examen zullen we leren hoe we een omgeving voor dergelijke samenwerking kunnen creëren met behulp van de setgid-techniek (set groupID). Merk op dat hoewel we deze stappen uitvoeren op een recent besturingssysteem, de setgid niet nieuw is en je het in alle distributies zult vinden.

In deze tutorial leer je:
  • Gebruikers toevoegen aan een aanvullende groep
  • Hoe set-GID in een directory te gebruiken
  • Hoe u het juiste eigendom binnen de set-GID-directory kunt controleren
  • Hoe u de speciale directory gebruikt als lid van de groep
Samenwerking mogelijk maken met de setgid-directory.

Gebruikte softwarevereisten en -conventies

Softwarevereisten en Linux Command Line-conventies
Categorie Vereisten, conventies of gebruikte softwareversie
Systeem Red Hat Enterprise Linux 8
Software GNU Coreutils 8.30
Andere Bevoorrechte toegang tot uw Linux-systeem als root of via het sudo opdracht.
Conventies # - vereist dat gegeven linux-commando's worden uitgevoerd met root-privileges, hetzij direct als rootgebruiker, hetzij door gebruik van sudo opdracht
$ - vereist dat gegeven linux-commando's worden uitgevoerd als een gewone niet-geprivilegieerde gebruiker

De use case

Om het gebruik van de setgid te demonstreren, hebben we een virtuele server en daarop moeten we een groep gebruikers maken, leden toevoegen en een directory instellen waartoe ze allebei toegang hebben. Tot nu toe is dit alleen een kwestie van toestemmingsinstellingen. De truc is om de setgid aan de directory toe te voegen, zodat de bestanden die in de directory zijn gemaakt de eigenaarsgroep hebben van de bovenliggende directory. Aangezien de groep lees- en schrijfrechten heeft binnen de directory, kunnen alle leden van de groep de bestanden lezen en schrijven, zonder dat de oorspronkelijke gebruikersinstelling expliciet het groepslidmaatschap nodig heeft.

Basisconfiguratie

Eerst maken we de benodigde objecten. Laten we de projectdirectory maken:

# mkdir -p / student_projects / rocket_science
En onze twee gebruikers, sarah en John, met behulp van het useradd commando:
# useradd john # useradd sarah
We moeten ook een gebruikersgroep maken die samenwerking tussen de leden mogelijk maakt:
# groupadd rocketengineers
Vervolgens stellen we deze groep in als de eigenaar van de projectdirectory, recursief:
# chown -R: rocketengineers / student_projects / rocket_science
Vervolgens voegen we onze gebruikers toe aan het rocketengineers groep:
# usermod -a -G rocketengineers john # usermod -a -G rocketengineers sarah
We hebben de groep toegevoegd als secundaire groep. Zie de tutorial voor groepslidmaatschap voor meer informatie over groepen. Om de basisconfiguratie te voltooien, moeten we volledige toestemming toevoegen aan de groep in de directory:
# chmod 770 / student_projects / rocket_science
En hiermee is onze basisopstelling compleet. Beide gebruikers kunnen naar de directory schrijven en gemaakte bestanden zijn eigendom van de gebruiker en de groep die eigenaar is, is de primaire groep van de gebruiker. We kunnen de toestemmingen controleren die we hebben ingesteld stat:
# stat / student_projects / rocket_science Bestand: / student_projects / rocket_science Grootte: 6 blokken: 0 IO-blok: 4096 directory Apparaat: fd00h / 64768d Inode: 17789698 Links: 2 Toegang: (0770 / drwxrwx ---) Uid: (0 / root ) Gid: (1003 / rocketengineers) Context: unconfined_u: object_r: default_t: s0 Toegang: 2020-10-04 18: 29: 57.500453785 +0200 Wijzigen: 2020-10-04 18: 29: 47.650278956 +0200 Wijzigen: 2020-10 -04 18: 30: 34.809115974 +0200 Geboorte: -

ID's zullen waarschijnlijk verschillen. We kunnen zien dat de eigenaar van de directory is wortel, terwijl het groepseigendom tot de rocketengineers groep. Hierdoor kunnen beide leden van de groep lezen en schrijven van en naar de directory.

Samenwerking zonder setgid

Laten we zeggen dat de twee gebruikers graag enkele opmerkingen willen delen met deze opstelling. sarah kreeg een tekstbestand met belangrijke gegevens in haar homedirectory:

$ id uid = 1002 (sarah) gid = 1002 (sarah) groepen = 1002 (sarah), 1003 (rocketengineers) context = unconfined_u: unconfined_r: unconfined_t: s0-s0: c0.c1023 $ cat general_project.notes text

Om het mee te delen John, ze kopieert het bestand naar de gedeelde map (er is dus nog steeds een back-up in haar thuismap, voor het geval dat):

$ cp general_project.notes / student_projects / rocket_science /

Door eigendommen te controleren, kunnen we zien dat de eigenaar inderdaad is sarah, en de groep die eigenaar is van het bestand is ook sarah, de primaire groep van de gebruiker:

$ stat /student_projects/rocket_science/general_project.notes Bestand: /student_projects/rocket_science/general_project.notes Grootte: 5 Blokken: 8 IO Blok: 4096 normaal bestand Apparaat: fd00h / 64768d Inode: 18019570 Links: 1 Toegang: (0664 / -rw -rw-r--) Uid: (1002 / sarah) Gid: (1002 / sarah) Context: unconfined_u: object_r: default_t: s0 Toegang: 2020-10-04 18: 31: 30.229099624 +0200 Wijzigen: 2020-10- 04 18: 31: 30.229099624 +0200 Wijziging: 2020-10-04 18: 31: 30.229099624 +0200 Geboorte: -

Laten we overschakelen naar John. Hij heeft ook enkele bevindingen over het project en wil deze graag delen.

$ id uid = 1001 (john) gid = 1001 (john) groepen = 1001 (john), 1003 (rocketengineers) context = unconfined_u: unconfined_r: unconfined_t: s0-s0: c0.c1023 $ echo "mytext"> rocket.txt $ cp rocket.txt / student_projects / rocket_science /


Dezelfde rechten zijn van toepassing, het nieuw gekopieerde bestand is eigendom van John:

$ stat /student_projects/rocket_science/rocket.txt Bestand: /student_projects/rocket_science/rocket.txt Grootte: 7 blokken: 8 IO-blok: 4096 normaal bestand Apparaat: fd00h / 64768d Inode: 18356857 Links: 1 Toegang: (0664 / -rw -rw-r--) Uid: (1001 / john) Gid: (1001 / john) Context: unconfined_u: object_r: default_t: s0 Toegang: 2020-10-04 18: 32: 24.433075710 +0200 Wijzigen: 2020-10- 04 18: 32: 24.433075710 +0200 Wijziging: 2020-10-04 18: 32: 24.433075710 +0200 Geboorte: -

Omdat ze allebei lid zijn van de rocketengineers groep, kunnen ze de inhoud van de directory lezen, en aangezien beide notities voor iedereen leesbaar zijn, kunnen ze allebei elkaars bestanden lezen.

$ cat /student_projects/rocket_science/general_project.notes tekst

Het probleem doet zich voor wanneer John zou graag wat opmerkingen willen toevoegen over sarah's belangrijke gegevensbestand:

$ echo "some comments" >> /student_projects/rocket_science/general_project.notes -bash: /student_projects/rocket_science/general_project.notes: Toestemming geweigerd

In feite kunnen ze niet aan elkaars bestanden werken, ze lezen ze alleen. Nu sarah kon het groepseigendom van haar bestand instellen op hun gemeenschappelijke groep, waardoor het probleem werd opgelost. Maar waarom zou ze dat nodig hebben bij elk dossier, als we de setgid hebben om ons te helpen?

De setgid-vlag instellen

Om de setgid-vlag in te stellen, gebruiken we chmod:

# chmod g + s / student_projects / rocket_science

Let op de "s" -vlag bij machtigingen voor groepen (zet ter wille van de duidelijkheid vetgedrukt):

# stat / student_projects / rocket_science Bestand: / student_projects / rocket_science Grootte: 53 Blokken: 0 IO Blok: 4096 directory Apparaat: fd00h / 64768d Inode: 17789698 Links: 2 Toegang: (2770 / drwxrws---) Uid: (0 / root) Gid: (1003 / rocketengineers) Context: unconfined_u: object_r: default_t: s0 Toegang: 2020-10-04 18: 32: 29.389167450 +0200 Wijzigen: 2020-10-04 18: 32: 24.433075710 +0200 Wijziging: 2020-10-04 18: 34: 04.449927062 +0200 Geboorte: -

Testen en verifiëren van de resultaten

Nu sarah kan haar nieuwe onderzoeksnotities delen:

$ cat bevindingen.txt raket heeft vleugels nodig $ cp bevindingen.txt / student_projects / rocket_science / $ stat /student_projects/rocket_science/findings.txt Bestand: /student_projects/rocket_science/findings.txt Grootte: 19 blokken: 8 IO-blok: 4096 normaal bestand Apparaat: fd00h / 64768d Inode: 18999000 Links: 1 Toegang: (0664 / -rw-rw-r--) Uid: (1002 / sarah) Gid: ( 1003 / rocketengineers) Context: unconfined_u: object_r: default_t: s0 Toegang: 2020-10-04 18: 35: 15.195236593 +0200 Wijzigen: 2020-10-04 18: 35: 15.195236593 +0200 Wijzigen: 2020-10-04 18: 35: 15.195236593 +0200 Geboorte: -


Het eigendom van de groep is ingesteld op de groep van de bovenliggende directory vanwege de setgid in situ. Dat zal veroorzaken John commentaar kunnen geven op de nieuwe onderzoeksnotities:

$ echo "geverifieerd!" >> /student_projects/rocket_science/findings.txt $ cat /student_projects/rocket_science/findings.txt raket heeft vleugels nodig geverifieerd!

En daarmee voltooiden we ons doel om een ​​samenwerkingsdirectory op te zetten voor een groep gebruikers. We zouden dit kunnen doen voor andere groepen met de bovenstaande methode, waarbij de gegevens van verschillende projecten worden gescheiden door machtigingen, zodat een lid van de ene groep niet per ongeluk gegevens van een ander project kan verwijderen.

# Videotitel: werken in een setgid-directory # Videobeschrijving: de bestanden van andere gebruikers bewerken in een setgid-directory # Videobestandsnaam: rhcsa_setgid.webm
Werken in een setgid-directory - Bestanden van andere gebruikers bewerken in een setgid-directory

Gevolgtrekking

Onder GNU / Linux strikte machtigingen en eigendomsrechten, setgid is een eenvoudige manier om gebruikers van het systeem op een veilige manier met elkaars bestanden te laten communiceren, waardoor groepswerk mogelijk wordt zonder het gebruik van een of andere zware externe oplossing, of de aanvankelijke groepen en machtigingen van de gebruiker verprutst. In het bovenstaande voorbeeld hoefden we de homedirectory's van de gebruikers of hun systeembrede machtigingen niet aan te raken, we hebben gewoon een speciale plek opgezet waar ze kunnen delen wat ze nodig hebben.

Opdrachten

  1. Maak meerdere projectmappen met verschillende groepen. Controleer of de leden van een project de bestanden van andere projecten kunnen lezen.
  2. Maak een projectoverschrijdende directory waar elk projectlid toegang toe heeft.
  3. Creëer een cross-project alleen lezen directory, waar slechts één project (projectmanagement) lid kan schrijven, maar leden van alle projecten kunnen lezen.



Niemand heeft nog op dit artikel gereageerd.

Een verzameling nuttige informatie over het Linux-besturingssysteem en nieuwe technologieën
Nieuwe artikelen, praktische tips, gedetailleerde recensies en handleidingen. Voel je thuis in de wereld van het Linux-besturingssysteem