Linux permissions i bezpieczeństwo serwera
Bezpieczeństwo serwera zaczyna się od podstaw systemu: użytkowników, grup, praw dostępu, aktualizacji, ograniczenia usług i kontroli tego, co jest wystawione do sieci. To nie jest lista magicznych ustawień, tylko zestaw mechanizmów do świadomego ograniczania ryzyka.
Powiązane tematy: SSH i zdalna administracja, Debian - desktop i serwer, Docker oraz systemd, cron i schedulery.
1. Użytkownicy i grupy
id
whoami
groups
Utworzenie:
sudo adduser app
Grupa:
sudo groupadd developers
sudo usermod -aG developers user
2. Uprawnienia
ls -l
Przykład:
-rw-r----- 1 app developers config.yml
Znaczenie:
owner: rw-
group: r--
others: ---
3. chmod
Symbolicznie:
chmod u+x script.sh
chmod g-w file
chmod o-r file
Liczbowo:
r=4
w=2
x=1
Przykład:
chmod 640 config.yml
chmod 755 script.sh
4. chown
sudo chown app:app file
sudo chown -R app:app /srv/myapp
5. sudo
Nie pracuj stale jako root.
sudo command
Konfigurację sudo edytuj:
sudo visudo
6. SSH keys
Generowanie:
ssh-keygen -t ed25519
Kopiowanie:
ssh-copy-id user@server
7. sshd
Konfiguracja:
/etc/ssh/sshd_config
Po zmianach:
sudo sshd -t
sudo systemctl reload ssh
Nigdy nie zamykaj aktywnej sesji przed sprawdzeniem nowego logowania.
8. Wyłączenie hasła
Po sprawdzeniu kluczy:
PasswordAuthentication no
9. Root login
Często:
PermitRootLogin prohibit-password
albo całkowite wyłączenie.
10. Firewall
Na Debianie możesz użyć nftables lub UFW.
UFW przykład:
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
Status:
sudo ufw status verbose
11. Otwieraj minimum
Typowy web VPS:
22/tcp SSH
80/tcp HTTP
443/tcp HTTPS
Baza PostgreSQL nie musi być publiczna, jeśli korzysta z niej tylko lokalny backend.
12. Aktualizacje
sudo apt update
sudo apt upgrade
Sprawdzaj komunikaty o usługach wymagających restartu.
13. Usługi
systemctl --type=service --state=running
Wyłącz zbędne:
sudo systemctl disable --now SERVICE
14. Proces jako osobny user
Systemd:
[Service]
User=myapp
Group=myapp
ExecStart=/srv/myapp/myapp
15. Sekrety
Plik:
/etc/myapp/myapp.env
Uprawnienia:
sudo chown root:myapp /etc/myapp/myapp.env
sudo chmod 640 /etc/myapp/myapp.env
16. fail2ban
Może blokować powtarzające się próby logowania.
Nie zastępuje dobrych kluczy i konfiguracji SSH.
17. Logi SSH
journalctl -u ssh
18. Audyt portów
ss -lntup
Zadaj pytanie: - dlaczego ten port jest otwarty? - kto go używa? - czy musi być publiczny?
19. Backup
Bez backupu nie ma sensownego bezpieczeństwa operacyjnego.
Backup powinien być: - automatyczny, - testowany, - poza serwerem, - wersjonowany/rotowany.
20. Zasada least privilege
Każdy element ma mieć tylko uprawnienia, których potrzebuje.
Dotyczy: - userów, - plików, - baz, - API, - kontenerów, - GitHub Actions.
21. Checklist nowego VPS
- utwórz zwykłego usera,
- dodaj klucz SSH,
- sprawdź logowanie,
- zaktualizuj system,
- skonfiguruj firewall,
- ogranicz SSH,
- uruchamiaj aplikacje jako osobni userzy,
- skonfiguruj backup,
- sprawdź otwarte porty,
- ustaw monitoring/logi.
22. Co trzeba umieć
- chmod/chown,
- user/group,
- SSH key auth,
- firewall,
- systemd service user,
- kontrola otwartych portów,
- podstawowy hardening VPS.
Oficjalne źródła
- GNU Coreutils - prawa dostępu do plików: https://www.gnu.org/software/coreutils/manual/html_node/File-permissions.html
- OpenSSH sshd_config: https://man.openbsd.org/sshd_config
- Debian Security: https://www.debian.org/security/