Puncte:0

sudo pentru a permite instalarea apt-get a pachetelor de la distanță, dar interzicând comenzile arbitrare

drapel cn

Caut o modalitate de a permite unui utilizator să instaleze pachete (numai la distanță) prin apt-get (sau alt mecanism?), dar nu le permiteți să ruleze comenzi arbitrare ca root.

pot sa obtin niste de drum prin /etc/sudoers. Să spunem că am asta în fișierul meu /etc/sudoers

root ALL=(ALL:ALL) ALL
john ALL=NOPASSWD:/usr/bin/apt,/usr/bin/apt-get

Apoi John pare limitat să alerge apt și apt-get prin intermediul sudo. Dar... se pare că există modalități de a scăpa apt-get la o coajă ca rădăcină (https://blog.ikuamike.io/posts/2021/package_managers_privesc/):

  • Tip sudo apt-get changelog apt și apăsați enter
  • Introduceți un semn de exclamare ! și apăsați enter
  • Acum ești în shell ca root și poți face orice

Sau rulați mai jos:

sudo apt update -o APT::Update::Pre-Invoke::="/bin/bash"

Dacă face vreo diferență, aceasta este în Docker


A fost postat la https://superuser.com/q/1698692/315568, dar cred că a fost site-ul greșit, deoarece acesta nu este (doar) pentru mașina mea, ci pentru alții

drapel cn
Bob
Dacă nu aveți încredere în utilizatorul John, el nu ar trebui să obțină niciun drept sudo. Încercați să închideți o singură cale de abuz, dar adevărul este că John poate, de exemplu, să creeze un pachet personalizat care instalează orice instrument de care are nevoie pentru a evita controalele dvs. de acces cu `sudo apt install ./my-rootkit.deb`
Puncte:1
drapel cn
Bob

The sudoeri manualul are, de asemenea, o secțiune întreagă cum o politică adecvată în /etc/sudoers fișierul de configurare (sau, desigur, fișierele de politică drop-in incluse) pot oferi limitate protecție împotriva scăpărilor de obuze cu RESTRICTși NOEXEC Opțiuni.

Ar putea fi mai generic decât crearea unui script wrapper pentru o anumită utilitate.

restrânge Evitați să acordați acces utilizatorilor la comenzi care permit utilizatorului să execute comenzi arbitrare. Mulți editori au un mod restricționat în care evadările de shell sunt dezactivate, deși sudoedit este o soluție mai bună pentru rularea editorilor prin sudo. Datorită numărului mare de programe care oferă evadari de shell, restricționarea utilizatorilor la setul de programe care nu le oferă este adesea imposibilă.

și

noexec
Multe sisteme care acceptă biblioteci partajate au capacitatea de a suprascrie funcțiile implicite ale bibliotecii, indicând o variabilă de mediu (de obicei LD_PRELOAD) către o bibliotecă partajată alternativă. Pe astfel de sisteme, sudo noexec funcționalitatea poate fi utilizată pentru a împiedica un program rulat de sudo să execute orice alte programe. Notă, ... ...
Pentru a permite noexec pentru o comandă, utilizați NOEXEC eticheta așa cum este documentat în secțiunea Specificații utilizator de mai sus. Iată din nou acel exemplu:
aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
Acest lucru permite utilizatorului Aaron să ruleze /usr/bin/more și /usr/bin/vi cu noexec activat. Acest lucru va împiedica aceste două comenzi să execute alte comenzi (cum ar fi un shell).

Deci in exemplul tau:

john ALL=NOEXEC:NOPASSWD: /usr/bin/apt,/usr/bin/apt-get

ar trebui să fie suficient pentru a permite în continuare utilizatorului Ioan a alerga apt și apt-get cu privilegii ridicate, fără să i se solicite parola și fără a avea capacitatea de a folosi un shell escape sau alt truc depășește limitele autorității sale.

Rețineți că acest lucru poate avea și rezultate nedorite. De exemplu după instalarea unui nou serviciu, este posibil ca apt să nu poată porni serviciul asociat.

Puncte:0
drapel cn

Aceasta este încercarea mea, așa că utilizatorul ar fi folosit sudo pentru a rula acest script, dar nu altele.

#!/bin/bash

# Acest script include `apt update` și `apt install`, dar încearcă să interzică
# comenzi arbitrare putând fi rulate de utilizator ca root. Exista
# deoarece permiterea utilizatorului să `sudo apt` ar permite
# `sudo apt changelog apt`, care rulează `less`, ceea ce atunci ar permite
# utilizator pentru a scăpa în shell.

# Dar, accesul complet la `apt update` și `apt install` tot nu poate fi acordat,
# deoarece există 3 moduri în care pot fi folosite pentru a rula comenzi arbitrare
#
# 1. Prin opțiunile din variabila de mediu APT_CONFIG
# 2. Prin opțiunile din linia de comandă, cum ar fi „-o” pentru a specifica scripturile de rulat
# 3. Prin intermediul unui pachet local care conține scripturi de instalare personalizate
#
# Deci acest script încearcă să interzică cele 3 posibilități de mai sus

# 1. Ștergeți orice opțiune din variabila de mediu APT_CONFIG
export APT_CONFIG=''

# 2. și 3. Interziceți opțiunile liniei de comandă sau pachetele locale
pentru var în $*
do
   dacă [[ ${var::1} == "/" || ${var::1} == "." || ${var::1} == "-" ]]
   atunci
     echo "E: Este interzis să instalați un pachet local sau să treceți o opțiune"
     iesirea 1
   fi
Terminat

# Actualizați și instalați pachetele solicitate
actualizare apt
apt install -y $*

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.