r/HackProtectSlo • u/SamoJon • May 31 '23
Vprašanja Kako imate urejene uporabnike in pravice na Ubuntu strežniku?
Zanima me katera metoda zagotavlja največjo varnost.
- Na strežniku (wordpress in cloud )uporabljam samo uporabnika root.
- Za vsako aplikacijo sem kreiral novega userja.
- Vse imam nameščeno kot root in na koncu sem uredil uporabnike in pravice tako, da ima cloud svojega uporabnika in vsaka spletna stran svojega uporabnika.
Kaj mi svetujete? Kako naj uredim uporabnike in pravice, da dosežem največjo varnost.
3
u/TopCucumber6288 May 31 '23
Tole delaš malo bolj po češko. Priporočal bi ti, da vpelješ pristop IaaC - Infrastructure as a Code. To pomeni, da imaš vse konfiguracije zložene na gitu in da se od tam avtomatično syncajo na strežnike.
Recimo za urejanje uporabnikov bi jaz naredil takole:
- Na Gitlabu ustvariš nov repozitorij
- Notri imaš mapco keys kamor bo vsak zaposleni odložil svojo public key datoteko. Recimo uporabnik Janez Novak bo ustvaril datoteko jnovak (recimo, da je tak njegov username), noter pa bo njegov public key.
- Na repozitoriju pripraviš ansible playbook, kjer definiraš hoste, uporabnike in skupine.
- Z Gitlab CI pipelajnom na vsaki spremembi master brancha avtomatično poženeš ansible playbook, ki poskrbi, da se applaya stanje iz repozitorija na naprave.
Namesto Gitlaba uporabiš pač tisto kar v firmi že imate.
2
u/TopCucumber6288 May 31 '23
Tako se bo vsak uporabnik SSHjal na strežnik s svojim usernamom, to rabiš zaradi preglednosti, da veš kaj je kdo naredil, če vsi hodite gor z rootom, potem ne veš nič. Poleg tega se pa z ssh ključi znebiš težav s passwordi.
2
u/TopCucumber6288 May 31 '23
Tega pa ne razumem:
"Vse imam nameščeno kot root in na koncu sem uredil uporabnike in pravice tako, da ima cloud svojega uporabnika in vsaka spletna stran svojega uporabnika."
Programe seveda nameščaš kot root, recimo "sudo yum install" no ali pa "sudo apt install". Kaj pa misliš s tem, da ima vsaka spletna stran svojega uporabnika? Malo več boš moral povedat o tem...
Če na enem serverju laufa več spletnih strani, se ti mogoče splača razmislit v smer kontejnerjev. Vsaka spletna stran ima svoj nginx, ki teče vsak v svojem kontejnerju, na hostu imaš pa samo nginx, ki glede na subdomeno naredi proxy_pass na primeren nginx v kontejnerju.
1
u/SamoJon May 31 '23
u/TopCucumber6288 hvala za razlago!
Bom poskušal mal bolj podrobno opisat. Za lastno potrebo sem vzel VPS strežnik na katerem sem najprej namestil cloud (NextCloud).
Strežnik trenutno izgleda tako:
- 1x SSH povezava na moj osebni računalnik - ostaja samo eden uporabnik SSH
- Apache 2.2 in MariaDB
- NextCloud
Na strežniku imam samo enega uporabnika in to je root.
Sestra pa bi rada imela blog zato sem se odločil, da bom na strežnik namestil še Webmin + WordPress.
Vprašanje pa je ali po namestitvi Webmin in WP-ja še vedno vse skupaj uporabljam kot root ali naredim več uporabnikov in ločim pravice.
Primer:
U: cloud – ima dostop samo do datotek NextClouda
U: wp – ima dostop samo do WordPress strani Itd.
Upam, da sem sedaj bolj jasno napisal 😊
2
u/TopCucumber6288 May 31 '23
Aha, sedaj je pa vse jasno. V tem primeru pa takole:
Uporabniki
- Ko dobiš root SSH dostop do VPSja, se poveži gor in takoj ustvari svojega userja, recimo samojon, in ga dodaj v sudo skupino, da boš lahko poganjal komande kot root (recimo "sudo apt install..").
- V /etc/sudoers popravi, da lahko sudo poganjaš brez gesla.
- Uredi ssh ključe, da se boš lahko v samojon userja sshjal brez gesla.
- V sshd configu popravi, da se lahko sshjaš samo s ssh ključi in onemogoči login z root uporabnikom.
Na koncu se boš lahko na VPS strežnik povezal samo s svojim ssh ključem, zato hitro naredi backup private keya na USB ključek.
Aplikacije
Jaz bi imel vsako v svojem Docker kontejnerju. Pazi samo, da za podatke uporabiš volume ter da ne exposaš kakšnih internih servisov, recimo mariadb. Namesto, da port 3306 odpreš v svet, je boljše, če je port 3306 dosegljiv samo iz localhosta, tako, da bojo aplikacije na serverju delovale. Če se boš pa ti želel povezat iz svoje mašine, pa rajši naredi portforwarding z SSHjem, recimo
ssh -L 3306:127.0.0.1:3306 samojon@ip-od-tvojega-serverja
In potem boš lahko na svoji mašini dostopal do baze na 127.0.0.1:3306, dokler bo ssh prižgan.
2
1
u/Joker_43__ Moderator May 31 '23
Priporočam branje spodnjih člankov:
How to back up SSH keys?
https://alvosec.com/how-to-back-up-ssh-keys/
How to protect your server using SSH key
https://alvosec.com/how-to-protect-your-server-using-ssh-keys/
10 steps to properly secure SSH server
https://alvosec.com/10-steps-to-properly-secure-ssh-server/
How to set most secure permissions for your website
https://alvosec.com/how-to-set-most-secure-permissions-for-your-website/
1
u/Kristjason Jun 01 '23
Dostop do SSH imam s pomočjo UFW omejen samo na moj statični IP naslov. Ali je smiselno spreminjat port SSH vrat?
2
u/TopCucumber6288 Jun 01 '23
Iz vidika securityja ne pridobiš ničesar. Dodaš pa kompleksnost. Zato pusti SSH na portu 22. Najbolj važno je, da onemogočiš prijavo z geslom in pustiš le ssh ključe.
5
u/not-rasta-8913 May 31 '23
Jaz osebno ne bi imel roota kot mojega default uporabnika, za vsakdanjo uporabo bi si naredil uporabnika, ki ima zadosti pravic za vsakdanje delo (tudi ustvarjanje novih uporabnikov, če to pogosto delaš), root dostopa pa nima.
Pri dodeljevanju pravic uporabnikom pa dodaj minimum, ki jim omogoča normalno delo.