Archive for the ‘ Linux ’ Category

Вводим Debian в домен под управлением Win2k8 Server

Задание: дать доменным пользователям из групп «domain users» и «domain admins» на работе доступ на свою машину по samba.

Дополнительные начальные данные:

  • на моей «рабочей лошадке» стоит Debian Lenny
  • пользователи которых я хочу пустить к себе по samba работают под WinXP с авторизацией через домен my.domain поднятый на Win2k8 (контроллер домена — controller.my.domain)
  • права на запись в моих шарах должны иметь только некоторые доменные админские группы, остальным — только чтение
  • учетная запись доменного админа Admin (он может ввести машину в домен)
  • рабочая группа — WORK ( наследство от давно почившего контроллера домена под Win NT 4)
  • имя моей машины — black

Итак, начнем! Сначала ставим необходимые пакетики:

black:~# aptitude install krb5-user winbind samba

Начинаем веселиться — вот такие у меня конфиги:

black:~# cat /etc/krb5.conf |grep -v ^#
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = MY.DOMAIN
 krb4_config = /etc/krb.conf
 krb4_realms = /etc/krb.realms
 kdc_timesync = 1
 ccache_type = 4
 forwardable = true
 proxiable = true

v4_instance_resolve = false
v4_name_convert = {
host = {
 rcmd = host
 ftp = ftp
}
plain = {
 something = something-else
}
}
fcc-mit-ticketflags = true

[realms]
MY.DOMAIN = {
 kdc = controller.my.domain
 admin_server = controller.my.domain
}
[domain_realm]
 .my.domain = MY.DOMAIN
 my.domain = MY.DOMAIN
[login]
 krb4_convert = true
 krb4_get_tickets = false

Минимально необходимый конфиг samba выглядит вот так:

black:~# cat /etc/samba/smb.conf |grep -v ^#
[global]
 realm = MY.DOMAIN
 workgroup = WORK
 netbios name = black
 disable spoolss = Yes
 show add printer wizard = No
 security = ads
 idmap uid = 10000-20000
 idmap gid = 10000-20000
 template shell = /bin/bash
 template homedir = /home/%D/%U
 winbind use default domain = yes

[share]
 comment = Write for Domain Users
 path = /media/samba/share
 browseable = yes
 writable = yes
 create mask = 0664
 directory mask = 0777
 valid users = @"WORK\domain admins", @"WORK\domain users"
 write list = @"WORK\domain admins", @"WORK\domain users"

После того как настроили samba, надо бы ее перегрузить:

black:~# /etc/init.d/samba restart

И winbind не помешает передернуть:

black:~# /etc/init.d/winbind restart

Правим nsswitch.conf примерно до такого вида:

black:~# cat /etc/nsswitch.conf |grep -v ^#

passwd:         files winbind
group:          files winbind
shadow:         files winbind

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4 winbind
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

Чтобы вступили в силу изменения в конфиге /etc/nsswitch.conf без перегарузки, нужно от рута дать команду:

black:~# ldconfig

Перед тем как вводить машину в домен нужно сначала синхронизировать время с домен-контроллером:

black:~# ntpdate controller.my.domain

После удачной синхронизации времени мы готовы стать полноценным участником домена my.domain. Чтобы войти в домен выполняем от рута:

black:~# net ads join -W my.domain -S master -U Admin

password for Admin:

Admin— доменный администратор который имеет право ввести комп в домен

В ответ на это нас должны спросить доменный пароль для доменного пользователя Admin. После ввода пароля — МЫ В ДОМЕНЕ!!! Если конечно не вывалилась какаято ошибка. Проверить то что мы таки вошли в домен можно например набрав команду:

black:~# wbinfo -u

audit1

audit2

test_1

test_2

..........

В ответ на которую мы должны увидеть перечень доменных пользователей.

Для того чтобы в нашу систему можно было логиниться под доменными аккаунтами нужно привести конфиги PAM к такому виду:

black:~# cat /etc/pam.d/common-account
account sufficient pam_winbind.so
account required pam_unix.so

black:~# cat /etc/pam.d/common-auth
auth sufficient pam_winbind.so
auth required pam_unix.so use_first_pass

black:~# cat /etc/pam.d/common-session

session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
session sufficient pam_winbind.so
session required pam_unix.so

Вот и все! Можно пробовать зайти, например, по ssh или samba на наш компьютер. Пользователей входящих в группы «domain admins» и «domain users» должно пускать без проблем (даже не спрашивая пароль).

всегото чуток поправить умолчательный конфиг. Привожу свой с небольшими коментариями:
всегото чуток поправить умолчательный конфиг. Привожу свой с небольшими коментариями:

apt-cacher in Debian

На работе у меня 2 компьютера работают под Debian. Все вродебы отлично с ними, но вот надоело мне на каждом из них одни и теже обновления тягать через интернет. Совсем уж это не дело … подумалось мне, тягать одно и тоже несколько раз по великой и могучей всемирной паутине! Решил проявить смекалку и чего-то ка-то куда-то настроить ….. ну да, а что настраивать то? Почесав слегка затылок, решил что можно и по nfs все это организовать. Сначала обновиться на первой машине -> розшарить на ней же по nfs директорию /var/cache/apt/archives/ -> подмонтировать на второй машине эту директорию туда же через nfs -> и насладиться жизнью! Но! Чтото мне это непонравилось, а захотелось странного. И захотелось потому, что кроме Debian у меня на работе еще живет Ubuntu и AltLinux. И тоже не в единственных экземплярах. Так вот, фишка с nfs актуальна если используется только один дистрибутив, если же таковых целый зоопарк — надо настраивать apt-cacher! Ну или глобально прокси-сервер с кэшем побольше 🙂

Собственно установка:

# apt-get install apt-cacher

Настройку же условно можна розделить на два этапа:

  • настройка apt-cacher сервера
  • настройка клиентов для работы с apt-cacher сервером

Настройка сервера неособо трудная.

Создадим заранее директорию куда apt-cacher будет складывать закэшированное. Очень желательно чтобы на разделе где мы ее создаем было достаточно места — хотябы несколько гигабайт. У меня она после полугода использования занимает 2.1 GB

# mkdir /opt/apt-cache

Даем нужные права на эту директорию (чтобы apt-cacher мог в нее писать):

# chown -R www-data:www-data /opt/apt-cache

Теперь нужно чуток поправить умолчательный конфиг. Привожу свой с небольшими коментариями:

black:~# cat /etc/apt-cacher/apt-cacher.conf
#################################################################
# This is the config file for apt-cacher. On most Debian systems
# you can safely leave the defaults alone.
#################################################################

# Тут храним все закэшированное - убедитесь что на разделе есть хоть пара GB!
cache_dir=/opt/apt-cache

# email админа - сюда шлем важные замечания если все плохо :)
admin_email=root@localhost

# Для опций автозапуска демона рекомедовано править /etc/default/apt-cacher

# порт на котором apt-cacher слушает подключений от клиентов
daemon_port=3142

# Опционально. Юзер/группа от которой запускается apt-cacher
group=www-data
user=www-data

# optional setting, binds the listening daemon to one specified IP. Use IP
# ranges for more advanced configuration, see below.
# daemon_addr=localhost

# Ну тут все просто - для каких IPv4 розрешено подключаться
# Допустимыми являются записи (кроме 127.0.0.1 который всегда розрешен)
# Если ставим "*" означает "allow all".
# Также можно использовать такие форматы записей 10.0.0.0/22 , "192.168.0.3-192.168.0.56'
allowed_hosts=*
denied_hosts=

#Тоже самое что и выше только уже для адресов семейства IPv6
allowed_hosts_6=
denied_hosts_6=*

# This thing can be done by Apache but is much simplier here - limit access to
# Debian mirrors based on server names in the URLs
#allowed_locations=ftp.uni-kl.de,ftp.nerim.net,debian.tu-bs.de

# Apt-cacher can generate usage reports every 24 hours if you set this
# directive to 1. You can view the reports in a web browser by pointing
# to your cache machine with '/apt-cacher/report' on the end, like this:
#      http://yourcache.example.com/apt-cacher/report
# Generating reports is very fast even with many thousands of logfile
# lines, so you can safely turn this on without creating much
# additional system load.
generate_reports=1

# Apt-cacher can clean up its cache directory every 24 hours if you set
# this directive to 1. Cleaning the cache can take some time to run
# (generally in the order of a few minutes) and removes all package
# files that are not mentioned in any existing 'Packages' lists. This
# has the effect of deleting packages that have been superseded by an
# updated 'Packages' list.
clean_cache=1

# Сюда пишутся все логи
logdir=/var/log/apt-cacher

# apt-cacher can use different methods to decide whether package lists need to
# be updated,
# A) looking at the age of the cached files
# B) getting HTTP header from server and comparing that with cached data. This
# method is more reliable and avoids desynchronisation of data and index files
# but needs to transfer few bytes from the server every time somebody requests
# the files ("apt-get update")
# Set the following value to the maximum age (in hours) for method A or to 0
# for method B
expire_hours=0

# Apt-cacher can pass all its requests to an external http proxy like
# Squid, Это мне подходит! В инет какраз хожу через http proxy
# format is 'hostname:pory' Так и пишем ;-)
http_proxy=my.cool.proxy:3128

# Use of an external proxy can be turned on or off with this flag.
# Value should be either 0 (off) or 1 (on).
use_proxy=1

# Если на прокси-сервере для выхода в инет нужна авторизация
# пишем сюда в формате: 'username:password'
#http_proxy_auth=proxyuser:proxypass

# Используем авторизацию на прокси для инета или нет?
# Допустимыми аргументами есть: 0 (off) или 1 (on).
use_proxy_auth=0

# Тут можно ограничить maximum bandwidth в Байтах за секунду
# для скачиваемых файлов. Синтаксис аналогичен  wget-вскому
#Используем 'k' для килобит и 'm' для мегабит. Пример: 'limit=100k'
limit=0

#Если есть проблемы с работой apt-cacher - пользуемся debug режимом
#незабываем настроить выше logdir и ставим этот параметр в 1 - будет вам куча инфы в логах :)
debug=0

# А вот это самый интересный параметр - назначение имен для нужных на клиентах репозитариев.
# Каждый репозитарий записывается через точку с запятой. При этом запись одного репозитария состоит собственно из
# 2 имен - виртуальное имя (так мы будем представлять этот репозитарий клиенту) и реальное имя (реальный URL репозитария)
# Тоесть запись debian ftp.debian.org/debian ; означает что ftp.debian.org/debian мы предоставляем клиентам как просто debian
# В конечном итоге эта запись непосредственно влияет на дальнейшую настройку sources.list на клиентах
path_map = debian ftp.debian.org/debian ; backports www.backports.org/backports.org/ ; multimedia ftp.debian.org.ua/debian-multimedia/ ; security security.debian.org/ ; elive repository.elive-systems.com/ ; volatile volatile.debian.org/debian-volatile/

Настройка клиентов тоже труда не составляет. Поскольку сам сервер тоже является клиентом в плане скачивания пакетов, то на сервере и клиентах с Debian приводим /etc/apt/sources.list в такой вид:

black:~# cat /etc/apt/sources.list
##### get packages via apt-cacher #####
deb http://black:3142/debian lenny main contrib non-free
deb http://black:3142/backports lenny-backports main contrib non-free
deb http://black:3142/multimedia lenny main
deb http://black:3142/security lenny/updates main
deb http://black:3142/elive lenny main elive drivers tests efl ports
deb http://black:3142/volatile lenny/volatile main contrib non-free

Если захотим и с Ubuntu обновлять/устанавливать пакеты через наш apt-cacher сервер — надо будет всегото чуток дополнить параметр path_map убунтовскими репозитариями. И конечно sources.list для ubuntu будет выглядеть несколько поиному — но я думаю разобраться по аналогии вышеописанного труда несоставит 🙂

Как видите все просто! В итоге наш сервер кэширует все что ставится из репозитариев любым из клиентов с таким вот sources.list. Поэтому скачиваться пакеты на втором клиенте уже фактически будут из кэша сервера — считай со скоростью локалки 😉 Интернету же предоставим гонять полезную инфу, а не одно и тоже раз за разом ….

Gentoo & tmpfs — ускоряем сборку пакетов

Не секрет что сборка пакетов в Gentoo — это каааайф! Ну да, что еще нужно настощему гентушнику? Конечно же полночи пялиться в монитор на красиво бегущие букавки кода при сборке очередного «очень нужного» пакета 🙂 Но иногда приходят мысли и о ускорении этого процесса. Тут мне хотелось бы коснуться производительности дисковой подсистемы — конечно же это основной тормоз подавляющего большинства компов. И как не крути, а винчестер используется тоже неслабо при сборке, особенно больших пакетов. У меня, например, Gentoo стоит на ноуте — производительность HDD, конечно же, оставляет желать лучшего, особенно если сравнивать со скоростью работы RAM памяти. «Причем тут одно к другому?» — может спросить ктото, но ответ тут очень прост —  tmpfs! Вот кто нам поможет превратить часть нашей шустрой оперативной памяти в «жесткий диск». RAM-ы же у нас достаточно? Нетакли 🙂 ? У меня на ноуте 2G — если верить conky постоянно запущеному на ноуте, то даже не припомню когда последний раз больше 1G использовалось …. такчтоооо ….. приступая к очередной «большой сборке» я делаю так:

# mount -t tmpfs tmpfs -o size=850M,nr_inodes=1M /var/tmp/portage

В итоге получаю 850MB оперативной памяти использованой как раздел и примонтированной в /var/tmp/portage В инете проводили некоторые исследования по этому поводу — говорят что такой вот финт сокращает время сборки больших пакетов до 10%

Также отдаю 256MB оперативки «под разтерзание» общесистемным темпам. Делается это записью в /etc/fstab вот такого содержания:

laptop ~ # grep tmp /etc/fstab
tmpfs        /tmp        tmpfs    size=256M,mode=0777        0    0
laptop ~ #

Ну какбы все! Наслаждаемся тем что наш HDD уже не занимается возней с временными файликами 🙂

Образ Windows из Linux

Часто ли у вас «падала» винда? Не надоедает ли ее переустанавливать раз в год? Знаю 100% что некоторые студенты из моей группы в институте специально ставят перед сессией «свеженькую» Windows и послее ее окончания — переустанавливают снова (на сесии идет нехилый документооборот — и вирусооборот тоже 🙂 ). Рано или поздно, но это надоедает. Неработает то, неработает это … система стала жестко тупить, некоторые программы стали вести себя неадекватно либо сломались вообще — картина знакомая многим! «Переустановить винду!» скажет любой, но какже это влом … ну что? Опять? И так из раза в раз.

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

Пути оптимизации сего процесса возможны разные:

  1. сделать инсталяционный диск с WinXP «под себя»
  2. создать образ установленной и настроенной винды и спрятать его подальше от вирусов и шаловливых рученок пользователей на пыльную полку.

Конечно же плюсы есть и в первом и во втором методе — я испробовал их оба. Могу сказать в итоге, что  мне удалось собрать инсталяционный диск WinXP SP3 с необходимым набором софта, настроенный процентов на 90 под стандартные пользовательские нужны среднестатистического офисного работника. Но это заняло у меня порядочно времени. Возможно когдато расскажу об этом процессе, но в этот раз о варианте №2.

Итак, образ винды! Основная идея основана на желании както красиво завернуть готовую к работе на 100% систему в некий архив. Ну и конечно с возможностью этот архив развернуть в случае краха системы 🙂  Набор софта для этого дела впечетляет! Тут готовы помочь многие софтварные продукты. Из наиболее именитых и 100% работоспособных пожалуй назову Acronis и Ghost. Но к сожелению все это небесплатно 🙁 Например, Acronis для домашних пользователей предлагает продукт  Acronis True Image Home 2009 всегото по цене около 100 грн. Как не крути — а не бесплатно! Вертя в руках старенькую флешку на 1GB из которой когдато еще давно успешно сделал себе LiveUSB, подумал: «А как же Linux?» Ведь удобно иметь такой инструмент под рукой (а флешку то я всегда с собой таскаю). Покопавшись немного в google по этому вопросу, выяснил что и Linux в этом деле мне тоже вполне помощник. Теперь я знаю покрайней мере 2 инструмента для клонирования:

  1. dd — можно создать как образ диска целиком, так и отдельно взятого раздела. Работает исключительно с разделами поэтому побарабану какая там FS. Для особо изощренных — можно сохранить только таблицу разделов или загрузчик (или и то и другое одним файлом) для востановления в будущем. Но есть недостаток — dd копирует информацию побайтово! Тоесть даже если у вас есть раздел на 10G и занято там всего 2 — то образ получим всеравно 10G. Печально но факт!
  2. ntfsclone — утилита для клонирования/разворачивания образов файловой системы NTFS. Вот это уже ближе к тому что мне было нужно! Работает исключительно с файловой системой — поэтому при разворачивании ей нужен раздел! Получить возможность сделать BackUP можно загрузившись в Linux любым из доступных способов (с помощью LiveCD, LiveUSB, HDD).

Почитав чуток документации остановился на таком варианте (все делаю из под root):

sda1 — виндовый раздел «Диск C». На нем установлена и настроена WinXP — ее мы хотим забекапить 🙂

sda2 — виндовый раздел «Диск D». Раздел на котором обычно в винде хранится всякий хлам

  • Создать образ виндового диска С:

Монтируем виндовый «Диск D» (на него будем сохранять образ созданный с помощью ntfsclone)

# mkdir /mnt/win_d
# mount.ntfs-3g /dev/sda2 /mnt/win_d -o force
# ntfsclone --save-image -o - /dev/sda1 | gzip -c > /mnt/win_d/win_image_backup_`date +%F`.img.gz

В результате на виндовом «диске D» появится файлик с названием в духе win_image_backup_2009-11-13.img.gz Посути это обычный файл, поэтому с ним можно делать все что угодно для обеспечения еще большей безопасности — записать на CD/DVD диск, закинуть в сетку на другой комп, положить в инет на файлообменник 🙂 etc …

  • Розвернуть винду из такого образа можно используя такие действия:

Монтируем виндовый «Диск D» (нам же надо взять сохраненный ранее образ):

# mount /dev/sda2 /mnt/win_d

Разворачиваем винду из образа командой:

# gunzip -c /mnt/win_d/win_image_backup_2009-11-13.img.gz |ntfsclone --restore-image --overwrite /dev/sda1 -

Ну все! После отработки команды у нас будет винда в таком же виде как на момент бэкапа!

Хочу также добавить что лично создал/развернул таким образом десятки образов — все вполне успешно. И главное — быстро. Создание образа для раздела 20G (занято 5G) занимает примерно 25 минут, разворачивание — около 10. Впечетляет!

Настройка bash

Так уж получилось что первый дистрибутив из мира Open Source который довелось мне использовать был Ubuntu Linux 6.06 Собственно я и рад что так получилось, могло же быть и хуже … например, я бы совсем не познакомился с Linux. Ну неважно, дело не в этом, а в том, что так или иначе пришлось осваивать консоль. Командной оболочкой по-умолчанию в Ubuntu (как и в подавляющем большинстве других Linux) есть bash. К чему это я? Да к тому, что даже ставя себе OS из семейства BSD, я всеравно сразу собираю bash. Ну привычен он мне … гораздо более превычен нежели csh или ksh.

Собственно про настойку этой прекрасной оболочки и хотел сказать несколько фраз, а точнее сделать небольшую шпаргалку себе на будущее. Главный конфиг bash-а называется bashrc и располагаться он может, в зависимости от дистрибутива Linux, в /etc или в /etc/bash. Незнаю как кто, но я там ничего не трогаю — использую умолчательные настройки. Но есть еще и доступный для правки «под себя» конфиг в домашней директории каждого пользователя. Найти его можно тут $HOME/.bashrc Как видите — он скрытый. Также bash-ем используются файлы $HOME/.bash_profile и $HOME/.bash_history С .bash_history все есно — тут хранятся выполненные команды командной оболочки bash. А вот что такое .bashrc и .bash_profile — требует пояснений. Назначение этих файлов согласно документации (приведу только нужную часть):

# man bash

INVOCATION
A login shell is one whose first character of argument zero is a -, or one started with the --login option.

An  interactive  shell is one started without non-option arguments and without the -c option whose standard input and error are both
connected to terminals (as determined by isatty(3)), or one started with the -i option.  PS1 is set and $- includes  i  if  bash  is
interactive, allowing a shell script or a startup file to test this state.

The  following  paragraphs describe how bash executes its startup files.  If any of the files exist but cannot be read, bash reports
an error.  Tildes are expanded in file names as described below under Tilde Expansion in the EXPANSION section.

When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads  and  exe
cutes  commands  from  the  file  /etc/profile,  if  that  file  exists.   After  reading  that  file, it looks for ~/.bash_profile,
~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is  readable.   The
--noprofile option may be used when the shell is started to inhibit this behavior.

When a login shell exits, bash reads and executes commands from the file ~/.bash_logout, if it exists.

When  an  interactive  shell  that  is  not  a login shell is started, bash reads and executes commands from ~/.bashrc, if that file
exists.  This may be inhibited by using the --norc option.  The --rcfile file option will force bash to read  and  execute  commands
from file instead of ~/.bashrc.

Чтоже получается? А то что .bash_profile отрабатывает когда дело касается авторизиции (вход по ssh например), а .bashrc когда авторизированный пользователь открывает командную оболочку. Поэтому я делаю так, чтобы даже зайдя по ssh у меня подгружался .bashrc

root@gw:~# cat .bash_profile
# include .bashrc if it exists
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# set PATH so it includes user's private bin if it exists
if [ -d ~/bin ] ; then
PATH=~/bin:"${PATH}"
fi

# only for OpenBSD
export PATH="/usr/local/sbin/:${PATH}"
export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/4.6/packages/`machine -a`/
export TERM="wsvt25m"

Это для OpenBSD. Для Linux можно выкинуть последние 4 строчки 🙂

Ну и, собственно, .bashrc

root@gw:~# cat .bashrc
# don't put duplicate lines in the history. See bash(1) for more options
export HISTCONTROL=ignoredups
export HISTCONTROL=ignorespace
#Если нужно - Proxy Servers
#export http_proxy="http://my.proxy:3128"
#export ftp_proxy=${http_proxy}

## Одна из главных вкусностей - aliases
alias ll='ls -l'
alias la='ls -A'
alias l='ls -CF'
alias lt='ls -lt'

## Colour Prompt
COLOR_RED="\[\033[1;31m\]"
COLOR_WHITE="\[\033[0;00m\]"
COLOR_GREEN="\[\033[0;32m\]"

export PS1="${COLOR_RED}\u${COLOR_WHITE}@${COLOR_RED}\h:${COLOR_WHITE}\w# "

root@gw:~#

Это для пользователя root — у него красное приглашение. Для рядового пользователя она зеленая. Вот конфиг:

root@gw:~# cat /home/radmin/.bashrc
## aliases
alias ll='ls -l'
alias la='ls -A'
alias l='ls -CF'
alias lt='ls -lt'
## Colour Prompt
COLOR_RED="\[\033[1;31m\]"
COLOR_WHITE="\[\033[0;37m\]"
COLOR_GREEN="\[\033[0;32m\]"

export PS1="${COLOR_GREEN}\u${COLOR_WHITE}@${COLOR_GREEN}\h:${COLOR_WHITE}\w$ "

root@gw:~#

Выглядит это примерно так:

Чтобы показывать нужный вам цвет PS1 можно использовать в том же .bashrc проверку юзера в духе if $USER = root тогда PS1 с красным приглашением else PS1 — зеленый. Но мне чегото неохота чтобы каждый раз при открытии терминала система это проверяла — один раз написал и все 🙂

В данном случае я задавался целью немного розукрасить bash и придать ему более userfriendly качества. Конечно, это далеко не все что можно настроить через bashrc, поэтому за дополнительной информацией обращайтесь к документации. Удачи! И красочных всем консолей!