Sudo. О правах в Linux (вместо предисловия)

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.

Советуем почитать

Компьютерный портал "Компаньон" © 2016.
В случае перепечатки материалов обязательна прямая ссылка на сайт cs-companion.ru.