Sudo. О правах в Linux (вместо предисловия)
- Подробности
- Опубликовано 21.03.2016 05:14
Sudo — это вещь незаменимая в любом Linux-дистрибутиве. Как мы знаем, Linux разрабатывался как многопользовательская система, как серверная ОС, и поэтому безопасность в нем стоит на первом месте. Sudo, в свою очередь — это довольно простенький, но незаменимый инструмент, позволяющий испольнять некоторые команды от имени суперпользователя, не прибегая к полноценному переходу в рут-оболочку, и даже не говоря пользователю пароль от root. И даже если вы работаете за компьютером в одиночку, права должны быть сконфигурированы правильно — это не только говорит о вашем профессионализме в работе с системой, но и убережет от множества возможных (иногда даже случайных) проблем.
Для начала вкратце рассмотрим, как работают права в Linux. Каждый файл в системе принадлежит определенному пользователю и группе. Также, всегда есть суперпользователь (root), который имеет право читать, запускать и редактировать любые файлы в системе. Обычный пользователь — только те, которыми владеет, а также файлы, которые разрешены для чтения, запуска и редактирования его группе или группам. Также, каждый член определенной группы может распоряжаться файлом, который принадлежит этой группе, согласно с правами, выставленными в данном файле.
Узнать, в какие группы включен пользователь, можно командой:
groups (без аргументов, для своего пользователя)
И:
groups [user] — в какие группы включен user.
Узнать, какие права выставлены в файле, когда он был редактирован в последний раз, а также кто его владелец и какой группе принадлежит файл, можно с помощью команды:
ls -l [file]
Например:
ls -l /etc/passwd
-rw-r--r-- 1 root root 1076 фев 6 10:44 /etc/passwd
В данном случае, файл принадлежит пользователю root и группе root.
Первая часть вывода говорит о типе файла и выставленных правах.
«-» - означает, что это обычный файл. Кроме этого, существует также:
«d» - директория.
«l» - симлинк.
И другие специфические типы, но чаще всего — это именно данные три типа (симлинк — это что-то вроде «ярлык» в Windows).
Далее идет ещё девять знаков, каждый из который зничит:
r (read) — разрешение на чтение.
W (write) — разрешение на запись.
X (execute) — разрешение на запись.
Первые три знака — права владельца.
Вторые три знака — права группы.
Третьи три — права для всех остальных пользователей системы.
Вернемся к примеру:
-rw-r--r-- 1 root root 1076 фев 6 10:44 /etc/passwd
Итак — это файл, владелец (root) может его читать и записывать, группа может только читать, остальные пользователи также могут только читать.
Ls - l также работает рекурсивно — применив его на каталог, мы получим информацию о всех файлах в данном каталоге.
Полезно будет знать и следующие команды:
chown [user] [file] — задает владельцем file пользователя user.
Chgrp [group] [file] — задает группой file группу group.
Chown -R [user] [directory] — рекурсивно меняет владельца всех файлов в директории directory на user.
Однако, эти команды меняют только владельцев. Для смены прав чтения/правки/запуска, существует утилита chmod.
К примеру, откроем права на запуск какого-либо файла для всех пользователей:
chmod +x ~/Desktop/new_file
Но если мы хотим, чтобы файл мог запускать только владелец? Тогда напишем так:
chmod u+x ~/Desktop/new_file
«u» - означает прямого владельца файла.
«g» - группу, владеющую файлом.
«o» - всех остальных.
Добавляя в качестве первого аргумента одну из этих букв, мы, соответственно, именим права только для неё (можно комбинировать, и писать «chmod ug +x ~/file» - тогда файл станет запускаемым для пользователя и группы владельцев.
«x» - в примере выше, это та самая буква, означающая «execute». Соответственно «+w» - добавляет права на запись, а «+r» - на чтение. Но если мы хотим отнять права, а не добавлять? Тогда, вместо «+» пишите «-».
Ещё немного примеров:
chmod go-rwx ~/Desktop/new_file
Здесь мы лишили всех, кроме прямого владельца файла, прав на чтение, запись и запуск.
ls -l ~/Desktop/new_file
-rwx------ 1 user user 7 мар 4 20:54 /home/user/Desktop/new_file
chmod o-wx ~/Desktop/new_file
Здесь мы отнимаем у всех, кроме владельца и группы файла права на запись и запуск.
Chmod oug+rwx ~/Desktop/new_file
А здесь — разрешаем всем в системе делать с файлом что угодно.
ls -l ~/Desktop/new_file
-rwxrwxrwx 1 user user 7 мар 4 20:54 /home/user/Desktop/new_file
Пока это всё, что вам потребуется знать о правах (ведь если говорить подробнее, статья выйдет просто огромной). Замечательные статьи по теме:
http://habrahabr.ru/post/109392/
http://help.ubuntu.ru/manual/пользователи_и_группы
Само собой, вы бы не хотели, чтобы любой мог выполнять команды вроде chown и свободно менять права на чужие файлы, или выполнить useradd -G root user (команда добавления пользователя user в группу root) и получил полный контроль над системой. Но и запуск подобных команд только суперпользователем — также крайность, даже если вы работаете в системе один — доступ в систему может получить злоумышленник, вы можете оставить терминал с открытой оболочкой под рутом и кто-то решит заглянуть, или банальная случайность — не подумав ввести под рутом что-то вроде rm -rf, и наслаждаться результатом.
Для того, чтобы избежать всего этого, был придуман sudo.