Note: This tutorial applies to the BASH shell and UNIX based operating systems. Windows OS will be different.
- Что такое sudo
- Содержание
- Содержание
- Время действия введённого пароля
- What is a User?
- The Root User
- Getting more information about a user
- Bashrc,. bash_profile,. bash_login,. profile
- Использование традиционного root аккаунта и команды su
- Ubuntu 11.04 и младше
- Ubuntu 11.10 и старше
- Получение прав суперпользователя для выполнения нескольких команд
- Sudo не спрашивает пароль
- Настройка sudo и прав доступа на выполнение различных команд
- Разрешение пользователю выполнять команду без ввода пароля
- Создание синонимов (alias`ов)
- Где используется sudo
- What is a Group?
- Когда нужно работать под пользователем root?
- Графически приложения от имени суперпользователя
- Запуск графических программ с правами администратора
- Вход под суперпользователем
- Запуск программ с правами администратора в терминале
- Ссылки
- Setting permissions
- Переключение на суперпользователя в терминале
- Использование sudo
- Получение прав root без переключения
- Выводы
Что такое sudo
sudo — это утилита, предоставляющая привилегии root для выполнения административных операций в соответствии со своими настройками. Она позволяет легко контролировать доступ к важным приложениям в системе. По умолчанию, при установке Ubuntu первому пользователю (тому, который создаётся во время установки) предоставляются полные права на использование sudo. Т.е. фактически первый пользователь обладает той же свободой действий, что и root. Однако такое поведение sudo легко изменить, об этом см. ниже в пункте про настройку sudo.
Содержание
Для начала определимся в терминах:
-
root — суперпользователь системы. А если более точно, то это пользователь с идентификатором 0. Имя здесь не особо важно. Хотя по умолчанию это общее имя пользователя с нулевым идентификатором пользователя для всех unix-like операционных систем. Это пользователь обладает наивысшими привилегиями в ОС.
-
sudo — консольная команда выполняющая команду переданную ей как аргумент с правами суперпользователя (root). Графический аналог — gksu, kdesu.
-
# — символ подсказки в консоли, который явно указывает, что команда будет выполнена под учетной записью root (в отличии от символа $, который говорит что команда будет выполнена от имени обычного пользователя).
Как вы знаете, Linux очень серьезно относится к управлению пользователями и предоставлению им прав на работу с системой. Обычный пользователь может записывать файлы только в свой каталог и каталог /tmp/. Также есть возможность читать некоторые файлы в корневой файловой системе. Но вы не можете устанавливать программы, ведь для этого нужно право на запись, не можете изменять атрибуты файлов, не можете запускать сервисы, не можете читать некоторые файлы логов и еще много чего не можете.
В Linux управлять корневой файловой системой и создавать там файлы имеет право только пользователь root.
В этой статье мы рассмотрим какие программы нужны для того, чтобы получить права root пользователя linux, как они работают, как выполнять программу с правами root от обычного пользователя и как запускать графические программы с правами root. А также выясним что такое sudo в чем разница su или sudo.
Очень долго перечислять чего не может обычный пользователь Linux, проще сказать на что у него есть право, а именно при стандартной настройке полномочий для файлов в Linux, обычный пользователь может:
- Читать, писать и изменять атрибуты файлов в своем каталоге
- Читать, писать, изменять атрибуты файлов в каталоге /tmp
- Выполнять программы там, где это не запрещено с помощью флага noexec
- Читать файлы, для которых установлен флаг чтения для всех пользователей.
Если же нужно сделать что-то большее нам понадобятся права root пользователя linux. У root есть право делать все в вашей файловой системе независимо от того какие права установлены на файл.
Содержание
В любой Linux-системе обязательно есть один привилегированный пользователь — root. Этот пользователь имеет права на выполнение любых действий, удаление любых файлов и изменение любых параметров. Как-то ограничить свободу действий root практически невозможно. С другой стороны, все остальные пользователи системы обычно не имеют большинства необходимых прав, например, прав на установку программ, поскольку это является административной операцией, права на которую есть только у root. Ещё одной распространённой операцией, доступной только суперпользователю, является копирование и изменение файлов в системных папках, куда обычный пользователь доступа не имеет.
Раньше данная проблема решалась достаточно просто: при обладании паролем root можно было зайти в систему под его аккаунтом либо временно получить его права, используя команду su
. Потом выполнить все необходимые операции и вернуться обратно под обычного пользователя. В принципе, такая схема работает неплохо, однако у неё есть много существенных недостатков, в частности, невозможно никак (точнее, очень сложно) ограничивать административные привилегии только определённым кругом задач.
Поэтому в современных дистрибутивах Linux вместо root аккаунта для администрирования используется утилита sudo
.
В Ubuntu по умолчанию root аккаунт вообще отключён, т.е. вы никаким способом не сможете попасть под root, не включив его. root именно что отключён, т.е. он присутствует в системе, под него всего лишь нельзя зайти. Если вы хотите вернуть возможность использовать root, смотрите ниже пункт о включении root аккаунта.
В данном посте рассматривается управление доступом в Linux/UNIX системах. Будут рассмотрены следующие вопросы:
- Общие правила управления доступом
- Атрибуты объектов в Linux
- Первый и одиннадцатый символы
- Изменение разрешений
- Числовой формат разрешений
- Umask, setuid, setgid, sticky bit, immutable bit
- SELinux
Ниже обозначаются некоторые общие/базовые правила управления доступом в Linux/UNIX системах:
- Объекты (например, файлы и процессы) имеют владельцев. Владельцы обладают обширным (но необязательно неограниченным) контролем над своими объектами.
- Пользователь является владельцем новых объектов, создаваемых им самим.
- Пользователь root с особыми правами, известный как суперпользователь, может действовать как владелец любого объекта в системе.
- Только суперпользователь может выполнять административные операции особого значения (например, выполнять некоторые системные вызовы).
Далее подробнее рассматривается каждый из пунктов.
Файл в традиционной модели Linux/UNIX-подобных систем принадлежит владельцу и группе. Владелец файла имеет особую привилегию, недоступную другим пользователям системы: ему разрешено менять права доступа к файлу. В частности, владелец может задать права доступа так, что никто, кроме него, не сможет обращаться к файлу (права можно установить настолько строгими, что даже сам владелец файла не сможет им воспользоваться). Владельцем файла всегда является один пользователь, тогда как в группу владельцев могут входить несколько пользователей.
Учетная запись root в Linux/UNIX принадлежит пользователю-администратору, известному как суперпользователь. Root имеет неограниченные привилегии над системой. Определяющей характеристикой учетной записи суперпользователя является значение UID, равное нулю:
[root@dushanbe ~]# id uid=0(root) gid=0(root)
Другими словами система Linux/UNIX позволяет суперпользователю (т.е. всякому процессу, текущий идентификатор пользователя которого равен нулю) выполнять над файлом или процессом любую допустимую операцию (например, создание файлов устройств, увеличение лимитов использования ресурсов и повышение приоритетов процессов, конфигурирование сетевых интерфейсов и т.д.).
В примере ниже видно, как подгружается домашняя директория, в зависимости от того, была выполнена команда su с дефисом,
[root@dushanbe ~]# pwd /root [root@dushanbe ~]# su test [test@dushanbe root]$ pwd /root
или без него.
[root@dushanbe ~]# pwd /root [root@dushanbe ~]# su - test [test@dushanbe ~]$ pwd /home/test
Чаще всего для получения прав суперпользователя применяется утилита sudo.
Sudo — это программа для Linux/Unix систем, которая позволяет пользователям запускать программы с привилегиями безопасности другого пользователя, по умолчанию суперпользователя.
В отличие от связанной команды su, пользователи должны предоставить свой пароль для аутентификации. После аутентификации, если файл конфигурации, который обычно находится в /etc/sudoers, позволяет предоставить пользователю доступ, система выполняет требуемую команду. Чтобы дать пользователю права на sudo привилегии, надо добавить пользователя в группу wheel.
[rustam@dushanbe ~]$ /sbin/service httpd restart rustam is not in the sudoers file. This incident will be reported. [root@dushanbe ~]# usermod –aG wheel rustam [rustam@dushanbe ~]$ /sbin/service httpd restart Operation not permitted [rustam@dushanbe ~]$ sudo /sbin/service httpd restart [sudo] password for rustam: Stopping httpd: [ OK ] Starting httpd: [ OK ]
Атрибуты объектов в Linux
Каждый файл в Linux имеет владельца и группу, связанные с ним. Пользователи, не являющиеся владельцем и не состоящие в группе, относятся к остальным пользователям (other). Ниже подробно рассматривается атрибуты файла на примере листинга, где выполнена команда ls –l.
[rustam@dushanbe ~]$ ls -l /home/rustam -rw-r--r--. 1 rustam rustam 124 Mar 31 20:10 .bashrc -rwxr-xr-x. 1 root root 943360 May 21 20:10 only.for.root -rw-rw-r--. 1 rustam development 116 Nov 30 10:21 helloworld.C
В этом примере владельцем файла .bashrc является пользователь rustam, и этот файл принадлежит группе rustam, которая является основной группой этого пользователя. Аналогично, владельцем файла only.for.root является пользователь root, и файл принадлежит группе root. Владельцем файла helloworld.C является пользователь rustam, но этот файл принадлежит группе development. Имена групп и пользователей принадлежат различным пространствам имен, поэтому указанное имя может являться как именем пользователя, так и именем группы. В действительности многие дистрибутивы по умолчанию создают для каждого нового пользователя назначаемую ему группу с таким же названием.
Описывается каждый из параметров вывода команды ls –l:
-rw-rw-r--. 1 rustam development 116 Nov 30 10:21 helloworld.C Разрешения файла владелец группа размер файла дата последнего изменения имя файла
Подробнее описание разрешений файла.
В модели безопасности Linux для каждого объекта файловой системы существует три типа разрешений: чтение (r), запись (w) и выполнение (x). Разрешение на запись также позволяет изменять или удалять объект. Кроме того, эти разрешения указываются отдельно для владельца файла, членов группы файла и для всех остальных.
В столбце листинга содержится строка из 11 символов. Одиннадцатый символ был введен не так давно, о нем будет рассказано ниже. Первый символ указывает на тип объекта (в этом примере символ “-” означает обычный файл –rw-r–r–.), а остальные девять символов образуют три группы по три символа в каждой. Первая группа содержит разрешения на чтение, запись и выполнение для владельца файла. Символ “-” означает, что соответствующее разрешение не предоставлено (-rw–r–r–.). Таким образом, пользователь rustam может читать и записывать в файл .bashrc, но не выполнять его, тогда как пользователь root может читать, записывать и выполнять файл only.for.root. Вторая группа содержит разрешения на чтение, запись и выполнение для группы файла (например, -rw-rw–r–.). Члены группы development могут читать и записывать в файл helloworld.C (который принадлежит пользователю rustam), а все остальные пользователи системы (третья группа) могут только читать его (-rw-rw-r—.). Аналогично, члены группы root и все остальные могут читать или выполнять файл only.for.root.
Для директорий используются те же самые флаги разрешений, что и для обычных файлов, но интерпретируются они по-другому. Пользователи, имеющие разрешение на чтение директории, могут просматривать ее содержимое. Пользователи, имеющие разрешение на запись в директорию, могут создавать и удалять из нее файлы. Пользователи, имеющие разрешение на выполнение, могут входить в эту директорию и во все ее поддиректории. При отсутствии разрешений на выполнение, объекты файловой системы, находящиеся в директории, недоступны. При отсутствии разрешений на чтение объекты файловой системы, находящиеся внутри директории, недоступны для просмотра при выводе содержимого директории, но к ним можно получить доступ, зная полный путь.
[rustam@dushanbe ~]$ ls -l /home total 32 drwxr-x---. 38 test test 12288 Nov 30 10:49 editor drwxr-xr-x. 41 rustam rustam 4096 Nov 30 10:51 iam
Первый символ в подробном выводе содержимого директории описывает тип объекта (d означает директорию). Вывод команды ls -l может содержать объекты файловой системы, отличные от файлов и директорий, что можно определить по первому символу листинга. Другие типы объектов файловой системы:
Код Тип объекта
– Обычный файл
l Символическая ссылка
c Специальное символьное устройство
b Специальное блочное устройство
p Буфер FIFO
Одиннадцатый символ в выводе команды ls (-rw-r–r–.) является нововведением, поэтому в некоторых дистрибутивах он пока не применяется. В других случаях одиннадцатым символом может быть пробел, поэтому можно не заметить его. Этот символ указывает на использование альтернативного метода доступа к файлу. Если символ, следующий за битами режима файла, является пробелом, альтернативный метод доступа не используется. Если же этот символ является печатным знаком, то используется альтернативный метод доступа. Таким методом может являться, например, список контроля доступов. Символ ‘.’ (точка) команды GNU ls означает, что для файла используется только контекст безопасности SELinux (о нем ниже). Файлы, для которых используются любые другие комбинации альтернативных методов доступа, отмечены знаком ‘+’ (плюс).
Разрешения для файла можно изменять несколькими способами. Для этого используется команда chmod.
Предполагается, что надо добавить сценарию разрешение на исполнение. Для этого используется команда chmod с опцией +x.
[rustam@dushanbe ~]$ ls -l /home/rustam -rw-rw-r--. 1 rustam rustam 20 Mar 31 2010 run.sh [rustam@dushanbe ~]$ chmod +x run.sh [rustam@dushanbe ~]$ ls -l /home/rustam -rwxrwxr-x. 1 rustam rustam 20 Mar 31 2010 run.sh
Подобным образом можно использовать опцию +r для установки разрешений на чтение и опцию +w для установки разрешений на запись. Фактически, можно использовать любые комбинации опций r, w и x. Например, команда chmod +rwx одновременно устанавливает для файла разрешения на чтение, запись и выполнение. Запуск chmod в такой форме добавляет разрешения, которые еще не были установлены.
[rustam@dushanbe ~]$ ls -l /home/rustam -r--r--r--. 1 rustam rustam 20 Mar 31 2010 run2.sh [rustam@dushanbe ~]$ chmod ug+wx run2.sh [rustam@dushanbe ~]$ ls -l /home/rustam -rwxrwxr--. 1 rustam rustam 20 Mar 31 2010 run2.sh
Иногда требуется не добавить разрешения, а отозвать их. Для этого надо заменить + на -, и все указанные разрешения будут отозваны. К примеру:
[rustam@dushanbe ~]$ ls -l /home/rustam -rwxr-xrw-. 1 rustam rustam 20 Mar 31 2010 run2.sh [rustam@dushanbe ~]$ chmod o-rwx run2.sh [rustam@dushanbe ~]$ ls -l /home/rustam -rwxr-x---. 1 rustam rustam 20 Mar 31 2010 run2.sh
Для установки только определенного набора разрешений вместо знаков + или – используется знак =. Если необходимо установить различные разрешения для пользователя, группы и всех остальных, вы можете разделить различные выражения запятыми, например, ug=rwx,o=rx; можно также указывать разрешения в числовом формате, как это будет описано далее.
Числовой формат разрешений
Выше для установки разрешений использовали символы ugoa и rxw. В каждой группе существует три типа разрешений. Вместо символов для установки разрешений можно использовать восьмеричные числа. При таком способе установки разрешений может потребоваться использовать до четырех восьмеричных чисел. Первое число будет рассмотрено при обсуждении атрибутов (см. ниже). Второе число определяет разрешения для пользователя/владельца, третье число разрешения для группы, а четвертое число определяет разрешения для всех остальных. Каждое из этих трех чисел формируется путем сложения необходимых разрешений: чтение (4), запись (2) и выполнение (1). Например, сценарий run.sh был создан с разрешениями -rw-r–r–, что соответствует значению 644 в восьмеричной форме. Установка разрешений на выполнение для всех пользователей и групп без исключения изменит это значение на 755.
[rustam@dushanbe ~]$ touch run.sh [rustam@dushanbe ~]$ ls -l total 0 -rw-r--r-- 1 rustam rustam 0 Aug 25 17:44 run.sh [rustam@dushanbe ~]$ chmod 755 run.sh [rustam@dushanbe ~]$ ls -l total 0 -rwxr-xr-x 1 rustam rustam 0 Aug 25 17:44 run.sh
Использование числового формата очень удобно тогда, когда необходимо установить все разрешения сразу, не указывая их для каждой группы. В таблице ниже перечислены все возможные разрешения в числовом формате.
Символическое представление Восьмеричное значение
-wx 3
–x 1
— 0
По умолчанию, umask равна 0022 (022) или 0002 (002). По умолчанию umask 0002 используется для обычного пользователя. С этой маской права по умолчанию, для директории, равны 775, а для файла 664. Для суперпользователя (root) umask по умолчанию равна 0022. С этой маской права по умолчанию, для директории, равны 755, а для файла 644.
Каким образом значение 022 даёт файлу разрешения 644? Все просто – значение маски равняется вычитаемому значению из базовых прав (666 для файлов и 777 для директорий), то есть 666-022=644. Таким образом, при маске 022 права по умолчанию для файлов будут равны 644. Например, если необходимо, чтобы директории по умолчанию создавались с правами 700, то надо задать маску 077 (777-700=077).
[rustam@dushanbe ~]$ umask 0022 [rustam@dushanbe ~]$ touch file1 [rustam@dushanbe ~]$ ls -l total 0 -rw-r--r-- 1 rustam rustam 0 Aug 25 17:48 file1 [rustam@dushanbe ~]$ umask 0255 [rustam@dushanbe ~]$ touch file2 [rustam@dushanbe ~]$ ls -l total 0 -rw-r--r-- 1 rustam rustam 0 Aug 25 17:48 file1 -r---w--w- 1 rustam rustam 0 Aug 25 17:48 file2
Setuid и setgid, sticky bit
Например, пользователи должны иметь возможность изменять свои пароли. Но поскольку пароли хранятся в защищенном файле /etc/shadow, пользователям нужно использовать команду passwd с полномочиями setuid, чтобы “усилить” свои права доступа. Команда passwd проверяет, кто ее выполняет, и, в зависимости от результата, настраивает свое поведение соответствующим образом, поэтому обычные пользователи могут менять только собственные пароли, а суперпользователь — любые.
[rustam@dushanbe ~]$ ls -l /bin/passwd -rwsr-xr-x. 1 root root 27768 Feb 11 2017 /bin/passwd
Setuid бит отображается буквой s вместо x в первом наборе разрешений (owner).
[rustam@dushanbe ~]$ ls -ld test drwxrwsr-x. 2 egdoc egdoc 4096 Nov 1 17:25 test
Setgid бит отображается буквой s вместо x во втором наборе разрешений (group).
Есть еще один бит, называемый дополнительным (sticky bit). В первых UNIX-системах дополнительный бит запрещал выгрузку программ из памяти. В эти дни он утратил свое значение и игнорируется многими системами. Если дополнительный бит установлен для каталога, то файловая система позволит удалять и переименовывать его файлы только владельцу каталога, владельцу файла или суперпользователю. Иметь одно лишь право записи в каталог недостаточно. Такая мера позволяет несколько лучше защитить каталоги вроде /tmp.
[rustam@dushanbe ~]$ $ ls -ld /tmp drwxrwxrwt. 14 root root 300 Nov 1 16:48 /tmp
Sticky бит отображается буквой t вместо x в третьем наборе разрешений (others).
Бит неизменяемости файла (immutable bit) может быть назначен файлу, который размещён в расширенной файловой системе (Ext3, Ext4, Extended File System), для его защиты от изменений. “immutable bit” может быть добавлен к атрибутам файла с помощью команды chattr и только суперпользователем. После того, как файлу будет назначен атрибут immutable, над этим файлом будут запрещены модификация, переименование, удаление, возможность создавать мягкие (soft) и жесткие (hard) ссылки.
Установка атрибута immutable осуществляется командой chattr следующим образом:
[root@dushanbe ~]# chattr +i /tmp/testfile
Проверить, защищен ли файл от изменений с помощью атрибута immutable можно с помощью команды lsattr:
[root@dushanbe ~]# lsattr /tmp/testfile ----i--------e-- /tmp/testfile [root@dushanbe ~]# rm /tmp/testfile rm: cannot remove /tmp/testfile: Operation not permitted
Удалить атрибут immutable можно всё той же командой chattr:
[root@dushanbe ~]# chattr -i /tmp/testfile [root@dushanbe ~]# lsattr /tmp/testfile -------------e-- /tmp/testfile
SELinux — это реализация системы принудительного управления доступом доступа (mandatory access control — MAC), в которой все привилегии назначаются администраторами. В среде MAC пользователи не могут делегировать свои права и не могут устанавливать параметры контроля доступа на объекты, которыми они (пользователи) владеют.
Когда говорят о SELinux всегда упоминаются субъекты и объекты. То есть SELinux это разрешения и запреты, которые применяются в действиях между субъектами и объектами.
Субъекты – это пользователи, которые выполняют какие-либо операции в системе. Часто под субъектами также подразумеваются программы (процессы). Иначе говоря, субъекты это те, кто выполняет некие действия. Объекты — это то, над чем действия выполняются. Чаще всего под объектами подразумеваются файлы данных. Но это могут быть и устройства и даже программы.
SELinux поддерживает два режима работы:
Permissive – разрешается нарушение политики безопасности. Такие нарушения только регистрируются в системном журнале. То есть по сути SELinux не работает, а только лишь фиксирует нарушения политики безопасности.
Enforced – нарушения политики безопасности блокируются. SELinux работает полностью. В этом режиме SELinux дает максимальную защиту.
Для того, чтобы перейти в режим Permissive, можно использовать команды setenforce 0 или setenforce Permissive. Например, это может понадобиться при установке некоторых приложений.
Время действия введённого пароля
Возможно, вы хотите изменить промежуток времени, в течение которого sudo
действует без ввода пароля. Этого легко добиться добавив в /etc/sudoers (visudo)
примерно следующее:
Defaults:foo timestamp_timeout=20
Здесь sudo
для пользователя foo действует без необходимости ввода пароля в течение 20 минут.
Если вы хотите, чтобы sudo
всегда требовал ввода пароля, сделайте timestamp_timeout
равным 0.
What is a User?
The Root User
su
There is no root password
/etc/sudoers
# cat: /etc/sudoers: Permission denied
/etc/sudoers
# output ---
- To edit system configuration files
- To install global programs
- Change ownership of files and directories
Getting more information about a user
: /etc/passwd
/etc/passwd |
# 1 2 3 4 5 6 7
/etc/passwd |
# 1 2 3 4 5 6 7
I have labeled the output, so let’s walk through it by number.
- The first part of the output specifies the name of the user
- If the second part is an «x», this means that this user’s password is stored in the /etc/shadow file
- User id (root is always 0)
- User group id (root is always 0)
- The users full name (as entered — notice the ubuntu user does not have a full name, but that is okay)
- The user’s home directory path
- The shell that the user is using
Bashrc,. bash_profile,. bash_login,. profile
We have covered many concepts in the bash shell and UNIX based operating system, but what about the configuration file that controls how your bash shell runs? There are actually several configuration files and they do not have an intuitive hierarchy in terms of which one takes precedence over another. To make things more complicated, some of the config files run for «login shells» while others run in «non-login, interactive shells». What is a login shell? What is an interactive shell? In video below, I clarify what all these files do and when they should be used.
Использование традиционного root аккаунта и команды su
Разблокировка учетной записи root приводит неоправданным рискам (работая постоянно под рутом вы имеете 100500 способов «отстрелить себе ногу»), а также упрощает получение доступа к вашему компьютеру злоумышленником.
Ubuntu 11.04 и младше
Для входа под root достаточно задать ему пароль:
sudo passwd root
Ubuntu 11.10 и старше
Начиная с версии 11.10 был установлен менеджер входа lightdm, и дело со входом под root обстоит немного сложнее.
1. Устанавливаем root пароль.
Введите в терминал:
sudo passwd root
gksu gedit /etc/lightdm/lightdm.conf
В конце файла допишите:
greeter-show-manual-login=true
3. Перезагружаем lightdm.
Введите в терминал:
sudo service lightdm restart
Для обратной блокировки учетной записи root вам потребуется откатить изменения в настройках lightdm, а также заблокировать учетную запись root командой в терминале:
sudo passwd -l root
Получение прав суперпользователя для выполнения нескольких команд
Иногда возникает необходимость выполнить подряд несколько команд с правами администратора. В этом случае можно временно стать суперпользователем одной из следующих команд:
sudo -s sudo -i
После этого вы перейдёте в режим суперпользователя (с ограничениями, наложенными через настройки sudo), о чём говорит символ # в конце приглашения командной строки. Данные команды по действию похожа на su
, однако:
— sudo -s — не меняет домашний каталог на /root, домашним остается домашний каталог пользователя вызвавшего sudo -s, что обычно очень удобно.
— sudo -i — сменит так же и домашний каталог на /root.
Для выхода обратно в режим обычного пользователя наберите exit
или просто нажмите Ctrl+D.
Sudo не спрашивает пароль
sudo
без пароля — чудовищная дыра в безопасности, кому попало разрешено делать что угодно. Если вы разрешили это намеренно — срочно верните обратно как было.
Однако, в некоторых случаях sudo
внезапно перестаёт требовать пароль само по себе. Если сделать visudo
, то можно увидеть примерно такую строку, которую пользователь вроде бы не добавлял:
ALL ALL=(ALL) NOPASSWD:ALL
Скорее всего, эта катастрофичная строка была добавлена при установке программы типа Connect Manager от МТС или Мегафона. В таком случае, её нужно поменять на строку, разрешающую с правами root
запускать только этот Connect Manager, примерно так:
юзернейм ALL= NOPASSWD: /путь/к/программе
Есть и другие варианты решения проблемы, небольшое обсуждение здесь.
Настройка sudo и прав доступа на выполнение различных команд
sudo позволяет разрешать или запрещать пользователям выполнение конкретного набора программ. Все настройки, связанные с правами доступа, хранятся в файле /etc/sudoers
. Это не совсем обычный файл. Для его редактирования необходимо (в целях безопасности) использовать команду
sudo visudo
%admin ALL=(ALL) ALL
Подробнее о синтаксисе и возможностях настройки этого файла можно почитать выполнив
man sudoers
Если вы допустите ошибку при редактировании этого файла, то вполне возможно полностью лишитесь доступа к административным функциям. Если такое случилось, то необходимо загрузиться в recovery mode, при этом вы автоматически получите права администратора и сможете всё исправить. Кроме того, отредактировать этот файл можно с LiveCD.
Разрешение пользователю выполнять команду без ввода пароля
Для того, что бы система не запрашивала пароль при определенных командах необходимо в sudoers после строки # Cmnd alias specification добавить строку, где через запятую перечислить желаемые команды с полным путём(путь команды можно узнать, выполнив which имя_команды:
# Cmnd alias specification Cmnd_Alias SHUTDOWN_CMDS = /sbin/shutdown, /usr/sbin/pm-hibernate, /sbin/reboot
И в конец файла дописать строку
имя_пользователя ALL=(ALL) NOPASSWD: SHUTDOWN_CMDS
Внимание! Вышеописанные действия не отменяют необходимости ввода команды sudo перед вашей командой
Создание синонимов (alias`ов)
Для того, чтобы не только не вводить пароль для sudo, но и вообще не вводить sudo, сделайте следующее:
откройте файл .bashrc, находящейся в вашем домашнем каталоге
~bashrc
и добавьте в конец файла строки
= = pm-hibernate= = =
Где используется sudo
sudo используется всегда, когда вы запускаете что-то из меню Администрирования системы. Например, при запуске Synaptic вас попросят ввести свой пароль. Synaptic — это программа управления установленным ПО, поэтому для её запуска нужны права администратора, которые вы и получаете через sudo вводя свой пароль.
Однако не все программы, требующие административных привилегий, автоматически запускаются через sudo. Обычно запускать программы с правами администратора приходится вручную.
What is a Group?
/etc/group
# Only print root group
/etc/group |
# 1 2 3 4
- Name of group
- Group password (rarely used)
- Group ID (remember, root is always 0)
- Optional users that are part of the group (in addition to what is specified in the /etc/passwd file)
Когда нужно работать под пользователем root?
Все это однако не означает что никаких административных действий выполнить в такой системе нельзя. Для исполнения административных команд используется команда sudo (или её графический аналог gksu).
Графически приложения от имени суперпользователя
Для запуска графических приложений от имени суперпользователя существуют специальные утилиты. Они сохраняют все необходимые переменные окружения и полномочия. В KDE это команда kdesu, а в Gnome команда gksu.
Просто наберите gksu или kdesu, а затем нужную команду:
Эта команда запустит файловый менеджер KDE с правами суперпользователя. В Gnome это будет выглядеть вот так:
Программа запросит пароль, уже в графическом окне, а потом откроется файловый менеджер.
Запуск графических программ с правами администратора
Для запуска графических программ с правами администратора можно воспользоваться диалогом запуска программ, вызываемым по умолчанию сочетанием клавиш Alt+F2.
Допустим, нам необходимо запустить файловый менеджер Nautilus с правами администратора, чтобы через графический интерфейс как-то изменить содержимое системных папок. Для этого необходимо ввести в диалог запуска приложений команду
gksudo nautilus
Вместо gksudo
можно подставить gksu
, кроме того, пользователи KDE должны вместо gksudo
писать kdesu
. У вас попросят ввести свой пароль, и, если вы обладаете нужными правами, Nautilus запуститься от имени администратора. Запуск любого графического ПО можно производить с правами администратора, просто написав в диалоге запуска
gksudo <имя_команды>
Будьте предельно внимательны при работе в приложениях, запущенных с правами администратора. Вы безо всяких предупреждений со стороны системы сможете выполнить любую операцию, в частности, удалить системные файлы, сделав при этом систему неработоспособной.
Вход под суперпользователем
Вы получите полноценное окружение root с возможностью выполнять все действия, но такой способ очень непрактичный, так как вы теряете все преимущества использования графического интерфейса.
Запуск программ с правами администратора в терминале
Для запуска в терминале команды с правами администратора просто наберите перед ней sudo
:
sudo <команда>
У вас попросят ввести ваш пароль. Будьте внимательны, пароль при вводе никак не отображается, это нормально и сделано в целях безопасности, просто вводите до конца и нажимайте Enter. После ввода пароля указанная команда исполнится от имени root.
Система какое-то время помнит введённый пароль (сохраняет открытой sudo-сессию). Поэтому при последующих выполнениях sudo ввод пароля может не потребоваться. Для гарантированного прекращения сессии sudo наберите в терминале
sudo -K
Кроме того, часто встречаются ошибки, связанные с каналами в Linux. При исполнении команды
sudo cat test.txt | grep text > result.txt
с правами root исполнится только cat
, поэтому файл result.txt может не записаться. Нужно либо писать sudo
перед каждой командой, либо временно переходить под суперпользователя.
Ссылки
-
Настройка sudo — топик на форуме о времени действия пароля
Setting permissions
There are four parts to a permission set:
- Type — is this a file (-), directory (d), or symlink (l)?
- Owner permissions
- Group permissions
- Rest of world permissions
Below is a table that explains how we got to our permission set. As you can see, the code 755
corresponds to the -rwxr-xr-x
permission set.
/sbin/unix_update
# -rwxr-xr-x 1 root root 31376 Mar 16 2016 /sbin/unix_update*
So we know we can print the permissions of a file with the ls -l
command, but how do we set them? And what should we set them too? A general rule of thumb:
- For files, set the permissions to 644 (i.e.
drw-r--r--
) - For directories, set the permissions to 755 (i.e.
-rwxr-xr-x
)
# Add sudo to front of command if necessary
<permission-code> <file-or-directory>
775 test-script.sh
To check the current permission, remember that you can always use the ls -l <file>
command. To change the owner of a directory or file, you can use the chown
command:
# Use sudo if necessary
<user>:<group> <file-or-directory>
Oftentimes, you will want to change the ownership of multiple files within a single directory, which can be done using the -R
flag on the chown
command.
# This will change the ownership of every file in the parent-dir/ to have ubuntu as the owner and ubuntu as the group
ubuntu:ubuntu parent-dir/
Переключение на суперпользователя в терминале
Теперь мы подошли к более интересному и практичному. С помощью специальных утилит вы можете переключить текущий эмулятор терминала в окружения суперпользователя и выполнять все следующие команды не от своего имени, а от его, таким образом, дав программе права root linux. Для этого существует утилита su. Вообще говоря, эта утилита позволяет не только переключаться на пользователя root но и на любого другого пользователя, но по умолчанию используется именно root. Рассмотрим ее подробнее. Команда su linux имеет следующий синтаксис:
Вот ее основные опции:
- -c, —command — выполнить команду
- -g, —group — установить основную группу пользователя (только для root)
- -G —supp-group — дополнительные группы пользователя (только для root)
- -, -l, —login — режим входа, будут очищены и инициализированы с учетом нового пользователя все переменные окружения, а также изменен домашний каталог
- -p, —preserve-environment — сохранить переменные окружения
- -s, —shell — задать оболочку для входа
- —version — отобразить версию программы.
Теперь немного поэкспериментируем, чтобы понять как работает команда su linux.
Сначала выполним su без параметров, но для начала создадим переменную окружения, чтобы проверить как с ними обходится эта команда:
Теперь смотрим что получилось:
Из этих команд мы видим, что теперь мы пользователь root, но домашней директорией считается директория нашего предыдущего пользователя и наша переменная не сохранилась также изменилась переменная PATH, теперь там добавлен путь /sbin.
И повторим ту же комбинацию:
Та же ситуация, только на этот раз изменена ко всему еще и домашняя директория на директорию root. Но мы можем сохранить наши переменные окружения, если это нужно, для этого есть опция -p:
Как видите, наша переменная осталась. Вы также можете переключится на любого другого пользователя. Например:
su - test
Более подробно о команде su вы можете почитать в отдельной статье. Получение прав суперпользователя таким способом используется во многих дистрибутивах, например, Debian, OpenSUSE, ArchLInux, Gentoo и т д. Но в Ubuntu, как дистрибутиве для начинающих вход под пользователем root отключен. Это сделано потому, что это тоже не очень безопасно, вы можете забыть что выполняете команду от root и что-то натворить в системе. Поэтому переходим к следующей программе.
Использование sudo
Есть несколько важных трюков в использовании sudo:
-
Будьте внимательны выполняя команды с sudo или работая в сессии root-а (и не забывайте выйти из сессии root-а по окончанию действий требующих расширенных прав).
-
Не пользуйтесь sudo там, где это не нужно.
Получение прав root без переключения
Чтобы реализовать максимально безопасный интерфейс для работы с правами суперпользователя в Linux была разработана команда sudo. Давайте рассмотрим что такое sudo. Эта команда пишется перед каждой командой, которую нужно выполнить от имени суперпользователя, и для ее выполнения нужно ввести пароль уже не root, а всего лишь вашего пользователя. Так же, как и в предыдущей, в этой утилиты есть свои опции. Сначала рассмотрим синтаксис:
- -b — выполнять запускаемую утилиту в фоне
- -E — сохранить переменные окружения
- -g — запустить команду от группы
- -H — использовать домашний каталог
- -l — показать список полномочий в sudo для текущего пользователя
- -r — использовать для команды роль SELinux
- -s — использовать оболочку
- -u — запустить команду от имени пользователя, если не задано используется root
- -i — не выполнять команду, а войти в оболочку, эквивалентно su —
Вы можете выполнить те же эксперименты, только для этой команды, чтобы понять как использовать команду sudo. Например:
sudo -u test ls
Использование sudo — это рекомендованный способ выполнять команды от имени суперпользователя в Linux. Так вы не забудете с чем имеете дело и меньше всего рискуете повредить систему. Более подробно о команде sudo читайте здесь. Но остался еще один нерешенный вопрос — как быть с графическими утилитами? Ведь команда sudo их не запускает, а запускать графическую оболочку от имени root небезопасно. Это мы и рассмотрим далее.
Выводы
Вот и все. Теперь вы знаете как получить права суперпользователя в Linux, знаете как использовать команду sudo и в чем разница sudo или su. Теперь программы, требующие дополнительных привилегий в системе, не вызовут у вас проблем. Если остались вопросы, пишите в комментариях!
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.