Добавить в цитаты Настройки чтения

Страница 25 из 113

su — запуск командной оболочки с подстановкой идентификаторов пользователя и группы

Команда su используется для запуска нового сеанса работы с командной оболочкой от имени другого пользователя. Команда имеет следующий синтаксис:

su [-[l]] [пользователь]

Если указан параметр -l, запущенная командная оболочка станет оболочкой входа для указанного пользователя. Это означает, что будет загружено окружение пользователя и текущим рабочим каталогом станет домашний каталог пользователя. Часто это именно то, что требуется. Если пользователь не указан, подразумевается суперпользователь. Обратите внимание, что (довольно необычно) параметр -l можно сократить до -, и эта особенность часто используется на практике. Запустить командную оболочку от имени суперпользователя можно следующим образом:

[[email protected]/* */ ~]$ su -

Password:

[[email protected]/* */ ~]#

После ввода команды будет запрошен пароль суперпользователя. После ввода правильного пароля появится новое приглашение к вводу, показывающее, что данная командная оболочка обладает привилегиями суперпользователя (символ # в конце вместо символа $) и текущим рабочим каталогом теперь стал домашний каталог суперпользователя (обычно /root). После запуска новой оболочки можно выполнять команды с привилегиями суперпользователя. Завершим работу, введя команду exit, чтобы вернуться в предыдущую командную оболочку:

[[email protected]/* */ ~]# exit

[[email protected]/* */ ~]$

С помощью su можно так же просто выполнить единственную команду, не запуская новый интерактивный сеанс:

su -c 'команда'

При использовании этой формы команде su передается единственная командная строка для выполнения. Не забудьте заключить команду в кавычки, чтобы предотвратить дополнительную ее интерпретацию механизмами подстановки текущей командной оболочки:

[[email protected]/* */ ~]$ su -c 'ls -l /root/*'

Пароль:

-rw------- 1 root root     754 2011-08-11 03:19 /root/anaconda-ks.cfg

/root/Mail:

итого 0

[[email protected]/* */ ~]$

sudo — выполнение команды от имени другого пользователя

Команда sudo во многом подобна команде su, но имеет некоторые важные дополнительные особенности. Администратор может определить порядок использования sudo обычными пользователями, ограничив возможность запуска команд от имени другого пользователя (обычно суперпользователя). В частности, пользователю может быть разрешен доступ к одним командам и запрещен к другим. Еще одно важное отличие состоит в том, что sudo не требует ввода пароля суперпользователя. Для аутентификации в команде sudo пользователь должен ввести свой пароль. Например, допустим, что настройки sudo позволяют выполнить некоторую мифическую программу резервного копирования с именем backup_script, требующую привилегий суперпользователя.

С помощью sudo ее можно запустить так:

[[email protected]/* */ ~]$ sudo backup_script

Пароль:

System Backup Starting...

После ввода команды вам будет предложено ввести пароль (ваш, а не суперпользователя), и по завершении аутентификации указанная команда будет выполнена. Одно важное отличие между su и sudo — последняя не запускает новую командную оболочку и не загружает окружение другого пользователя. Это означает, что команды не требуется экранировать как-то иначе, чем при запуске той же команды без использования sudo. Имейте в виду, что такое ее поведение можно переопределить с помощью различных параметров. Подробности ищите на странице справочного руководства (man) для sudo.

ubuntu и sudo

Обычные пользователи иногда сталкиваются с необходимостью выполнить некоторую операцию, требующую привилегий суперпользователя. К числу таких операций относится установка и обновление программного обеспечения, правка системных конфигурационных файлов и доступ к устройствам. В мире Windows эта проблема часто решается передачей пользователям административных привилегий, что позволяет им решать подобные задачи. Однако программы, запускаемые такими пользователями, получают те же привилегии. В большинстве случаев это именно то, что нужно, но это также дает возможность беспрепятственной работы вредоносному программному обеспечению, такому как вирусы.

В мире Unix, вследствие многопользовательской природы этой операционной системы, всегда проводилась четкая грань между обычными пользователями и администраторами. Идеология Unix заключается в том, чтобы предоставлять привилегии суперпользователя, только когда они действительно необходимы. Для этого часто используются команды su и sudo.

Еще несколько лет тому назад большинство дистрибутивов Linux использовали с этой целью команду su. Команда su не требует настройки, как команда sudo, а наличие учетной записи root — давняя традиция в Unix. Вместе это порождает проблему. Пользователи могут испытывать соблазн действовать от имени root без всякой необходимости. Фактически некоторые пользователи вообще работают в своих системах, регистрируясь исключительно как root, чтобы избежать появления раздражающих сообщений «permission denied» (доступ запрещен). Такой подход ухудшает защищенность Linux, низводя ее до уровня Windows. Не самое лучшее решение.



Создатели Ubuntu предприняли иной подход. По умолчанию Ubuntu запрещает регистрироваться в системе с учетной записью root (не позволяя устанавливать пароль для этой учетной записи), а для получения привилегий суперпользователя предлагает использовать sudo. Начальная учетная запись пользователя обладает полным доступом к привилегиям суперпользователя через sudo и может наделять аналогичными привилегиями другие, вновь создаваемые учетные записи.

Чтобы увидеть, какие привилегии дает команда sudo, вызовите ее с параметром -l:

[[email protected]/* */ ~]$ sudo -l

User me may run the following commands on this host:

    (ALL) ALL

chown — изменение владельца и группы файла

Команда chown используется для изменения владельца и группы файла или каталога. Для использования этой команды необходимы привилегии суперпользователя. Команда chown имеет следующий синтаксис:

chown [владелец][:[группа]] файл...

chown может изменить владельца и/или группу файла в зависимости от первого аргумента. В табл. 9.7 приводится несколько примеров команды.

Таблица 9.7. Примеры аргументов команды chown

Аргумент

Результаты

bob

Изменит принадлежность файла, назначив владельцем пользователя bob

bob:users

Изменит принадлежность файла, назначив владельцем пользователя bob и группу users

:admins

Изменит принадлежность файла, назначив группу admins

bob:

Изменит принадлежность файла, назначив владельцем пользователя bob и группу этого пользователя

Представьте, что существуют два пользователя: janet, имеющий доступ к привилегиям суперпользователя, и tony, лишенный таких привилегий. Пользователю janet нужно скопировать файл из своего домашнего каталога в домашний каталог пользователя tony. Поскольку пользователь janet хочет, чтобы пользователь tony смог редактировать файл, janet должен изменить владельца скопированного файла, назначив владельцем tony:

[[email protected]/* */ ~]$ sudo cp myfile.txt ~tony

Password:

[[email protected]/* */ ~]$ sudo ls -l ~tony/myfile.txt

-rw-r--r-- 1 root   root  8031 2012-03-20 14:30 /home/tony/myfile.txt

[[email protected]/* */ ~]$ sudo chown tony: ~tony/myfile.txt

[[email protected]/* */ ~]$ sudo ls -l ~tony/myfile.txt

-rw-r--r-- 1 tony   tony  8031 2012-03-20 14:30 /home/tony/myfile.txt

Здесь видно, как пользователь janet копирует файл из своего каталога в домашний каталог пользователя tony. Далее janet заменяет владельца файла root (результат использования sudo) на tony. Добавив двоеточие в конец первого аргумента, janet одновременно изменяет группу, которой принадлежит файл, на основную группу пользователя tony, которая, так уж получилось, носит то же имя tony.