# Atrybuty plików i katalogów

**Wprowadzenie:**

Poza standardowymi uprawnieniami (rwx), system Linux oferuje dodatkowe mechanizmy kontroli dostępu do plików i katalogów. Należą do nich pliki ukryte oraz rozszerzone atrybuty zarządzane poleceniem `chattr`.

## 1. Pliki ukryte w systemie Linux/Unix

**Co to są pliki ukryte?**

W systemach Unix/Linux plikami ukrytymi nazywamy pliki i katalogi, których nazwa zaczyna się od kropki (`.`). Są one domyślnie niewidoczne przy standardowym wywoływaniu `ls`. Pliki ukryte często zawierają konfiguracje użytkownika lub aplikacji.

**Wyświetlanie plików ukrytych:**

```
ls -a
```

Pokazuje wszystkie pliki, w tym ukryte.

```
ls -la
```

Szczegółowy widok ze wszystkimi plikami, w tym ukrytymi.

**Przykłady typowych plików ukrytych:**

- `.bashrc` – konfiguracja powłoki bash
- `.bash_profile` – konfiguracja przy logowaniu
- `.ssh/` – katalog z kluczami SSH
- `.gitignore` – plik konfiguracyjny git
- `.vimrc` – konfiguracja edytora vim

**Tworzenie ukrytego pliku:**

```
touch .ukryty_plik.txt
```

Wystarczy, że nazwa zaczyna się od kropki.

## 2. Rozszerzone atrybuty plików – `chattr`

**Co to są rozszerzone atrybuty?**

Rozszerzone atrybuty to dodatkowe flagi kontrolujące zachowanie plików na poziomie systemu plików. Pozwalają one na bardziej precyzyjną kontrolę niż standardowe uprawnienia rwx. Są obsługiwane głównie w systemach plików ext2, ext3, ext4.

**Komenda `chattr` – zmiana atrybutów:**

```
chattr +i plik.txt
```

Ustawia atrybut niezmienności (immutable). Plik nie może być modyfikowany, usuwany, zmieniany ani przenoszony – nawet przez użytkownika root!

```
chattr -i plik.txt
```

Usuwa atrybut niezmienności.

## 3. Najważniejsze atrybuty `chattr`

**Atrybut `i` (immutable – niezmienny):**

```
chattr +i /etc/ważny_config.conf
```

Plik nie może być w żaden sposób modyfikowany. Przydatne do ochrony krytycznych plików konfiguracyjnych przed przypadkową zmianą.

**Atrybut `a` (append only – tylko dopisywanie):**

```
chattr +a /var/log/aplikacja.log
```

Plik może być tylko rozszerzany (dopisywanie na końcu), ale nie można modyfikować ani usuwać istniejącej zawartości. Idealne dla plików logów.

**Atrybut `c` (compressed – kompresowany):**

```
chattr +c duży_plik.txt
```

Jądro automatycznie kompresuje plik na dysku (jeśli system plików to obsługuje).

**Atrybut `d` (no dump – pomijany w backup):**

```
chattr +d cache.tmp
```

Plik jest pomijany przez narzędzie `dump` podczas tworzenia kopii zapasowej.

**Atrybut `s` (secure deletion – bezpieczne usuwanie):**

```
chattr +s tajny_dokument.txt
```

Przy usuwaniu pliku, jego bloki na dysku są nadpisywane zerami, co utrudnia odzyskanie danych.

**Atrybut `u` (undeletable – możliwy do odzyskania):**

```
chattr +u ważny_plik.txt
```

System zachowuje informacje pozwalające na odzyskanie pliku po usunięciu (jeśli system plików to wspiera).

## 4. Komenda `lsattr` – wyświetlanie atrybutów

```
lsattr plik.txt
```

Pokazuje aktualne atrybuty pliku.

```
lsattr -d katalog/
```

Pokazuje atrybuty samego katalogu (a nie jego zawartości).

```
lsattr -a
```

Pokazuje atrybuty wszystkich plików, w tym ukrytych.

**Przykładowy wynik:**

```
$ lsattr plik.txt
----i---------e----- plik.txt
```

Litera `i` oznacza atrybut immutable.

## 5. Rekurencyjna zmiana atrybutów

```
chattr -R +i /etc/config/
```

Opcja `-R` (recursive) stosuje atrybut do wszystkich plików i podkatalogów.

## 6. Praktyczne przykłady zastosowań

```bash
# Ochrona pliku konfiguracyjnego przed modyfikacją
sudo chattr +i /etc/ssh/sshd_config
# Teraz nawet root nie może go zmienić bez usunięcia atrybutu

# Sprawdzenie atrybutów
lsattr /etc/ssh/sshd_config

# Aby móc edytować, trzeba najpierw usunąć atrybut
sudo chattr -i /etc/ssh/sshd_config

# Zabezpieczenie pliku logów – tylko dopisywanie
sudo chattr +a /var/log/aplikacja.log

# Ochrona całego katalogu przed usunięciem
sudo chattr -R +i /opt/produkcja/

# Weryfikacja atrybutów wszystkich plików w katalogu
lsattr -a /home/user/

```

## 7. Ważne uwagi

- Rozszerzone atrybuty działają na poziomie systemu plików – nie wszystkie systemy plików je obsługują
- Tylko użytkownik root może zmieniać większość atrybutów
- Atrybuty są niezależne od standardowych uprawnień Unix (rwx)
- Podczas przenoszenia plików między systemami atrybuty mogą zostać utracone
- Warto dokumentować użycie atrybutów, aby inni administratorzy wiedzieli o ich zastosowaniu