- •II. First steps on the command line
- •5. Man pages
- •6. Working with directories (работа с папками)
- •7.Working with files
- •8. Working with file contents
- •9. The Linux file tree
- •III. Shell expansion
- •10. Commands and arguments
- •11. Control operators
- •12. Variables
- •13. Shell history
- •14. File globbing
- •IV. Pipes and commands
- •Глава 16. Фильтры.
- •16.3 Grep
- •16.7. Sort
- •16.8. Uniq
- •16.9. Comm
- •16.12. Примеры пайпов
- •Глава 17. Основные инструменты Unix
- •17.1. Find
- •17.2. Размещение
- •17.3. Date
- •17.5. Sleep
- •17.6. Time
- •17.7. Gzip - gunzip
- •17.8. Zcat - zmore
- •18.3. Замена и удаление символов (r X X)
- •18.4. Отменить и повторить (u .)
- •18.5. Вырезать, копировать и вставить строчки (dd yy p p)
- •18.6. Вырезать, копировать и вставить строчки (3dd 2yy)
- •18.8. Объединения двух и более линий (j)
- •18.9. Слова (w b)
- •18.10. Сохранить (или нет) и выход (:w :q :q! )
- •18.11. Поиск (/ ?)
- •18.13. Чтение файлов (:r :r !cmd)
- •19.1. Предпосылки
- •19.2. Hello World
- •19.4. Комментарии
- •20.2. Если, затем, иначе (if then else)
- •20.3. If then elif
- •20.4. For loop
- •20.5. While loop
- •21.2. Shift through parameters.
- •21.3. Runtime input.
- •21.3. Sourcing a config file.
- •21.5. Get script options with getopts.
- •21.6. Get shell options with shopt.
- •Глава 22 More scripting.
- •22.1. Eval.
- •22.4. Case.
- •22.5. Shell functions.
- •Раздел VII. Local user management. Глава 23. Users.
- •23.1. Identify yourself.
- •23.2. Users.
- •23.3. Passwords.
- •23.4 Home directories
- •23.5 User shell
- •23.6. Switcj users with su
- •23.7 Run a program as another user
- •23.10 Shell environment
- •Глава 24. Groups
- •24.1 About groups
- •24.2 Groupadd
- •24.3 /Etc/group
- •24.4 Usermod
- •24.5 Groupmod
- •24.6 Groupdel
- •24.7 Groups
- •24.8 Gpasswd
- •24.9 Vigr
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 |