После обновления из портов courier-authdaemon во FreeBSD, всегда сбиваются права на файл
/var/run/authdaemond.
Если postfix настроен на авторизацию через курьеровский authdaemon, после обновления он ругнётся вот так:
postfix: warning: SASL authentication failure: cannot connect to Courier authdaemond: Permission denied
Надо Просто дать исполнение на этот файл.
chmod o+x /var/run/authdaemond
Третий раз уже на эти грабли наступаю.
Разные, на мой взгляд, интересные замечания, связанные с компьютерами в частности и техникой вообще.
воскресенье, 27 сентября 2009 г.
четверг, 17 сентября 2009 г.
Мой vimrc
Вот, добрались руки упорядочить свой .vimrc
Пока что маленький и скромный, но со временем, думаю, функций добавится.
1 " Подсветка синтаксиса
2 syntax on
3
4 " Отключить режим совместимости с Vi
5 set nocompatible
6
7 " Включить нормальную работу Backspace
8 set backspace=indent,eol,start
9
10 " История команд - 50
11 set history=50
12
13 " Вставка новой строки Enter'ом без перехода в режим вставки.
14
15 map <CR> o<Esc>
16
17 " Автоопределение файлов
18 filetype plugin on
19 filetype indent on
20
21 " Всегда показывать положение курсора
22 set ruler
23
24 " Показывать текущую команду
25 set showcmd
26
27 " Показывать режим работы
28 set showmode
29
30 " Поиск в реалтайме
31 set incsearch
32
33 " Хоткей Ctrl+n включает нумерацию строк, а Ctrl+b отключает.
34 map <C-n> <Esc>:set number<CR>
35 map <C-b> <Esc>:set nonumber<CR>
36
37 " Быстрое сохранение на <F2> во всех режимах
38 imap <F2> <Esc>:w<CR>
39 map <F2> <Esc>:w<CR>
40
41 " Выход без сохранения на <F10> во всех режимах
42 imap <F10> <Esc>:q!<CR>
44 map <F10> <Esc>:q!<CR>
45 " Вставка из буфера мыши
46 map <S-Insert> <Middlemouse>
47
48 " При вводе открывающей фигурной скобки автоматом вводится и закрывающая.
49
50 inoremap { {<CR>}<Esc>O
51
52 " При вводе закрывающей скобки подсвечивает открывающую
53 set showmatch
54
55 " Выключить любые звонки-мигалки
56 set novisualbell
57 set t_vb=
58 " Удаление от текущей позиции до конца строки по Ctrl+e
59 map <C-e> <Esc>d$
Пока что маленький и скромный, но со временем, думаю, функций добавится.
1 " Подсветка синтаксиса
2 syntax on
3
4 " Отключить режим совместимости с Vi
5 set nocompatible
6
7 " Включить нормальную работу Backspace
8 set backspace=indent,eol,start
9
10 " История команд - 50
11 set history=50
12
13 " Вставка новой строки Enter'ом без перехода в режим вставки.
14
15 map <CR> o<Esc>
16
17 " Автоопределение файлов
18 filetype plugin on
19 filetype indent on
20
21 " Всегда показывать положение курсора
22 set ruler
23
24 " Показывать текущую команду
25 set showcmd
26
27 " Показывать режим работы
28 set showmode
29
30 " Поиск в реалтайме
31 set incsearch
32
33 " Хоткей Ctrl+n включает нумерацию строк, а Ctrl+b отключает.
34 map <C-n> <Esc>:set number<CR>
35 map <C-b> <Esc>:set nonumber<CR>
36
37 " Быстрое сохранение на <F2> во всех режимах
38 imap <F2> <Esc>:w<CR>
39 map <F2> <Esc>:w<CR>
40
41 " Выход без сохранения на <F10> во всех режимах
42 imap <F10> <Esc>:q!<CR>
44 map <F10> <Esc>:q!<CR>
45 " Вставка из буфера мыши
46 map <S-Insert> <Middlemouse>
47
48 " При вводе открывающей фигурной скобки автоматом вводится и закрывающая.
49
50 inoremap { {<CR>}<Esc>O
51
52 " При вводе закрывающей скобки подсвечивает открывающую
53 set showmatch
54
55 " Выключить любые звонки-мигалки
56 set novisualbell
57 set t_vb=
58 " Удаление от текущей позиции до конца строки по Ctrl+e
59 map <C-e> <Esc>d$
воскресенье, 12 июля 2009 г.
Lynksys, dd-wrt, vpn и локальные маршруты.
Есть некая локальная сеть. Довольно крупная, поэтому адреса локальных ресурсов занимают довольно большое количество подсетей. А выход в интернет осуществляется через vpn-подключение. И понадобился способ выпустить локальную сеть(офиса, или несколько домашних компов - неважно) в инет, при этом, чтобы локальные ресурсы были доступны напрямую, а не по vpn-каналу.
Конечно, это проще простого решается с помощью роутера с Linux, но каждому желающему такой роутер не поставишь. Вот и вспомнилась мне железка, с которой в своё время уже приходилось работать - Linksys WRT54-GL и свободная прошивка dd-wrt.
Что нам понадобится.
1. Сам Linksys WRT54-GL.
2. Список локальных сетей(в моём случае, его можно взять с сайтов местных провайдеров).
3. Прошивки dd-wrt последней версии(на момент написания этой заметки - 24) mini и standart. Всегда можно взять с официального сайта dd-wrt.
4. Немного времени.
Настройка:
1. Прошивка устройства.
В этот раз почему-то lynksys не захотел прошиваться сразу. Упорно был сбой при попытки запихнуть в него standart-версию. Решается просто. Сперва вшивается mini, а потом standart.
2. Настройка сети.
На вкладке Basic Setup для wan-интерфейса выставляем режим Static IP. Там прописывается ip-адрес, выдаваемый Вам провайдером и маску подсети. Шлюз не ставить!
Для Router IP, выставляем адрес и маску сети, по которому Linksys будет доступен в домашней локалке. И снова шлюз не ставить. Тут же надо указать dns-сервер, выданный провом.
Далее, по желанию. Я лично настроил раздачу адресов по локалке с помощью dhcp. Здесь всё.
Теперь решаем проблему, на которой затыкается большинство, судя по гуглу. Шлюз провайдера и vpn-сервер находятся в разных подсетях. Если указать default gateway, то vpn потом не будет работать. Если же его не указывать, то он и не подключиться. Но что мешает прописать отдельный маршрут к vpn-серверу через шлюз? Итак, идём на вкладку Setup -> Advanced Routing и добавляем нужный маршрут.
3. Настройка vpn.
Вкладка Services -> PPTP.
Ставим enable для PPTP Client, где и прописываем адрес vpn-сервера, логин и пароль. Если нужно, то опции шифрования.
4. Добавление маршрутов.
Последний штрих. Добавляем маршруты локальной сети.
Вкладка Administration -> Commands.
Все маршруты вписываем в поле commands в виде:
ip route add xx.xx.xx.xx/xx via yy.yy.yy.yy
Думаю, ясно, что это. Одно уточнение. Маска должна быть указана именно в виде битов, а не привычным для многих квартетным форматом - Linksys его не понимает.
Всё готово. Единственный ньюанс - внесение изменений в случае смены маршрутов в локалке. На роутере с linux у меня это решено простым скриптом, который по крону скачивает файл с маршрутами с сайта провайдера, и в соответсвии с ним вносит изменения в таблицу маршрутов. Вот, следующим шагом, думаю запихать этот скрипт в linksys(придётся немного переделать, потому как dd-wrt это всё-таки не полноценный linux).
Конечно, это проще простого решается с помощью роутера с Linux, но каждому желающему такой роутер не поставишь. Вот и вспомнилась мне железка, с которой в своё время уже приходилось работать - Linksys WRT54-GL и свободная прошивка dd-wrt.
Что нам понадобится.
1. Сам Linksys WRT54-GL.
2. Список локальных сетей(в моём случае, его можно взять с сайтов местных провайдеров).
3. Прошивки dd-wrt последней версии(на момент написания этой заметки - 24) mini и standart. Всегда можно взять с официального сайта dd-wrt.
4. Немного времени.
Настройка:
1. Прошивка устройства.
В этот раз почему-то lynksys не захотел прошиваться сразу. Упорно был сбой при попытки запихнуть в него standart-версию. Решается просто. Сперва вшивается mini, а потом standart.
2. Настройка сети.
На вкладке Basic Setup для wan-интерфейса выставляем режим Static IP. Там прописывается ip-адрес, выдаваемый Вам провайдером и маску подсети. Шлюз не ставить!
Для Router IP, выставляем адрес и маску сети, по которому Linksys будет доступен в домашней локалке. И снова шлюз не ставить. Тут же надо указать dns-сервер, выданный провом.
Далее, по желанию. Я лично настроил раздачу адресов по локалке с помощью dhcp. Здесь всё.
Теперь решаем проблему, на которой затыкается большинство, судя по гуглу. Шлюз провайдера и vpn-сервер находятся в разных подсетях. Если указать default gateway, то vpn потом не будет работать. Если же его не указывать, то он и не подключиться. Но что мешает прописать отдельный маршрут к vpn-серверу через шлюз? Итак, идём на вкладку Setup -> Advanced Routing и добавляем нужный маршрут.
3. Настройка vpn.
Вкладка Services -> PPTP.
Ставим enable для PPTP Client, где и прописываем адрес vpn-сервера, логин и пароль. Если нужно, то опции шифрования.
4. Добавление маршрутов.
Последний штрих. Добавляем маршруты локальной сети.
Вкладка Administration -> Commands.
Все маршруты вписываем в поле commands в виде:
ip route add xx.xx.xx.xx/xx via yy.yy.yy.yy
Думаю, ясно, что это. Одно уточнение. Маска должна быть указана именно в виде битов, а не привычным для многих квартетным форматом - Linksys его не понимает.
Всё готово. Единственный ньюанс - внесение изменений в случае смены маршрутов в локалке. На роутере с linux у меня это решено простым скриптом, который по крону скачивает файл с маршрутами с сайта провайдера, и в соответсвии с ним вносит изменения в таблицу маршрутов. Вот, следующим шагом, думаю запихать этот скрипт в linksys(придётся немного переделать, потому как dd-wrt это всё-таки не полноценный linux).
понедельник, 1 июня 2009 г.
ssh-доступ в chroot для FreeBSD.
Есть у меня тут один web-сервер. Крутится на FreeBSD. И понадобилось организовать ssh-достп для программистов, чтобы они могли работать с разрабатываемыми сайтами напрямую. Но при этом было жёсткое условие - кроме своей рабочей директории программисты не должны видеть ничего, находящегося в системе.
Гугл штука хорошая, много рассказал, но там были всякие решения типа установки патченных версий sshd на другом порту или ограниченного доступа по sftp. Ограниченного доступа слишком мало, а патчить и плодить на сервере нестандартные вещи я не люблю.
В конце концов было выработано такое решение.
1. Создаём дерево chroot.
# mkdir /usr/chroot/
# mkdir /usr/chroot/bin
# mkdir /usr/chroot/dev
# mkdir /usr/chroot/etc
# mkdir /usr/chroot/home
# mkdir /usr/chroot/lib
# mkdir /usr/chroot/libexec
# mkdir /usr/chroot/sbin
# mkdir /usr/chroot/tmp
# mkdir /usr/chroot/usr
# mkdir /usr/chroot/var
# mkdir /usr/chroot/var/run
2. Копируем нужные команды и библиотеки.
У меня для /usr/chroot/bin - это: bash cat cp id ls mc mkdir mv rm scp sh svn
И для /usr/chroot/sbin - ldconfig
Список команд полностью зависит от ваших потребностей.
Теперь надо положить туда все библиотеки, необходимые для работы этих команд. Сразу же небольшое уточнение. Так как список команд и библиотек относительно небольшой, я не стал заморачиваться с фряшной системой расположения их по дереву(/usr/local/bin), а сложил всё в корне.
Для того, чтобы определить, какие библиотеки нам нужны, воспользуемся утилитой ldd. Для удобства, я это делал так:
# ldd /usr/local/bin/bash | grep -v \/usr\/local\/bin\/bash | cut -f 2 -d \> | cut -f 1 -d \(
/lib/libncurses.so.7
/usr/local/lib/libintl.so.8
/usr/local/lib/libiconv.so.3
/lib/libc.so.7
Это список необходимого для bash. Для остального по аналогии. Все эти библиотеки копируем в /usr/chroot/lib
Кроме этого, надо добавить симлинки типа libintl.so -> libintl.so.8
# ln -s libintl.so.8 linintl.so
И скопировать дополнительные *.a и *.la файлы. Подробнее надо смотреть для каждой отдельной библиотеки. В итоге мы должны получить что-то такое:
# ls /usr/chroot/lib/ | grep intl
libintl.a
libintl.la
libintl.so
libintl.so.8
Разумеется, так надо сделать для каждой необходимой библиотеки.
Ну и разумеется нужно скопировать основную фряшную утилиту, отвечающую за подгрузку библиотек:
# cp /libexec/ld-elf.so.1 /usr/chroot/libexec/ld-elf.so.1
3. Дополнительный компоненты для работы утилит.
Одних библиотек мало. У примеру, тому же mc надо ещё кучу всего. Тут, к сожалению, невозможно как-то заранее предсказать, что именно понадобится. В каждом отдельном случае надо читать документацию на программу и гуглить, если выдаёт ошибки. Для mc надо дополнительно скопировать полностью директории /usr/share/misc/ и /usr/local/share/mc/ в соответствующие места в chroot'е.
Так же для него понадобятся файлы termcap и shells в /usr/chroot/etc
В /usr/chroot/tmp надо будет создать директорию mc-root
4. Теперь подгатавливаем пользователя.
# adduser
Создаём обычного пользователя, только в качестве shell'a указываем ему путь к вот такому скрипту:
#!/usr/local/bin/bash
#
/usr/local/bin/sudo /usr/sbin/chroot /usr/chroot /bin/bash
Скрипту даём права на исполнение. Если не установлен пакет sudo, ставим и в /usr/local/etc/sudoers(можно воспользоваться командой visudo, если vim не страшен) добавляем строку имя_нашего_пользователя ALL=(ALL) NOPASSWD: /usr/sbin/chroot. Если править этот файл руками, надо не забыть после правки убрать права на запись, потому как sudo будет ругаться.
Командой passwd задаём для него пароль.
5. Монтируем устройства.
# mount -t devfs devfs /usr/chroot/dev
Готово.
Теперь логнинясь по ssh этим пользователем, человек попадает в chroot, из которого выхода нет.
Но этот голый chroot мне не нужен. Мне нужен доступ к определённым проектам. Я сделал так:
Отмонтировал devfs. Далее:
# cd /usr/chroot
# tar -cjvf /usr/backups/chroot.tar.bz2 ./
# cd /path/to/www_project
# tar -xjvf /usr/backups/chroot.tar.bz2
# mount -t devfs devfs /path/to/www_project/dev
И последнимс штрихом создание нового файла chroot.sh для конкретного пользователя с новым путём вместо /usr/chroot.
Теперь программер имеет доступ по ssh к сайту и не больше.
Решение пока сырое. Работаю над автоматизацией создания всего этого, плюс над созданием общего для всех chroot.sh, берущего конечную директорию из конфига(собственно, сделать это просто, но руки не доходят - много работы).
Гугл штука хорошая, много рассказал, но там были всякие решения типа установки патченных версий sshd на другом порту или ограниченного доступа по sftp. Ограниченного доступа слишком мало, а патчить и плодить на сервере нестандартные вещи я не люблю.
В конце концов было выработано такое решение.
1. Создаём дерево chroot.
# mkdir /usr/chroot/
# mkdir /usr/chroot/bin
# mkdir /usr/chroot/dev
# mkdir /usr/chroot/etc
# mkdir /usr/chroot/home
# mkdir /usr/chroot/lib
# mkdir /usr/chroot/libexec
# mkdir /usr/chroot/sbin
# mkdir /usr/chroot/tmp
# mkdir /usr/chroot/usr
# mkdir /usr/chroot/var
# mkdir /usr/chroot/var/run
2. Копируем нужные команды и библиотеки.
У меня для /usr/chroot/bin - это: bash cat cp id ls mc mkdir mv rm scp sh svn
И для /usr/chroot/sbin - ldconfig
Список команд полностью зависит от ваших потребностей.
Теперь надо положить туда все библиотеки, необходимые для работы этих команд. Сразу же небольшое уточнение. Так как список команд и библиотек относительно небольшой, я не стал заморачиваться с фряшной системой расположения их по дереву(/usr/local/bin), а сложил всё в корне.
Для того, чтобы определить, какие библиотеки нам нужны, воспользуемся утилитой ldd. Для удобства, я это делал так:
# ldd /usr/local/bin/bash | grep -v \/usr\/local\/bin\/bash | cut -f 2 -d \> | cut -f 1 -d \(
/lib/libncurses.so.7
/usr/local/lib/libintl.so.8
/usr/local/lib/libiconv.so.3
/lib/libc.so.7
Это список необходимого для bash. Для остального по аналогии. Все эти библиотеки копируем в /usr/chroot/lib
Кроме этого, надо добавить симлинки типа libintl.so -> libintl.so.8
# ln -s libintl.so.8 linintl.so
И скопировать дополнительные *.a и *.la файлы. Подробнее надо смотреть для каждой отдельной библиотеки. В итоге мы должны получить что-то такое:
# ls /usr/chroot/lib/ | grep intl
libintl.a
libintl.la
libintl.so
libintl.so.8
Разумеется, так надо сделать для каждой необходимой библиотеки.
Ну и разумеется нужно скопировать основную фряшную утилиту, отвечающую за подгрузку библиотек:
# cp /libexec/ld-elf.so.1 /usr/chroot/libexec/ld-elf.so.1
3. Дополнительный компоненты для работы утилит.
Одних библиотек мало. У примеру, тому же mc надо ещё кучу всего. Тут, к сожалению, невозможно как-то заранее предсказать, что именно понадобится. В каждом отдельном случае надо читать документацию на программу и гуглить, если выдаёт ошибки. Для mc надо дополнительно скопировать полностью директории /usr/share/misc/ и /usr/local/share/mc/ в соответствующие места в chroot'е.
Так же для него понадобятся файлы termcap и shells в /usr/chroot/etc
В /usr/chroot/tmp надо будет создать директорию mc-root
4. Теперь подгатавливаем пользователя.
# adduser
Создаём обычного пользователя, только в качестве shell'a указываем ему путь к вот такому скрипту:
#!/usr/local/bin/bash
#
/usr/local/bin/sudo /usr/sbin/chroot /usr/chroot /bin/bash
Скрипту даём права на исполнение. Если не установлен пакет sudo, ставим и в /usr/local/etc/sudoers(можно воспользоваться командой visudo, если vim не страшен) добавляем строку имя_нашего_пользователя ALL=(ALL) NOPASSWD: /usr/sbin/chroot. Если править этот файл руками, надо не забыть после правки убрать права на запись, потому как sudo будет ругаться.
Командой passwd задаём для него пароль.
5. Монтируем устройства.
# mount -t devfs devfs /usr/chroot/dev
Готово.
Теперь логнинясь по ssh этим пользователем, человек попадает в chroot, из которого выхода нет.
Но этот голый chroot мне не нужен. Мне нужен доступ к определённым проектам. Я сделал так:
Отмонтировал devfs. Далее:
# cd /usr/chroot
# tar -cjvf /usr/backups/chroot.tar.bz2 ./
# cd /path/to/www_project
# tar -xjvf /usr/backups/chroot.tar.bz2
# mount -t devfs devfs /path/to/www_project/dev
И последнимс штрихом создание нового файла chroot.sh для конкретного пользователя с новым путём вместо /usr/chroot.
Теперь программер имеет доступ по ssh к сайту и не больше.
Решение пока сырое. Работаю над автоматизацией создания всего этого, плюс над созданием общего для всех chroot.sh, берущего конечную директорию из конфига(собственно, сделать это просто, но руки не доходят - много работы).
четверг, 14 мая 2009 г.
Замена содержимого в файлах по шаблону
Замена во всех файлах в поддиректориях одного слова на другое.
find ./ -type f | xargs perl -pi -e 's/oneword/anotherword/g'
find ./ -type f | xargs perl -pi -e 's/oneword/anotherword/g'
среда, 29 апреля 2009 г.
Debian GNU/Linux 5.0 Lenny и Eee PC 701 4G
Как можно понять из заглавия, не хватило у меня терпения на Xandros. Очень уж много там надо убирать лишнего и ставить своего. Конечно, не поспоришь, разработчики постарались на славу: для обычного неподготовленного пользователя Eee PC с Linux в стандартной настройке - это очень и очень удобно. Всё просто и понятно - ничего лишнего. Напоминает даже не ноутбук(путь и маленький), а какой-то большой КПК с его менюшками, стандартными кнопочками и т.д. Но если начать копать глубже, менять что-то, то нарываешься на множество раздражающих вещей. То сделать нельзя, это не получится, сюда смотреть не желательно, туда вообще не надо и т.д. Кеды, которые я туда поставил, быстро надоели. Да и подглючивали немного. Снести половину софта пакетный менеджер не дал, ругнувшись на зависимости(или предлагал снести слишком много). Последнее, что меня добило - это в режиме "Полноценного рабочего стола"(читай KDE) при загрузке нетбук не спрашивает логина с паролем. Нужно переключаться в стандартный режим. И, да. Добавлять других пользователей помимо стандартного бесполезно. Залогиниться не получится. Автоматом идёт загрузка в стандартного пользователя. В принципе, я нашёл, кто отвечает за такую загрузку, где идёт управление пользователями, но исправлять это и приводить систему в нормальный вид мне было уже неохота. Зачем, если можно поставить нормальную систему, которая 100% хорошо работает.
Отсюда берём образ инсталятора. Заливаем его на флешку:
И грузимся с флешки(при старте нетбука надо нажимать Esc, чтобы выбрать загрузочное устройство).
Далее идёт обычная всем знакомая установка Debian из сети. К слову, wi-fi-карточка определилась сразу и даже замечательно подхватила ключ шифрования. А так же без проблем прописались настройки прокси-сервера с авторизацией. В этот раз я впервые в жизни выбрал reiserfs и пункт "Окружение рабочего стола"(а так же выбрал пункт "Для ноутбуков"). Всё прошло замечательно.
Теперь на моём нетбуке Debian. Скинув туда бекапы моих отточенных временем конфигов, я получил привычную рабочую систему. При этом не пришлось настраивать ничего. С питанием работает нормально, заряд батареи показывает адекватно. Жаловаться нечего.
Единственное, что я ещё не проверял - web-камеру. По-моему не определилась. Но точно не знаю.
Вот man по установке(дублировать здесь не вижу смысла).
Updated: web-камера работает. Надо было просто включить её в /sys.
echo 1 > /sys/devices/platform/eeepc/camera
Отсюда берём образ инсталятора. Заливаем его на флешку:
dd if=debian-eeepc.img of=/dev/sda
И грузимся с флешки(при старте нетбука надо нажимать Esc, чтобы выбрать загрузочное устройство).
Далее идёт обычная всем знакомая установка Debian из сети. К слову, wi-fi-карточка определилась сразу и даже замечательно подхватила ключ шифрования. А так же без проблем прописались настройки прокси-сервера с авторизацией. В этот раз я впервые в жизни выбрал reiserfs и пункт "Окружение рабочего стола"(а так же выбрал пункт "Для ноутбуков"). Всё прошло замечательно.
Теперь на моём нетбуке Debian. Скинув туда бекапы моих отточенных временем конфигов, я получил привычную рабочую систему. При этом не пришлось настраивать ничего. С питанием работает нормально, заряд батареи показывает адекватно. Жаловаться нечего.
Единственное, что я ещё не проверял - web-камеру. По-моему не определилась. Но точно не знаю.
Вот man по установке(дублировать здесь не вижу смысла).
Updated: web-камера работает. Надо было просто включить её в /sys.
echo 1 > /sys/devices/platform/eeepc/camera
вторник, 28 апреля 2009 г.
Рекурсивное удаление файлов
рекурсивное удаление всех файлов в директории и её поддиректориях:
find ./ -type f -delete
Подписаться на:
Сообщения (Atom)
