Към съдържанието

Настройки за бисквитки

Изберете кои видове бисквитки разрешавате. Можете да промените избора си по всяко време чрез „Настройки за бисквитки“ в долната част на всяка страница. Декларация за поверителност

Необходими

Винаги включени

Нужни са за вход, за запазване на количката и на Вашите избори. Те са винаги включени.

Кои бисквитки?
  • weboke_sessie, weboke_klant, weboke_remember: Вашата сесия и оставането в акаунта
  • weboke_basket: Вашата количка
  • wkBtwIncl: показване на цените с или без ДДС
  • wok_cookies: Вашият избор за бисквитките, 12 месеца

Измерват коя реклама води до посещение или поръчка, за да не плащаме за реклами без резултат.

Кои бисквитки?
  • Google Ads чрез Google Tag Manager (_gcl_au, _gcl_aw), до 90 дни
  • OpenAI Ads, реклами в ChatGPT
  • wok_aff: кой партньор Ви е препратил към нас (партньорска програма), 60 дни

4,6

Държава и език

Всяка държава има собствен сайт, с цените и ДДС на тази държава.

Преглед

Потребители, групи и права върху файловете

Модул 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-x755папка или програма, която всеки може да използва
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.php

chmod променя правата с число или с букви (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)

1. Какво означава -rw-r----- при файл със собственик anna и група www-data?



2. Какво става, ако една папка има права drw-r--r-- (т.е. никъде няма x)?



3. Изпълнявате usermod -G www-data anna (без -a). Какъв е резултатът?



4. Един плъгин не може да пише в /var/www/example.com/uploads. Кое е най-доброто решение?



5. Защо nginx работи под потребителя www-data, а не под root?



Задача

Задача Z3.1: Четене на права. Отворете примерния файл rechten-1.txt: изхода на id за трима потребители и на ls -l в една уеб папка. За всеки въпрос отговорете кой какво може (например: „Може ли уеб сървърът да променя config.php?“, „Кой файл има твърде широки права?“, „Кое число отговаря на .env?“). Програмата сравнява Вашите отговори с фиксирания ключ и за всеки въпрос обяснява защо.

Задача Z3.1: Четене на права

Файл към тази задача: rechten-1.txt










Това, което въвеждате, и резултатите от проверката не се съхраняват. Браузърът Ви запомня отговорите и дали сте изпълнили задачата. Ако сте влезли, запазваме само дали задачата е била (почти) правилна в Моите курсове; и там можете да го изтриете.

Още за четене

Стъпките в тези статии се отнасят за хостинг пакетите и VPS сървърите на WebOké; при други доставчици работи по подобен начин.

Моля, изчакайте…

Настройте домейните си

За всеки домейн настройте сървърите за имена, връзката с хостинга и кой ще бъде собственикът.

Домейните Ви се зареждат…