Original article: http://www.redhat.com/magazine/013nov05/departments/tips_tricks/
Перевод: © Иван Песин
Служба поддержки пользователей Red Hat получает технические вопросы со всего мира. Специалисты Red Hat ежедневно добавляют полученные вопросы и ответы на них в базу знаний Red Hat Knowledgebase. Доступ к ней возможен при наличии учетной записи на сайте redhat.com. Каждый месяц Red Hat Magazine знакомит читателей с Red Hat Knowledgebase, публикуя несколько самых свежих вопросов и ответов.
Знаете ли вы, что выполнять простые математические действия можно непосредственно в командной строке? Попробуйте, например:
[brad@satsuki ~]$ X=5
[brad@satsuki ~]$ Y=10
[brad@satsuki ~]$ echo $[ ($X+$Y)*2/10 ]
3
Это может оказаться очень удобным, если вы хотите что-то быстро подсчитать, но не желаете запускать приложение-калькулятор. Но учтите, что bash не поддерживает дроби. При вычислениях, дробное число округляется к меньшему целому:
[brad@satsuki ~]$ echo $[ 3/2 ]
1
Для более сложных вычислений, вам придется использовать графическое приложение, например gnome-calculator, или более точный консольный калькулятор, например bc:
[brad@satsuki ~]$ echo "3/2" | bc -l
1.50000000000000000000
Следующая команда извлекает один файл из тарбола:
# tar xf file.tar full/path/to/file
Например, создадим следующий архив:
# tar cvf pictures.tar pictures
pictures/
pictures/seattle.jpg
pictures/WG.jpg
А теперь извлечем из него файл seattle.jpg без распаковки всего архива. Для этого выполните команду:
# tar xf pictures.tar pictures/seattle.jpg
# ls -al pictures/seattle.jpg
-rw-rw-r-- 1 user user 1458298 Jul 26 16:16 pictures/seattle.jpg
Примечание: Вы должны указать ПОЛНЫЙ путь к файлу, который нужно разархивировать.
Рассмотрим пример использования dm-crypt. DATA — это существующая группа томов (Volume Group).
[root@testmachine /]# lvcreate -n CRYPTO -L+100M DATA
Logical volume "CRYPTO" created
[root@testmachine /]# cryptsetup create DMCRYPT /dev/DATA/CRYPTO
Enter passphrase:
[root@testmachine /]# cryptsetup status DMCRYPT
/dev/mapper/DMCRYPT is active:
cipher: aes-plain
keysize: 256 bits
device: /dev/dm-6
offset: 0 sectors
size: 204800 sectors
[root@testmachine /]# mke2fs /dev/mapper/DMCRYPT
mke2fs 1.35 (28-Feb-2004)
max_blocks 104857600, rsv_groups = 12800, rsv_gdb = 256
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
25688 inodes, 102400 blocks
5120 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
13 block groups
8192 blocks per group, 8192 fragments per group
1976 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Writing inode tables: done
inode.i_blocks = 3074, i_size = 67383296
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 35 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@testmachine /]# mkdir /mnt/crypt;
[root@testmachine /]# mount /dev/mapper/DMCRYPT /mnt/crypt
[root@testmachine /]# cd /mnt/crypt
[root@testmachine crypt]# ls -al
total 17
drwxr-xr-x 3 root root 1024 Feb 16 12:32 .
drwxr-xr-x 4 root root 4096 Feb 16 12:33 ..
drwx------ 2 root root 12288 Feb 16 12:32 lost+found
[root@testmachine crypt]# df -h
Filesystem Size Used Avail Use% Mounted on
[...]
/dev/mapper/DMCRYPT 97M 1.6M 91M 2% /mnt/crypt
[root@testmachine crypt]# touch FOOBAR
[root@testmachine crypt]# ls -al
total 17
drwxr-xr-x 3 root root 1024 Feb 16 13:42 .
drwxr-xr-x 4 root root 4096 Feb 16 12:33 ..
-rw-r--r-- 1 root root 0 Feb 16 13:42 FOOBAR
drwx------ 2 root root 12288 Feb 16 12:32 lost+found
[root@testmachine crypt]# cd ..
[root@testmachine mnt]# umount /mnt/crypt
[root@testmachine mnt]# cryptsetup remove DMCRYPT
Дальнейшие действия могут выполняться и после перезагрузки системы.
[root@testmachine mnt]# cryptsetup create DMCRYPT /dev/DATA/CRYPTO
Enter passphrase: <----------- ВВЕДИТЕ НЕПРАВИЛЬНУЮ ПАРОЛЬНУЮ ФРАЗУ!
[root@testmachine mnt]# mount /dev/mapper/DMCRYPT /mnt/crypt
mount: you must specify the filesystem type
[root@testmachine mnt]# cryptsetup remove DMCRYPT
[root@testmachine mnt]# cryptsetup create DMCRYPT /dev/DATA/CRYPTO
Enter passphrase:
[root@testmachine mnt]# mount /dev/mapper/DMCRYPT /mnt/crypt
[root@testmachine mnt]# ls -al /mnt/crypt/
total 17
drwxr-xr-x 3 root root 1024 Feb 16 12:32 .
drwxr-xr-x 4 root root 4096 Feb 16 12:33 ..
-rw-r--r-- 1 root root 0 Feb 16 13:42 FOOBAR
drwx------ 2 root root 12288 Feb 16 12:32 lost+found
Во время загрузки вы можете добавить опцию в строку параметров ядра.
kernel /vmlinuz-2.4.21-15.EL ro root=LABEL=/ noht
Более подробная информация о технологии Hyper-Threading доступна по адресу: http://www.intel.com/technology/hyperthread/.
Система: Red Hat Enterprise Linux 4 Update 2
Решение:
Не следуйте инструкциям из файла README, включенного в RPM-пакет diskdumputils-1.1.9,
для настройки использования раздела подкачки системой diskdump. Иначе
раздел подкачки будет заблокирован. Инструкции в файле README
указывают на необходимость форматирования раздела подкачки, что ведет к его разрушению. Устройства
дампирования, кроме разделов подкачки, всегда требуют выполнения service diskdump initialformat для использования в качестве выделенных устройств для дампов. Другими словами,
разделы подкачки форматировать не нужно. Более детальная информация
приведена в разделе "Настройки" последней версии файла README.
Пакет diskdumputils устанавливается на машине, где вы хотите сохранять дамп, генерируемый в случае системного сбоя. Соответствующие скрипты загружают и настраивают модуль ядра diskdump таким образом, что при сбое дамп памяти записывается на диск.
Функциональность diskdump поддерживается только с нижеперечисленными адаптерами:
Red Hat Enterprise Linux 3 Red Hat Enterprise Linux 4
---------------------------------
aic7xxx aic7xxx
aic79xx aic79xx
dpt_i2o
ipr
megaraid2 megaraid
mptfusion mptfusion
sym53c8xx sym53c8xx
sata_promise sata_promise
ata_piix ata_piix
CCISS
Функциональность diskdump поддерживается следующими ядрами Red Hat, где <kernel-version> соответствует версии, содержащей данный пакет diskdumputils:
Red Hat Enterprise Linux 3
kernel-<kernel-version>.i686.rpm
kernel-smp-<kernel-version>.i686.rpm
kernel-hugemem-<kernel-version>.i686.rpm
kernel-<kernel-version>.athlon.rpm
kernel-smp-<kernel-version>.athlon.rpm
kernel-<kernel-version>.ia64.rpm
kernel-<kernel-version>.x86-64.rpm
kernel-smp-<kernel-version>.x86-64.rpm
kernel-smp-<kernel-version>.ia32e.rpm
Red Hat Enterprise Linux 4
kernel-<kernel-version>.i686.rpm
kernel-smp-<kernel-version>.i686.rpm
kernel-hugemem-<kernel-version>.i686.rpm
kernel-<kernel-version>.ia64.rpm
kernel-<kernel-version>.ppc64.rpm
kernel-<kernel-version>.x86-64.rpm
kernel-smp-<kernel-version>.x86-64.rpm
Выбор устройства для дампов
Первым шагом в процессе настройки, есть выбор дискового устройства куда будет записываться дамп памяти в случае системного сбоя. Устройство для дампа может представлять собой:
Если вы настраиваете раздел подкачки в качестве устройства для дампа, то, по нижерассмотренным причинам, каталоги /usr и /var должны находится на локальных файловых системах.
В случае системного сбоя, содержимое памяти сохраняется в /var/crash. При загрузке системы, для записи сохраненного содержимого памяти, выполняются программы пакета diskdumputils, которые должны считать /var/crash. Эти программы находятся в подкаталогах /usr, а операции сохранения памяти запускаются при загрузке до активации раздела подкачки и монтирования сетевых файловых систем. Таким образом, если /usr и /var находятся на сетевых файловых системах, сервис diskdump не будет запущен во время загрузки системы.
Размер устройства для дампов должен быть достаточно большим, чтобы вмещать весь дамп. Размер сохраняемого дампа состоит из размера всей физической памяти системы плюс заголовок. Чтобы определить точный размер необходимого пространства, посмотрите в файл /proc/diskdump после загрузки модуля diskdump:
# modprobe diskdump
# cat /proc/diskdump
# sample_rate: 8
# block_order: 2
# fallback_on_err: 1
# allow_risky_dumps: 1
# total_blocks: 262042
Размер блока в параметре total_blocks равен размеру страницы. Таким образом, в данном случае, на машине с архитектурой i386, нам необходим раздел, размером минимум (262042 * 4096) байт.
Примечание: При сохранении дампа памяти, содержимое памяти, находящееся в разделе подкачки, не сохраняется. Потому размер устройства для дампов должен соответствовать размеру физической памяти, без учета размера раздела подкачки.
Теперь, исходя из приведенной информации, выберите подходящее устройство для сохранения дампов и настройте подсистему diskdump на его использование. Делается это следующим образом.
Отредактируйте файл /etc/sysconfig/diskdump и задайте устройство для дампов:
DEVICE=/dev/sde1
Можно указать несколько устройств, разделив их двоеточием:
DEVICE=/dev/sda2:/dev/sdb
Преимуществом использования нескольких устройств является избыточность. Например, если каждое из устройств для дампов управляется отдельным драйвером, то даже в случае сбоя из-за проблем драйвера, управляющего одним из устройств для дампов, содержимое памяти будет сохранено на другом устройстве. Каждое из устройств должно быть достаточно большим, чтобы вместить весь дамп. При использовании раздела подкачки в качестве устройства для дампа, указывать более одного устройства нельзя.
Форматирование устройства для дампов
Примечание: пропустите этот шаг, если вы используете раздел подкачки в качестве устройства для дампов.
Второй шаг в процессе настройки — это форматирование устройства для дампов.
Любое выбранное вами устройство для дампов, за исключением раздела подкачки, должно быть специальным образом отформатировано перед его использованием. Соответственно, это устройство не может быть использовано для создания обычной файловой системы.
Форматирование устройства для дампов выполняется системным администратором один раз перед его использованием. (Примечание: этот шаг должен быть опущен, если в качестве устройства для дампов используется раздел подкачки. В противном случае, раздел подкачки станет непригодным для использования по назначению):
# service diskdump initialformat
Активирование сервиса diskdump
Наконец, запустите сервис diskdump:
# chkconfig diskdump on
# service diskdump start
Выбранное устройство/раздел можно проверить с помощью интерфейса /proc/diskdump.
# cat /proc/diskdump
/dev/sde1 514080 1012095
Если нужно заменить устройство для дампов, отредактируйте файл /etc/sysconfig/diskdump, отформатируйте новое устройство, как это было описано выше, и перезапустите сервис diskdump. Для перезапуска сервиса выполните команду:
# service diskdump restart
Чтобы проверить функциональность diskdump, нажмите Alt-SysRq-C или выполните echo c > /proc/sysrq-trigger. После завершения дампа, во время следующей загрузки системы будет создан файл vmcore в каталоге, с названием вида:
/var/crash/127.0.0.1-<date>
Формат файла vmcore соответствует формату, создаваемому средством netdump, так что для анализа файла можно использовать утилиту crash(8).
После первоначальной настройки вам больше ничего не нужно делать. Единственное, за чем вам необходимо следить, так это за размером раздела, выделенного для дампов. Если там не хватит места, дамп будет сохранен лишь частично, а результирующий файл — носить имя vmcore-incomplete.
Система Diskdump содержит настраиваемый скрипт diskdump-nospace. Этот скрипт вызывается перед созданием файла vmcore, если в /var/crash нет достаточного количества свободного места. Таким образом, в нем вы можете задать команды для очистки файловой системы.
Модуль diskdump поддерживает следующие параметры:
block_order: Задает размер блока ввода-вывода при создании дампа. Значение по умолчанию равно 2, что устанавливает размер блока в page-size << 2 или 16 кбайт на архитектуре i386. Большее значение увеличивает производительность, но, вместе с тем, и объем занимаемой модулем памяти.
sample_rate: Определяет количество блоков, проверяемых перед записью. Значение по-умолчанию равно 8, что означает проверку одного блока из 1<<8 (256). Нулевое значение говорит, что нужно проверять каждый блок, а отрицательные значения отключают проверку вовсе.
dump_level: Уровень сбора памяти указывает какие именно страницы памяти будут дампироваться. Значение по-умолчанию — нуль — говорит о необходимости записи всех страниц физической памяти в файл vmcore. Чтобы уменьшить размер файла vmcore, можно исключить из дампа кэш-страницы, нуль-страницы, свободные страницы и страницы, содержащие данные пользовательских приложений. Указывая значение dump_level от 1 до 15 можно задать тип страниц, которые будут исключены из дампа. В следующей таблице указано соответствие между уровнем дампа и исключаемыми из дампа типами страниц памяти:
уровень кэш- нуль- свободные пользовательские описание
дампа страницы страницы страницы страницы
-------------------------------------------------------------
0 значение по-умолчанию
1 X
2 X
3 X X рекомендуется
4 X
5 X X
6 X X
7 X X X
8 X
9 X X
10 X X
11 X X X
12 X X
13 X X X
14 X X X
15 X X X X минимальный размер дампа
Функция частичного дампа памяти позволяет регулировать количество дампируемой памяти. Часто для исследования возникающей проблемы ядра все содержимое ОЗУ не требуется. Большая часть памяти обычно занята данными пользовательских приложений, кэшем (файловыми данными), нуль- и свободными страницами. Игнорирование таких типов страниц при создании файла vmcore, значительно уменьшает его размер, а сама процедура создания дампа занимает меньше времени. И хотя реальный размер файла vmcore может варьироваться в зависимости от состояния системы и значения параметра dump_level, минимальный объем памяти, необходимый для анализа дампа, всегда будет доступен. Тем не менее, всегда может возникнуть ситуация, когда необходимо сохранить все содержимое памяти, потому не рекомендуется использовать для дампов раздел, размер которого меньше реального объема физической памяти.
Необходимо помнить, что частичное дампирование памяти несет некоторую опасность. При выполнении дампа памяти, система просматривает специальные структуры, в которых записаны атрибуты страниц памяти. Если такая структура по каким-либо причинам разрушена, процесс сканирования может завершится сбоем. Например, если dump_levelимеет значение в диапазоне 4-7 или 12-15, будут просмотрены списки ядра, содержащие указатели на свободные страницы. Если этот список поврежден, процесс может "повиснуть". Более того, возможно, что опущенный тип страницы памяти необходим для полного анализа причины некоторых сбоев. Потому, уровень сбора памяти должен выбираться индивидуально для каждой ситуации. Рекомендуемым уровнем является 3, потому что обнаружить нуль- и кэш-страницы проще всего и нет необходимость просматривать списки страниц.
Добавьте в файл /etc/sysconfig/network-scripts/ifcfg-eth<N> опцию PEERDNS. <N> может быть 0, 1, 2, и т.д. и должно соответствовать конфигурационному файлу сетевого интерфейса. Например, первой сетевое устройство ethernet в системе называется eth0, значит его конфигурационный файл называется /etc/sysconfig/network-scripts/ifcfg-eth0.
Установите параметр PEERDNS в 'no'. Например:
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Ethernet
PEERDNS=no
Этот параметр гарантирует, что файл /etc/resolv.conf не будет перезаписан при загрузке системы.
Система: Red Hat Enterprise Linux 3
Задача:
Вам нужно настроить безопасный сервер FTP с тщательным контролем
за пользователями, имеющими к нему доступ. Вы не хотите предоставлять
анонимный доступ, а существующие пользователи не должны иметь
возможности регистрации в системе. Пространство, доступное
пользователям, должно быть ограничено определенным каталогом.
Пользователи не должны иметь возможность получать почту на этой
системе. Все необходимые пакеты в системе уже установлены (т.е. vsftpd, sendmail
и пр.) и настроены они по-умолчанию. Вы имеете доступ к учетной записи root и умеете редактировать конфигурационные файлы.
Решение:
Используйте следующие шаги:
Конфигурационный файл сервера SSH /etc/ssh/sshd_config предоставляет несколько путей ограничения доступа
Директива AllowUsers может быть использована для задания списка пользователей, которым разрешен доступ через SSH. После директивы следует перечислить через пробел шаблоны имен пользователей.
А для того, чтобы задать список пользователей, которым запрещен доступ по SSH, используется директива DenyUsers. Обе директивы понимают метасимволы '*' и '?' в шаблонах имен пользователей. К сожалению, числовые идентификаторы пользователей (UID) не поддерживаются. По-умолчанию, доступ разрешен всем пользователям.
Для ограничения доступа на уровне групп пользователей, можно применять директивы AllowGroups и DenyGroups. Эти опции разрешают или запрещают доступ пользователям, чья основная или вспомогательная группа соответствует заданному шаблону.
Ниже приведен пример файла /etc/ssh/sshd_config, который запрещает доступ по SSH пользователю haller:
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options change a
# default value.
#Port 22
#Protocol 2,1
#ListenAddress 0.0.0.0
#ListenAddress ::
# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 3600
#ServerKeyBits 768
# Logging
#obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
#LogLevel INFO
# Authentication:
#LoginGraceTime 120
#PermitRootLogin yes
#StrictModes yes
#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys
# rhosts authentication should not be used
#RhostsAuthentication no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#RhostsRSAAuthentication no
# similar for protocol version 2
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# RhostsRSAAuthentication and HostbasedAuthentication
#IgnoreUserKnownHosts no
# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes
# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#AFSTokenPassing no
# Kerberos TGT Passing only works with the AFS kaserver
#KerberosTgtPassing no
# Set this to 'yes' to enable PAM keyboard-interactive authentication
# Warning: enabling this may bypass the setting of 'PasswordAuthentication'
#PAMAuthenticationViaKbdInt no
#X11Forwarding no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PrintMotd yes
#PrintLastLog yes
#KeepAlive yes
#UseLogin no
UsePrivilegeSeparation no
#PermitUserEnvironment no
Compression no
#MaxStartups 10
# no default banner path
#Banner /some/path
#VerifyReverseMapping no
#ShowPatchLevel no
# override default of no subsystems
Subsystem sftp /usr/libexec/openssh/sftp-server
DenyUsers haller
После изменения файла /etc/ssh/sshd_config перезапустите сервис sshd:
service sshd restart
Другим способом ограничения доступа по SSH, является использование подсистемы Pluggable Authentication Module (PAM). За подробной информацией по этому вопросу, обратитесь к другим статьям из базы знаний.
Если ядро обнаруживает критическое разрушение на диске или некоторые особо важные операции записи, например запись данных в журнал, заканчиваются сбоем, ядро может перемонтировать файловую систему в режиме только для чтения. Это связано с тем, что в данных условиях нет возможности поддерживать целостность файловой системы. Такое поведение тщательно протоколируется в файле /var/log/messages.
Если вы обнаружили описанные симптомы, сархивируйте ваши данные, поскольку такое поведение может говорить о грозящем сбое диска. Как только будет возможность, выполните проверку файловой системы утилитой e2fsck с опцией -c — проверкой на сбойные сектора. Обычная утилита fsck может не обнаружить всех ошибок. Пример:
e2fsck -c /dev/sda3