Урок 4. Права доступа: chmod, chown и rwx
Linux с самого начала задуман для многих пользователей сразу. Поэтому у каждого файла и папки есть владелец, группа и права: кто может читать файл, кто — менять, кто — запускать. Права защищают систему от случайных ошибок и чужие файлы — от посторонних.
Как читать права
Права показывает ls -l. Строка для одного файла выглядит так (дата у вас может быть записана по-другому — это зависит от языка системы):
-rw-r--r-- 1 ivan ivan 1520 Mar 12 10:20 notes.txt| Часть | Что значит |
|---|---|
- | тип: - — обычный файл, d — папка, l — символическая ссылка |
rw- | права владельца: чтение и запись |
r-- | права группы: только чтение |
r-- | права всех остальных: только чтение |
ivan ivan | владелец и группа |
1520 | размер в байтах |
Три тройки букв — это права трёх сторон: владельца (u, user), группы (g, group) и остальных (o, others). Прочерк на месте буквы означает, что такого права нет. Свои группы показывает команда id или groups.
Что значат r, w и x
| Право | Для файла | Для папки |
|---|---|---|
r — чтение | читать содержимое | видеть список файлов |
w — запись | менять содержимое | создавать, переименовывать и удалять файлы в ней |
x — выполнение | запускать как программу или скрипт | заходить в папку (cd) и открывать файлы внутри |
Две вещи, которые часто удивляют. Удалить файл можно, если есть право записи в папку, — права самого файла на это не влияют (исключение — общие папки вроде /tmp: там удалить можно только свои файлы). А папка без x бесполезна: даже зная имя файла внутри, открыть его не получится.
chmod буквами
chmod (change mode) меняет права. Буквенная запись: кому (u, g, o или a — всем), что сделать (+ — добавить, - — убрать, = — задать ровно так) и какие права:
chmod u+x script.sh
chmod g-w report.txt
chmod o-rwx private.txt
chmod a+r readme.txt
chmod u=rw,go=r notes.txtu+x— владельцу можно запускать (так делают скрипт исполняемым);g-w— группе нельзя менять;o-rwx— остальным нельзя ничего;a+r— читать могут все;u=rw,go=r— владельцу чтение и запись, группе и остальным только чтение.
Просто chmod +x script.sh — то же, что a+x, но с учётом настройки umask (о ней ниже). Обычно это право на запуск для всех.
chmod числами
Каждое право — число: r = 4, w = 2, x = 1. Права одной стороны — их сумма: rwx = 7, rw- = 6, r-x = 5, r-- = 4. Три цифры подряд — владелец, группа, остальные:
chmod 755 script.sh
chmod 644 index.html
chmod 600 ~/.ssh/id_ed25519
chmod 700 ~/private| Число | Буквами | Когда ставят |
|---|---|---|
755 | rwxr-xr-x | программы, скрипты и папки: менять может только владелец |
644 | rw-r--r-- | обычные файлы: сайты, документы, настройки |
700 | rwx------ | личная папка, куда нельзя никому |
600 | rw------- | секреты: ключи SSH, файлы с паролями |
775 и 664 | rwxrwxr-x, rw-rw-r-- | общая работа группы над файлами |
chmod 777 разрешает всем пользователям системы и всем программам менять и запускать файл. На сервере это открытая дверь: взломанный сайт или чужая программа сможет подменить ваши файлы. Если «не хватает прав», правильнее поменять владельца (chown) или добавить пользователя в группу, а не открывать файл всем.
Владелец и группа
sudo chown ivan report.txt
sudo chown ivan:www-data /var/www/site
sudo chown -R ivan:ivan ~/projects
sudo chgrp www-data uploadchown пользователь файл— сменить владельца;chown пользователь:группа файл— владельца и группу сразу;-R— для папки со всем содержимым;chgrp— сменить только группу.
Отдать свой файл другому пользователю может только администратор, поэтому chown почти всегда запускают через sudo. www-data — пользователь и группа, от которых в Ubuntu и Debian работает веб-сервер.
Типичная ситуация: вы создали файлы командой с sudo, и теперь они принадлежат root — менять их без sudo нельзя. Верните их себе: sudo chown -R $USER:$USER ~/projects.
Права на папку целиком
chmod -R меняет права у папки и всего, что внутри. Но chmod -R 755 сделает исполняемыми и обычные файлы, а chmod -R 644 — закроет вход во все папки. Правильно — отдельно для папок и для файлов:
find ~/site -type d -exec chmod 755 {} +
find ~/site -type f -exec chmod 644 {} +Есть и короткий способ: большая X в chmod -R u+rwX,go+rX ~/site ставит право выполнения только папкам и тем файлам, которые уже были исполняемыми.
Не запускайте chmod -R и chown -R для системных папок (/, /usr, /etc, /var). Многие программы проверяют права своих файлов: после sudo chmod -R 777 /usr, например, перестаёт работать сам sudo, и систему придётся чинить с загрузочной флешки.
Права новых файлов: umask
Новые файлы получают права не случайно: из полных прав вычитается umask. Её показывает команда umask. При 0022 новые файлы получаются 644, а папки — 755; при 0002 — 664 и 775. Обычно её не трогают.
Root и sudo
Пользователь root — администратор: права доступа его почти не ограничивают. Команда sudo выполняет одну команду от имени root, если вам это разрешено. Поэтому sudo нужен для системных файлов в /etc и /var, но не нужен для файлов в домашней папке. Привычка писать sudo перед каждой командой опасна: ошибка с правами root ломает уже не ваши файлы, а систему.
Коротко
- Права — три тройки
rwx: владелец (u), группа (g), остальные (o); видны вls -l. - Для папки
x— право войти,w— создавать и удалять файлы в ней. chmod u+x,chmod g-w— буквами;chmod 755,chmod 644,chmod 600— числами (r=4,w=2,x=1).sudo chown пользователь:группа файл— сменить владельца,-R— для всей папки.777иchmod -Rпо системным папкам — путь к взлому и сломанной системе.