Модул 3 · 3.1
Потребители, групи и права върху файловете
Модул 3: Потребители, права и sudo · Време за четене: 12 минути
Цел на урока: След този урок ще можете да създавате и преглеждате потребители и групи, да четете правата на файл или папка в ls -l и да ги задавате правилно с chmod и chown, без да отваряте всичко за всички.
Основни понятия: root (UID 0), обикновен потребител, системен потребител, /etc/passwd, /etc/shadow, група, adduser, id, rwx, собственик, група, останали, осмичен запис (644, 755, 600), chmod, chown, umask, setuid, 777
Всеки е число
Linux от самото начало е създаден за много потребители на една машина. Всеки работещ процес работи от името на някой потребител и всеки файл има собственик. За системата потребителят е преди всичко число, неговият UID:
- root има UID 0. Root може всичко: да чете и променя всеки файл, да спира всяка услуга, да създава всеки потребител. Няма въпрос „Сигурни ли сте?“.
- Обикновените потребители, като
anna, получават в Debian и Ubuntu UID от 1000 нагоре. Те могат да пишат в собствената си домашна папка и почти нищо друго. - Системните потребители имат нисък номер и обикновено нямат нито парола, нито shell. Под такъв потребител работят услугите: nginx под
www-data, PostgreSQL подpostgres. Ако такава услуга бъде хакната, нападателят има само правата на този потребител, а не тези на root.
Кой сте Вие, можете да видите с id:
anna@web1:~$ id
uid=1000(anna) gid=1000(anna) groups=1000(anna),27(sudo),100(users)Anna има UID 1000, собствена група anna и освен това членува в групите sudo и users.
Къде се намират потребителите
Списъкът с потребители се намира в /etc/passwd, по един ред за всеки потребител:
anna@web1:~$ grep -E '^(root|www-data|anna):' /etc/passwd
root:x:0:0:root:/root:/bin/bash
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
anna:x:1000:1000:Anna,,,:/home/anna:/bin/bashПолетата, разделени с двоеточия, са: име, x (паролата се пази другаде), UID, основна група, описание, домашна папка, shell. При www-data като shell е посочен /usr/sbin/nologin: влизането не е възможно.
Самите пароли се пазят криптирани (хеширани) в /etc/shadow. Този файл може да чете само root. Знак ! или * в началото на полето за парола означава: влизане с парола не е възможно. Така root е заключен по подразбиране в Ubuntu, както и в Debian, ако при инсталацията не сте задали парола за root.
Създаване на потребители и групи
В Debian и Ubuntu използвате удобната команда adduser:
root@web1:~# adduser anna
info: Adding user `anna' ...
info: Adding new group `anna' (1000) ...
info: Adding new user `anna' (1000) with group `anna (1000)' ...
info: Creating home directory `/home/anna' ...
info: Copying files from `/etc/skel' ...
New password:
Retype new password:
...adduser създава потребителя, собствена група със същото име и домашна папка и пита за парола. Съществува и по-ниското ниво useradd (в AlmaLinux и Rocky Linux това е обичайната команда), но без опции то прави по-малко: не задава парола, а на някои системи не създава и домашна папка.
Групата е начин да дадете права на няколко потребители наведнъж. Добавяне на потребител към група:
root@web1:~# adduser anna www-data
root@web1:~# usermod -aG www-data anna # същото, работи навсякъдеОбърнете внимание на -a при usermod: без -a заменяте всички допълнителни групи на потребителя само с тази една. Новата група влиза в сила едва след повторно влизане.
Блокиране на акаунт, без да го изтривате (например на бивш колега):
root@web1:~# usermod -L -e 1 jan-L заключва паролата, -e 1 прави акаунта изтекъл. Внимание: заключената парола не винаги спира SSH ключ. Затова премахнете и ключовете в /home/jan/.ssh/authorized_keys (урок 2.3); изтеклия акаунт (-e 1) sshd все пак отказва.
Четене на права
anna@web1:~$ ls -l /var/www/example.com
total 12
-rw-r--r-- 1 anna www-data 1520 Nov 9 10:12 index.html
-rw-r----- 1 anna www-data 412 Nov 9 10:14 config.php
drwxr-xr-x 2 anna www-data 4096 Nov 9 10:15 images
drwxrwxr-x 2 www-data www-data 4096 Nov 9 10:20 uploadsПървият блок от десет знака е ключът към всичко:
- Знак 1: видът.
-е обикновен файл,dе папка (directory),lе символна връзка (symlink). - Знаци от 2 до 4: какво може собственикът.
- Знаци от 5 до 7: какво може групата.
- Знаци от 8 до 10: какво могат останалите (всички други).
След тях идват броят връзки, собственикът, групата, размерът и датата.
При файл буквите означават:
| Буква | Значение при файл |
|---|---|
r | четене |
w | промяна |
x | изпълнение като програма или скрипт |
А при папка значението е малко по-различно:
| Буква | Значение при папка |
|---|---|
r | извеждане на имената на файловете в папката |
w | създаване, преименуване и изтриване на файлове в папката |
x | влизане в папката и отваряне на файловете в нея |
Последното изненадва много хора. Без x върху папка не можете да стигнете до файловете в нея, дори ако самите те са четими. А който има w върху папка, може да изтрива файлове в нея, дори ако те са на друг потребител.
В примера: index.html може да се чете от всички; config.php (с паролата за базата данни) Anna може да чете и променя, групата www-data (т.е. уеб сървърът) може само да чете, а останалите нямат никакви права. В uploads уеб сървърът може да пише, защото там се качват файловете на посетителите.
Правата като число
Правата често се записват с три цифри, т.нар. осмично число. Всяка буква има стойност: r = 4, w = 2, x = 1. Съберете ги за всяка група:
| Права | Число | Употреба |
|---|---|---|
rw-r--r-- | 644 | обикновен файл, който всеки може да чете |
rw-r----- | 640 | файл за собственика и групата, например конфигурация с парола |
rw------- | 600 | таен файл, например authorized_keys или частен ключ |
rwxr-xr-x | 755 | папка или програма, която всеки може да използва |
rwx------ | 700 | лична папка, например ~/.ssh |
Промяна на права: chmod и chown
anna@web1:~$ chmod 640 /var/www/example.com/config.php
anna@web1:~$ chmod g+w /var/www/example.com/uploads
root@web1:~# chown anna:www-data /var/www/example.com/config.phpchmod променя правата с число или с букви (u, g, o за собственик, група, останали; + или - и буквата). chown eigenaar:groep променя собственика и групата; това може само root. С -R двете команди действат върху цяла папка и точно тук често се допускат грешки: chmod -R 644 върху папка прави всички подпапки неизползваеми, защото папките се нуждаят от x. За цяло дърво по-добре използвайте find:
root@web1:~# find /var/www/example.com -type d -exec chmod 755 {} +
root@web1:~# find /var/www/example.com -type f -exec chmod 644 {} +Никога 777
„Не работеше, затова сложих 777.“ 777 означава: всеки на сървъра може да чете, променя и изпълнява това. Ако някога една услуга или един сайт на Вашия сървър бъде компрометиран, нападателят може да пише навсякъде, където има 777, включително във Вашите PHP файлове. Истинският проблем почти винаги е собственикът или групата: дайте на уеб сървъра чрез групата точно правото, от което се нуждае, и само върху папката, където е нужно.
Права по подразбиране и специални битове
Новите файлове получават правата си чрез umask. С обичайната umask 022 новите файлове получават 644, а новите папки 755. Вашата umask виждате с командата umask.
Понякога ще видите s вместо x, например при /usr/bin/passwd (-rwsr-xr-x). Това е битът setuid: програмата работи с правата на собственика (root), дори ако я стартира обикновен потребител. Това е необходимо за няколко системни програми, но никога не го задавайте сами на скрипт. Неочакван setuid файл е известен признак на проникване; с find / -perm -4000 -type f 2>/dev/null ще ги видите всички.
В AlmaLinux и Rocky Linux
Там adduser е друго име за useradd; използвайте useradd -m anna и след това passwd anna. Групи се добавят с usermod -aG. SELinux добавя допълнителен слой към правата от този урок: файл с правилни права може все пак да бъде отказан, ако върху него има грешен SELinux етикет (ls -Z го показва).
Обобщение
- Всеки потребител има UID; root (0) може всичко, а услугите работят под собствени системни потребители без shell.
- Потребителите са в
/etc/passwd, хешовете на паролите в/etc/shadow. Създавайте потребители сadduserи добавяйте групи сusermod -aG. ls -lпоказва вида, правата на собственика, групата и останалите, а след това собственика и групата. При папкаxозначава влизане, аwсъздаване и изтриване на файлове.- Обичайни числа: 644 и 755 за публично, 640 за конфигурация с тайни, 600 и 700 за лично. Никога 777.
- Използвайте
find, за да зададете права на цяло дърво; следете за setuid файлове.
Тест (quiz)
Задача
Задача Z3.1: Четене на права. Отворете примерния файл rechten-1.txt: изхода на id за трима потребители и на ls -l в една уеб папка. За всеки въпрос отговорете кой какво може (например: „Може ли уеб сървърът да променя config.php?“, „Кой файл има твърде широки права?“, „Кое число отговаря на .env?“). Програмата сравнява Вашите отговори с фиксирания ключ и за всеки въпрос обяснява защо.
Още за четене
Стъпките в тези статии се отнасят за хостинг пакетите и VPS сървърите на WebOké; при други доставчици работи по подобен начин.
- Забранено (403): Нямате разрешение за достъп до / на този сървър
- Вход във Вашия VPS чрез SSH (и създаване на SSH ключ)
- Безплатен курс по WordPress 7.4: Защита на сайта: права, хедъри и разширения за сигурност
- Ръководство на Debian за adduser: https://manpages.debian.org/trixie/adduser/adduser.8.en.html
- Ръководство на Debian за chmod: https://manpages.debian.org/trixie/coreutils/chmod.1.en.html
- Как да проверите и правилно да настроите правата за достъп до файловете на Вашия VPS
