Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
spo_voprosy.docx
Скачиваний:
9
Добавлен:
20.03.2016
Размер:
465.35 Кб
Скачать

23.7 Run a program as another user

About sudo

Программа sudoпозволяет запускать программу с правами другого пользователя. Чтобы это работало, прежде системный администратор должен настроить файл/etc/sudoers. Это может быть полезно при поручении административных задач другому пользователю, не говоряrootпароль.

Пример ниже показывает использование sudo. Пользовательpaul получает право использоватьuseradd crootправами. Это позволяетpaul создавать новых пользователей на системе, не становясьroot пользователем и не знаяroot пароль.

paul@laika:~$ useradd -m inge

useradd: unable to lock password file

paul@laika:~$ sudo useradd -m inge

[sudo] password for paul:

paul@laika:~$

Setuid on sudo

Исполняемый файл sudoимеет битную настройкуsetuid, так что любой пользователь может его запустить с помощью действительногоidrootпользователя.

paul@laika:~$ ls -l `which sudo`

-rwsr-xr-x 2 root root 107872 2008-05-15 02:41 /usr/bin/sudo

paul@laika:~$

Visudo

Посмотрите мануал по visudo прежде чем играться с файлом /etc/sudoers.

Sudo su

На некоторых линукс системах таких как UbuntuилиKubuntu,root пользователь не имеет пароля.

Это значит, что зайти за root невозможно. Чтобы исполнять задачи какroot, первому пользователю даются всеsudo права через/etc/sudoers. По факту, все пользователи, состоящие в админ группе, могут использоватьsudo, чтобы запускать все команды какroot.

root@laika:~# grep admin /etc/sudoers

# Members of the admin group may gain root privileges

%admin ALL=(ALL) ALL

В итоги пользователь может написать sudo suи статьrootбез вводаrootпароля.Sudoтребует ввести ваш собственный пароль. Таким образом строка ввода пароля внизу дляsudo, а неsu.

paul@laika:~$ sudo su -

Password:

root@laika:~#

23.10 Shell environment

Неплохо иметь все эти предустановленные и пользовательские имена и переменные, но откуда они все берутся? Shell использует набор загрузочных файлов, которые проверяются

(и исполняются), где бы shellне был задействован. Следующее – обзор загрузочных скриптов.

/etc/profile

Как bash, так иksh shellпроверит существование/etc/profile и выполняет, если он существует.

Читая этот скрипт, вы можете заметить (по крайней мере на Debian Lenny и Red Hat Enterprise Linux 5) что он создаёт переменную среды PATH. Срипт также может изменять переменнуюPS1, устанавливатьHOSTNAMEи выполнять ещё больше скриптов, таких как/etc/inputre.

Вы можете использовать этот скрипт, чтобы задавать имена и переменные для каждого пользователя.

~/.bash_profile

Если этот файл существует в домашней директории пользователя, bashего исполнит. НаDebian Linuxпо умолчанию его нет.

RHEL5 использует краткий ~/.bash_profile, где проверят существование ~/.bashrc и исполняет его. Он также добавляет$HOME/bin в переменную$PATH.

[serena@rhel53 ~]$ cat .bash_profile

# .bash_profile

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

. ~/.bashrc

fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

bash_login

Если .bash_profile не существует,bash будет искать ~/.bash_login и исполнит его.

Ни в Debianни вRedHatэтого файла по умолчанию нет.

~/.profile

Когда нет ни ~/.bash_profile, ни ~/.bash_login bashбудет проверять существование ~/.profile и исполнит его. ВRedHatэтого файла по умолчанию нет.

На Debianэтот скрипт может исполнить ~/.bashrc и также добавить $HOME/binпеременной $PATH.

serena@deb503:~$ tail -12 .profile

# if running bash

if [ -n "$BASH_VERSION" ]; then

# include .bashrc if it exists

if [ -f "$HOME/.bashrc" ]; then

. "$HOME/.bashrc"

fi

fi

# set PATH so it includes user's private bin if it exists

if [ -d "$HOME/bin" ] ; then

PATH="$HOME/bin:$PATH"

Fi

~/.bashrc

Как было видно в прошлых пунктах, скрипт ~/.bashrc может быть исполнен другими скриптами. Давайте посмотрим, что же он делает по умолчанию.

RedHatиспользует очень простой~/.bashrc , проверяет наличие/etc/bashrc и исполняет его. Он также оставляет место для пользовательских имён и функций.

[serena@rhel53 ~]$ more .bashrc

# .bashrc

# Source global definitions

if [ -f /etc/bashrc ]; then

. /etc/bashrc

fi

# User specific aliases and functions

На Debianэтот скрипт немного длиннее и настраивает $PS1, некоторые переменные истории и количество активных и неактивных имён.

serena@deb503:~$ ls -l .bashrc

-rw-r--r-- 1 serena serena 3116 2008-05-12 21:02 .bashrc

~/.bash_logout

При выходе из bash,он может выполнить~/.bash_logout. DebianиRedHatиспользуют эту возможность, чтобы очистить экран.

serena@deb503:~$ cat .bash_logout

# ~/.bash_logout: executed by bash(1) when login shell exits.

# when leaving the console clear the screen to increase privacy

if [ "$SHLVL" = 1 ]; then

[ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q

fi

[serena@rhel53 ~]$ cat .bash_logout

# ~/.bash_logout

/usr/bin/clear

Debian overview

Ниже представлена таблица, показывающая, когда Debian выполняет каждый из этих загрузочных bashскриптов.

Таблица 23.1 Debian User Environment

скрипт

su

Su -

ssh

gdm

~./bashrc

No

yes

Yes

Yes

~/.profile

No

Yes

Yes

Yes

/etc/profile

No

Yes

Yes

Yes

/etc/bash.bashrc

yes

No

No

Yes

RHEL5 overview

Ниже представлена таблица, показывающая, когда RedHatenterpriseLinux5 выполняет каждый из этих загрузочныхbashскриптов.

Таблица 23.2 Red Hat User Environment

скрипт

su

Su -

ssh

gdm

~./bashrc

Yes

yes

Yes

Yes

~/.bash_profile

No

Yes

Yes

Yes

/etc/profile

No

Yes

Yes

Yes

/etc/bashrc

yes

Yes

Yes

Yes

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]