Run a program as another user



About sudo

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

 

Пример ниже показывает использование sudo.Пользователь paulполучает право использовать useraddc root правами. Это позволяет 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 , так что любой пользователь может его запустить с помощью действительного id root пользователя.

 

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:~#

 

Shell environment

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

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

 

/etc/profile

Как bash, так и kshshell проверит существование /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 ни в Red Hat этого файла по умолчанию нет.

 

~/.profile

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

На 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может быть исполнен другими скриптами. Давайте посмотрим, что же он делает по умолчанию.

Red Hat использует очень простой ~/.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 и Red Hat используют эту возможность, чтобы очистить экран.

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

Ниже представлена таблица, показывающая, когда Red Hat enterprise Linux 5 выполняет каждый из этих загрузочных 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

Глава 24. Groups

 

About groups

Пользователи могут состоять в группах (groups).Группы позволяют вам устанавливать права на уровне групп, вместо выдачи прав каждому пользователю отдельно. Каждый дистрибутив Unix или Linux содержит графические инструменты для управления группами. Новичкам советуется использовать именно их. Более опытные пользователи могут использовать инструменты командной строки для управления пользователями, но будьте осторожно: некоторые дистрибутивы не допускают смешанного использования GUI и CLI инструментов для управления группами (YaST в Novell Suse). Администраторы могут редактировать связанные с этим файлы напрямую с помощью vi или vigr.

Groupadd

Группы могут быть созданы с помощью команды groupadd.Пример ниже демонстрирует создание 5 пустых групп.

root@laika:~# groupadd tennis

root@laika:~# groupadd football

root@laika:~# groupadd snooker

root@laika:~# groupadd formula1

root@laika:~# groupadd salsa

Etc/group

Пользователи могут состоять в нескольких группах. Членство в группе определяется файлом /etc/group.

root@laika:~# tail -5 /etc/group

tennis:x:1006:

football:x:1007:

snooker:x:1008:

formula1:x:1009:

salsa:x:1010:

root@laika:~#

В первом поле отображается имя группы. Второе поле содержит пароль группы в зашифрованном виде ( может быть пустым). Третье поле содержит идентификатор группы или GID.В четвертом поле содержится список членов (в этих группах никто не состоит)

Usermod

Членство в группе может быть изменено с помощью команд useradd или usermod.

root@laika:~# usermod -a -G tennis inge

root@laika:~# usermod -a -G tennis katrien

root@laika:~# usermod -a -G salsa katrien

root@laika:~# usermod -a -G snooker sandra

root@laika:~# usermod -a -G formula1 annelies

root@laika:~# tail -5 /etc/group

tennis:x:1006:inge,katrien

football:x:1007:

snooker:x:1008:sandra

formula1:x:1009:annelies

salsa:x:1010:katrien

root@laika:~#

Будьте осторожны, используя usermod для добавления пользователей в группы. По умолчанию команда usermod удалит пользователя из каждой группы, в которой он состоит, если она не была написана в команде! Использование –а (append)опции предотвратит это.

Groupmod

Вы можете изменить имя группы с помощью команды groupmod.

root@laika:~# groupmod -n darts snooker

root@laika:~# tail -5 /etc/group

tennis:x:1006:inge,katrien

football:x:1007:

formula1:x:1009:annelies

salsa:x:1010:katrien

darts:x:1008:sandra

Groupdel

Вы можете мгновенно удалить группу командой groupdel.

root@laika:~# groupdel tennis

root@laika:~#

Groups

Пользователь может набрать команду groups,чтобы посмотреть, к каким группам он принадлежит.

[harry@RHEL4b ~]$ groups

harry sports

[harry@RHEL4b ~]$

Gpasswd

Вы можете передать управление членством в группе другому пользователю с помощью команды gpasswd.В примере ниже м передадим права добавлять и удалять членов группы sports group пользователю serena. Затем мы зайдем за serena с помощью suи добавим harry в sports group.

[root@RHEL4b ~]# gpasswd -A serena sports

[root@RHEL4b ~]# su - serena

[serena@RHEL4b ~]$ id harry

uid=516(harry) gid=520(harry) groups=520(harry)

[serena@RHEL4b ~]$ gpasswd -a harry sports

Adding user harry to group sports

[serena@RHEL4b ~]$ id harry

uid=516(harry) gid=520(harry) groups=520(harry),522(sports)

[serena@RHEL4b ~]$ tail -1 /etc/group

sports:x:522:serena,venus,harry

[serena@RHEL4b ~]$

Администраторы группы не обязательно должны состоять в ней. Они могут удалить себя из неё, но это никак не повлияет на их возможность удалять или добавлять членов.

[serena@RHEL4b ~]$ gpasswd -d serena sports

Removing user serena from group sports

[serena@RHEL4b ~]$ exit

Информация об администраторах группы хранится в файле /etc/gshadow.

[root@RHEL4b ~]# tail -1 /etc/gshadow

sports:!:serena:venus,harry

[root@RHEL4b ~]#

Чтобы удалить всех администраторов из группы, используйте команду gpasswdчтобы обнулить список администраторов.

[root@RHEL4b ~]# gpasswd -A "" sports

Vigr

Аналогично vipw, команда vigr может быть использована для ручного редактирования файла /etc/group,т.к. она сделает правильную блокировку файла. Только опытные администраторы должны использовать viили vigrдля управления группами.

 

 

Теория.


Дата добавления: 2018-04-05; просмотров: 400; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!