Официальная возможность получить лицензионный софт бесплатно.
Giveaway of the Day
Это не реклама!

Щелкните для получения прогноза по Биробиджану


Показаны сообщения с ярлыком ubuntu. Показать все сообщения
Показаны сообщения с ярлыком ubuntu. Показать все сообщения

среда, 8 августа 2018 г.

Замена GKSU в 18.04

Итак, кто-то решил, что gksu сильно устарела и более не требуется, поэтому она не входит ни в Debian, ни в его потомков, включая Ubuntu.

Порывшись по форумам, я узнал, что частичной заменой может служить использование pkexec:

pkexec имя_программы

При этом выводится стандартный графический запрос авторизации. Однако, этого недостаточно, потому что pkexec не передает вызываемой программе и не устанавливает переменные DISPLAY и XAUTHORITY, из-за чего графические программы в большинстве своем не запустятся.

$ env|grep -E "XAU|DISP"
DISPLAY=:0.0
XAUTHORITY=/home/troublemaker/.Xauthority

$ sudo su
...

# env|grep -E "XAU|DISP"
DISPLAY=:0.0
XAUTHORITY=/home/troublemaker/.Xauthority
# exit

$ pkexec bash
...

env|grep -E "XAU|DISP"
#

Из протокола видно, что pkexec, в отличие от sudo, не передает эти переменные окружения.

Исключение - XUbuntu, где для большинства штатных программ есть правила для policy kit, частью которого является pkexec. Но как быть, если нет соответствующих правил для нужной программы?

Пока что я нашел такой выход из положения (имитируем gksu/gksudo, запуская приложение с правами root из-под обычного пользователя, который входит в sudoers)

pkexec env DISPLAY="$DISPLAY" XAUTHORITY="$XAUTHORITY" имя_программы

Что происходит? Мы принудительно отдаем значения действующих переменных и запускаем программу от имени root не напрямую через pkexec, а косвенно, как один из аргументов команды env.
Коряво, наверное, но лучше, чем ничего. Возможно, удастся это дело запихать в alias, но проверять лень.

Да, еще есть какой-то хитрый способ запуска примерно так:

программа admin://полный_путь_к_файлу

Например:

gedit admin:///etc/fstab

Но у меня под 16.04 он не сработал, а включать ноут, где уже 18.04, для проверки тоже лень :-)

среда, 4 апреля 2018 г.

WMIC в Ubuntu: продолжение

Продолжая начатую ранее тему опроса виндовых компов по WMI из-под линукса.

Есть более новая версия WMIC, но с ней есть некоторые заморочки при компиляции. Пошаговые инструкции есть здесь.

In the interest of knowledge sharing here is how to get wmic working on Ubuntu 16.04 LTS, the issue was the limit of the number of open files
ulimit -n 100000
cd /tmp
mkdir wmic
cd wmic

apt install autoconf gcc libdatetime-perl make build-essential g++ python-dev
wget http://www.opsview.com/sites/default/files/wmi-1.3.16.tar_.bz2
bunzip2 wmi-1.3.16.tar_.bz2
tar -xvf wmi-1.3.16.tar_
cd wmi-1.3.16/

vim Samba/source/pidl/pidl
:583 (to jump to line 583)
remove the word defined before @$pidl
:wq 

export ZENHOME=/usr
make "CPP=gcc -E -ffreestanding"
cp Samba/source/bin/wmic /bin
Should now be working.

Проверим...

вторник, 30 января 2018 г.

Отключение IPv6 в Ubuntu: второй способ

Я уже писал про отключение поддержки IPv6. Но, как оказалось, можно сделать проще.

1. sudo nano /etc/default/grub

В строке GRUB_CMDLINE_LINUX="xxxxx" после xxxxxx дописываем параметр для ядра: :

GRUB_CMDLINE_LINUX="xxxxx ipv6.disable=1"

Лично у меня на свежепоставленном сервере эта строка была пустая, поэтому у меня оно выглядит так:

GRUB_CMDLINE_LINUX="ipv6.disable=1"

2. sudo update-grub
3. sudo reboot

четверг, 17 августа 2017 г.

Adtool и встроенная убунта в win10

В феврале 2017 я коротко рассказал о найденных мной утилитах для работы с AD и WMI из линукса.
Там же есть вполне реальный пример, где я ищу владельцев компьютеров. С тех пор прошло около полугода, мой боевой потрёпанный винсервер-2003 (на рабочем месте) заставили сменить на win10. Не скажу, что оно меня сильно радует, но после апгрейда до 1703 интерфейс выглядит достаточно удобным (я сказал "достаточно удобным", а не просто "удобным" - это значит, что в нем уже можно работать, матерясь не через каждую минуту, а не чаще чем раз в полчаса-час), и появилась отличная штука - "Подсистема Linux для Windows":

sergei@cnt300022:~/bin$ uname -a
Linux cnt300022 4.4.0-43-Microsoft #1-Microsoft Wed Dec 31 14:42:53 PST 2014 x86_64 x86_64 x86_64 GNU/Linux

sergei@cnt300022:~/bin$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.3 LTS
Release:        16.04
Codename:       xenial

Не буду подробно останавливаться на этой подсистеме, скажу лишь, что она доступна только для 64-битных версий, и что на нее без особых проблем можно ставить и обновлять софт из убунтийско-дебиановых репозиториев. При наличии работающего икс-сервера можно запускать и графические задачи (все 4 видимых приложения запущены из "встроенной" убунты для демонстрационных целей):


Однако, лично мне эта возможность пока без особой надобности, а вот возможность писать и отлаживать скрипты в баше - очень полезна. Чем я и занялся, решая свои повседневные задачи. В данном случае я снова решил довести до ума скрипт, выдергивающий из AD связи между компами и пользователями.

Возможно, кому-нибудь пригодятся и использованные приемы работы со строками, которые я применил в этом скрипте, но о которых не догадался в феврале.

#!/bin/bash
# Выгребаем из AD имена компов и находим их владельцев

# Для элегантности используем переменные и константы вместо длинных выражений.
COMPS_FILE=/tmp/comps-list.txt
OUT_COMPS_FILE=/tmp/comps_out.csv

# В моем домене все компы имеют вид cnt30xxxx, где cnt30 - постоянная часть, а

# xxx ::= [0-9]{3}[0-9a-z]{1} для рабочих станций и typ[0-9]{3} для других типов железа
# Однако, разные типы компов могут жить в разных OU, поэтому вместо "list" использую "search"

# Для удобства дальнейшей обработки найденное приводим к верхнему регистру
adtool search name cnt30*|grep -iE ^cn=cnt30[0-9]{3}[0-9a-z],|tr [:lower:] [:upper:]|sort>$COMPS_FILE


# Поскольку вывожу я всё это в подобие CSV, то сначала пишем строку заголовка
echo \"Comp DN\"\;\"Comp CN
\"\;\"UAC\"\;\"Managed by\"\;\"Description\">$OUT_COMPS_FILE

# А дальше стандартный скучный цикл построчного чтения из созданного чуть выше списка
while read COMP_NAME; do

# Поскольку attributeget работает по CN, а не по DN, но при этом search возвращает именно DN,

# то надо из DN как-то выделить CN. 
# Так можно и работает - так же я делал и в феврале, выкусывая слева "cn=", а справа всё
# после первой запятой
#    PURE_NAME=$(echo ${COMP_NAME/CN\=/}|sed "s/\,.*//")
# Но можно и так (берем 9 знаков, начиная с третьего, нумерация с нуля):
# cn=cnt300000
# 0123456789AB
    PURE_NAME=${COMP_NAME:3:9}

# Не уверен, может ли attributeget получать сразу несколько атрибутов, вероятно - нет,

# так что работаем по старинке: 1 переменная хранит 1 атрибут
    COMP_DESC=$(adtool attributeget $PURE_NAME description)

# Здесь тоже надо выделить чистое CN из прочитанного DN, но имя пользователя имеет неизвестную
# длину, поэтому выбираем его универсальным, хотя и более медленным способом
    COMP_MGBY=$(adtool attributeget $PURE_NAME managedby|sed "s/CN=//;s/\,.*//")

# Меня не очень волнует, есть ли атрибут managedBy у заблокированных компов, но раз в списке
# будут они все, то добавим столбец, показывающий состояние учётки.
# За признак enabled/disabled отвечает бит со значением 0b10 или 0d2, сделаем с ним AND
# и точно будем знать: если 0, значит учетка активна, если 2 - заблокирована
    COMP_UAC=$(( $(adtool attributeget $PURE_NAME UserAccountControl) & 2 ))

# Осталось только всё это красиво вывести
    echo \"$COMP_NAME\"\;\"$PURE_NAME\"\;\"$COMP_UAC\"\;\"$COMP_MGBY\"\;\"$COMP_DESC\"
done <$COMPS_FILE >>$OUT_COMPS_FILE

exit

Во время работы скрипта будут, скорее всего, появляться сообщения типа "error: Error in ldap_get_values for ad_get_attribute:no values found for attribute managedby in object CN=CNT306552,OU=330,OU=Comps,OU=Domain Root Entry,DC=CONTOSO,DC=MS,DC=ru", это нормально - они выводятся на stderr, а наш вывод через stdout падает сразу в файл, так что чистить выходной файл от мусора не понадобится.

На выходе получим вполне приятный CSV вроде:

"Comp DN";"CompCN";"UAC";"Managed by";"Description"
...
"CN=CNT30002A,OU=330,OU=COMPS,OU=DOMAIN ROOT ENTRY,DC=CONTOSO,DC=MS,DC=RU";"CNT30002A";"2";"Сергей Павлович";"убитый комп"
"CN=CNT30002B,OU=330,OU=COMPS,OU=DOMAIN ROOT ENTRY,DC=CONTOSO,DC=MS,DC=RU";"CNT30002B";"0";"Сергей Павлович";"тестовая Win10"

пятница, 17 февраля 2017 г.

Ubuntu: ADTool и WMIC

Когда-то обе эти утилиты были в репозиториях убунты, но по какой-то причине их оттуда убрали. А зря.

ADTool

ADTool не имеет никакого отношения к рекламе (advertising), зато имеет конкретное отношение к активному каталогу (Active Directory).
По сути, это оболочка над клиентом OpenLDAP, позволяющая максимально комфортно обращаться к ADDS из-под линукса. Распространяется в исходниках, работает нормально.

https://gp2x.org/adtool/

В комплекте идет довольно короткий но понятный ман: https://gp2x.org/adtool/usage.html. Из-за ограниченных прав в домене, я больше всего использую команды search (поиск объектов по значению атрибута) и list (просмотр содержимого контейнера), которых как раз недостает в самбовской net.

Базовые параметры - имя пользователя, пароль, узел, от которого начинается поиск, имя сервера AD - можно задавать каждый раз в командной строке или один раз в файле конфигурации.

понедельник, 14 декабря 2015 г.

Ubuntu: Chrome и FireFox не открывают SWF, предлагают сохранить их вместо этого

Довольно известные грабли: с какого-то момента оба основных браузера отказываются открывать локальные флешки, предлагая сохранить их на диск. Но на фига мне их сохранять, если я и так открываю их с диска. Не будем брать запущенный случай "офиспланктонизма головного мозга", когда для копирования файла с носителя на носитель его открывают в программе редактирования и пересохраняют в другое место.
Но что делать, если хочется поиграть в казуальную игрушку или посмотреть мультик в формате SWF?

Корень проблемы кроется здесь. Не вдаваясь в лишние подробности, поясню: с 2013 года тип данных application/x-shockwave-flash стал не самостоятельным MIME-типом, а псевдонимом (alias) для типа данных application/vnd.adobe.flash.movie.

Что это значит для нас? Для нас это значит, что браузер не понимает ответа от базы данных MIME-типов "а еще есть псевдонимы", когда обращается к ней за определением типа файла, который мы пытаемся открыть. База честно рапортует, это мол адобовский фильм, а вовсе не какой-то там флеш, хотя есть псевдонимы...

А вот что понимает встроенный flash в Chrome:

Adobe Flash Player - Версия: 20.0.0.228
Shockwave Flash 20.0 r0
Типы MIME:
Тип MIME Описание Расширения файлов
application/x-shockwave-flash Shockwave Flash
.swf
application/futuresplash FutureSplash Player
.spl

То есть, про application/vnd.adobe.flash.movie он ничего не знает, а значит и не пытается его открыть. Других плагинов, понимающих такой тип данных, тоже как-то не находится, вот и предлагают его сохранить, потому как неизвестно, что с ним еще делать.

Что ж, будем лечить. Как явствует из фрагмента по ссылке выше, надо где-то поменять местами application/vnd.adobe.flash.movie и application/x-shockwave-flash.

Где менять? 

Многочисленные источники подсказывают, что править надо файл

sudo nano /usr/share/mime/packages/freedesktop.org.xml

Лично я в своем экземпляре просто поменял местами то, что в кавычках:

$ diff /usr/share/mime/packages/freedesktop.org.xml 

/usr/share/mime/packages/freedesktop.org.xml.org
18432c18432
<   < mime-type type="application/x-shockwave-flash">
---
>   < mime-type type="application/vnd.adobe.flash.movie">
18488c18488
<     < alias type="application/vnd.adobe.flash.movie"/>
---
>     < alias type="application/x-shockwave-flash"/>
39338c39338
< < /mime-info>
---
> < /mime-info>
</сode>

После изменения файла необходимо актуализировать базу данных:

$ sudo update-mime-database /usr/share/mime

Всё, собственно.

Использованные материалы:

пятница, 23 октября 2015 г.

Ubuntu 15.10 и bluetooth адаптер AR3012

Купил себе ноутбук летом, Lenovo G710. Машинка не без недостатков, самым главным из которых я считаю отсутствие индикаторов обращения к диску и регистровых клавиш, но в целом вполне приличная.
К танцам с бубном для включения встроенного блютуса я был готов. Но в 15.04, которую поставил на этот ноут изначально, вроде бы он заработал искаропки. А может и нет - уже не помню.
А вот под 15.10 - ни в какую.

Спящий режим в ubuntu 15.04, 15.10

История повторяется и повторяется. То, что делал для 13.10, пришлось делать и для 15-ых версий. Почему же до сих пор hibernation не включено по умолчанию???

http://tm-experimental.blogspot.ru/2014/04/1310.html

вторник, 21 июля 2015 г.

Отключение IPv6 в Ubuntu

Поднадоело, что по умолчанию новые серверы идут со включенным IPv6, которого нет в нашей локалке.
WebMin утверждает, что


IPv6 запрещен, однако...

воскресенье, 7 июня 2015 г.

Распаковка поврежденного ZIP-архива в Ubuntu

Как обычно, подкрались неплановые грабли. У младшей дочки был выпускной в саду, разумеется, многие родители снимали это событие. Жена тоже снимала, но с ее съемками проблем как раз не было. Два других "оператора" выложили свое на Яндекс-диск. Поскольку снимков много, то качал архивами. Первый архив размером примерно 1.2Гб скачался нормально, второй, порядка 7Гб не докачался - 4 самых толстых видео не долетели. На выходе получился поврежденный zip размером около 6.5Гб.

Попробовал стандартное

zip -F архив

Бесполезно. Тогда попробовал более жесткое:

zip -FF архив --out новый_архив

Еще хуже: на выходе получил архив точно такого же размера, как и исходный и точно так же поврежденный. Попробовал кое-что еще, но не помогло.

Подсказку нашел здесь.

jar xvf архив.zip

В самом деле, ведь пакеты JAVA - это обычные ZIPы. Jar распаковал, что смог, остальное я докачал.

среда, 29 октября 2014 г.

SAMBA: libnss-winbind при обновлении

Абстракт: после обновления ubuntu пользователи самбы потеряли доступ к шарам.

Обновил сегодня на одном из серверов убунту с 12.04 до 14.04.1
В целом обновилось нормально, но вылезла совершенно неожиданная грабля, о которой я и не подумал: настройки в /etc/nsswitch.conf сохранились, wbinfo работает отлично, но авторизация пользователей не проходит: check_ntlm_password:  Authentication for user FAILED with error NT_STATUS_NO_SUCH_USER, и всё тут!
Скопировал было содержимое /etc/pam.d с другого сервера, на который изначально ставилась 14.04 - чуть не остался без доступа в систему, благо, что специально открыл 2 ssh сессии, одну из которых - под рутом. Удалось вернуть всё на место.
Вроде перепробовал все варианты, ничего не помогает. В одном из нагугленных сайтов кто-то упоминал /lib/.../libnss_winbind.so
Дай-ка, думаю, проверю...

$ locate nss_winbind
/lib/x86_64-linux-gnu/libnss_winbind.so.2
/usr/share/doc/samba-doc/examples/nss/nss_winbind.c.gz
/usr/share/doc/samba-doc/examples/nss/nss_winbind.h


Вроде всё путём, однако...

$ ls /lib/x86_64-linux-gnu/libnss_winbind*
ls: cannot access /lib/x86_64-linux-gnu/libnss_winbind*: No such file or directory


То есть, как это - нету такого файла? Locate же говорит, что есть?


$ ls /lib/x86_64-linux-gnu/libnss_*
/lib/x86_64-linux-gnu/libnss_compat-2.19.so  /lib/x86_64-linux-gnu/libnss_files-2.19.so   /lib/x86_64-linux-gnu/libnss_nis-2.19.so
/lib/x86_64-linux-gnu/libnss_compat.so.2     /lib/x86_64-linux-gnu/libnss_files.so.2      /lib/x86_64-linux-gnu/libnss_nisplus-2.19.so
/lib/x86_64-linux-gnu/libnss_dns-2.19.so     /lib/x86_64-linux-gnu/libnss_hesiod-2.19.so  /lib/x86_64-linux-gnu/libnss_nisplus.so.2
/lib/x86_64-linux-gnu/libnss_dns.so.2        /lib/x86_64-linux-gnu/libnss_hesiod.so.2     /lib/x86_64-linux-gnu/libnss_nis.so.2


Гм... точно нету. Лезу на другой сервер:

$ ls -la /lib/x86_64-linux-gnu/libnss_winbind*
lrwxrwxrwx 1 root root    19 июля   9 06:39 /lib/x86_64-linux-gnu/libnss_winbind.so -> libnss_winbind.so.2
-rw-r--r-- 1 root root 18592 авг.   2 09:37 /lib/x86_64-linux-gnu/libnss_winbind.so.2


И откуда оно?

$ sudo dpkg -S libnss_winbind
Password: 
libnss-winbind:amd64: /lib/x86_64-linux-gnu/libnss_winbind.so.2


Вернулся на обновленный:

# apt-get install libnss-winbind
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
НОВЫЕ пакеты, которые будут установлены:
  libnss-winbind
обновлено 0, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 7 пакетов не обновлено.
Необходимо скачать 12,3 kБ архивов.
После данной операции, объём занятого дискового пространства возрастёт на 167 kB.
Получено:1 http://ru.archive.ubuntu.com/ubuntu/ trusty-updates/universe libnss-winbind amd64 2:4.1.6+dfsg-1ubuntu2.14.04.3 [12,3 kB]
Получено 12,3 kБ за 0с (42,2 kБ/c)       
Выбор ранее не выбранного пакета libnss-winbind:amd64.
(Чтение базы данных … на данный момент установлено 95309 файлов и каталогов.)
Preparing to unpack …/libnss-winbind_2%3a4.1.6+dfsg-1ubuntu2.14.04.3_amd64.deb ...
Unpacking libnss-winbind:amd64 (2:4.1.6+dfsg-1ubuntu2.14.04.3) ...
Настраивается пакет libnss-winbind:amd64 (2:4.1.6+dfsg-1ubuntu2.14.04.3) …


Ну и кто ты после этого? На фига было сносить эту библиотеку?

четверг, 24 апреля 2014 г.

NOIP.COM вместо DynDNS

Как я уже писал, халява с DynDNS заканчивается - еще немного и автоматические клиенты в модемах типа моего DSL-2600U перестанут нормально работать и регистрировать обновленный IP в DNS. Печально, но такова жизнь.
После обсуждения мне посоветовали посмотреть в сторону www.noip.com. В принципе, они предлагают примерно то же самое, что некогда предлагал dyn.com. Я решил попробовать.

Первая засада: мой модем не поддерживает эту службу, значит надо ставить клиента на локальный комп. И какой адрес он попытается зарегистрировать? Из сети 192.168.х.х?
Оказалось, не так всё плохо - в noip это предусмотрели и клиент умеет работать через NAT. Более того, если я правильно понял, то работа через NAT в этом клиенте по дефолту, ее надо явно отключать ключом -F. Что ж, попробуем...

Делаем, как написано в KB:
(вариант с установкой через apt-get отпадает - пакет есть только для 10.04, что меня совершенно не устраивает)

How to install No-IP Linux Dynamic Update Client (DUC) on your Ubuntu 12.04 LTS.

You will be able to install No-IP.com’s DUC in just a few minutes with terminal. Once you have opened up your terminal window you will need to login as the “root” user. You can become the root user from the command line by entering “sudo -s” followed by the root password on your machine.
(для удобства логинимся как root, я использовал sudo su)

cd /usr/local/src/
wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
tar xf noip-duc-linux.tar.gz
cd noip-2.1.9-1/
make install


You will then be prompted to login with your No-IP.com account username and password.
(если компиляция прошла нормально, то надо будет ввести данные заблаговременно созданного аккаунта)
Вот как выглядит окончание компиляции:
(интервал обновления указывается в минутах, я оставил дефолтные 30)

Auto configuration for Linux client of no-ip.com.

Please enter the login/email string for no-ip.com мой_логин
Please enter the password for user 'мой_логин'  *******

Only one host [мой_хост.no-ip.biz] is registered to this account.
It will be used.
Please enter an update interval:[30]
Do you wish to run something at successful update?[N] (y/N)  ^M

New configuration file '/tmp/no-ip2.conf' created.

mv /tmp/no-ip2.conf /usr/local/etc/no-ip2.conf

To Configure the Client:

(этот шаг не требуется, если используется только один хост - автоматическая настройка выполняется сразу после компиляции)
As root again (or with sudo) issue the below command:
/usr/local/bin/noip2 -C (dash capital C, this will create the default config file)
You will then be prompted for your username and password for No-IP, as well as which host names you wish to update. Be careful, one of the questions is “Do you wish to update all hosts”. If answered incorrectly this could effect host names in your account that are pointing at other locations.
Now the client is installed and configured, you just need to launch it. Simply issue this final command to launch the client in the background:
/usr/local/bin/noip2
Read the README file in the no-ip-2.1.9 folder for instructions on how to make the client run at startup. This varies depending on what Linux distribution you are running.

Автозапуск

Пришлось немного повозиться, несмотря на вышеупомянутый README.
В итоге родился файл с костылями:

/etc/init.d/noip2:

        #! /bin/sh
        # . /etc/rc.d/init.d/functions  # uncomment/modify for your killproc
        case "$1" in
            start)
                echo "Starting noip2."
                /usr/local/bin/noip2
            ;;
            stop)
                echo -n "Shutting down noip2."
                pkill noip2

                #killproc -TERM /usr/local/bin/noip2
            ;;
            *)
                echo "Usage: $0 {start|stop}"
                exit 1
        esac
        exit 0


В оригинале вместо pkill стояла выделенная красным строчка, но мне было лень возиться и искать эту killproc.
Ну и чтобы не мучиться с upstart-ом просто создал в /etc/rc3.d:

ln -s /etc/init.d/noip2 S69noip2

Пока вроде работает...

вторник, 8 апреля 2014 г.

Спящий режим в 13.10


Но речь вот о чем. Сегодня, 8 апреля, в день окончательного завершения поддержки Windows XP (мир ее битам), мне захотелось отправить свой комп с 13.10 в спящий режим. Да-да, несмотря на то, что еще немного и 13.10 сдаст пост 14.04, впервые усыпить ее мне захотелось только сегодня. А вот фиг там: никак, от слова совсем. Все штатные усыплялки говорили, что никак.

Пришлось рыться в собственных загашниках. Но там описан способ для 12.04. В принципе, он работоспособен, хотя и прошло полтора года между 12.04 и 13.10. Каюсь, однако: сначала рылся не в загашниках, а в великом и могучем. Который и подсказал, что в файл /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla надо помещать два раздела:

[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate
ResultActive=yes
 
Проверил, работает. Ура. Главное, не забыть об этом в 14.04 и далее... :-)

вторник, 25 марта 2014 г.

Ошибка обновления apt-get/aptitude/dpkg: BADSIG 40976eaf437d05b5

На уже упомянутом сервере, после того как вправил мозги керберосу, появилась еще одна неприятность:

The following signatures were invalid: BADSIG 40976EAF437D05B5 Ubuntu Archive Automatic Signing Key

Что в переводе с папуасского на мандаринский значит "нельзя проверить ЭЦП архивов из главных репозиториев". А это уже чревато.

Лекарство:

sudo aptitude -o Acquire::http::No-Cache=True -o Acquire::BrokenProxy=true update

Потом можно сделать обычное update. Мне помогло. Совет взят здесь. Судя по тому, что дата публикации - 2008, а дата ответа 2009, проблема не сильно новая.

Там же есть альтернативное решение:

sudo rm -r /var/lib/apt/lists
sudo mkdir -p /var/lib/apt/lists/partial
sudo aptitude update

О бедной собачке замолвите слово (kerberos)

(абстракт: после установки кербероса стало невозможно войти в ubuntu кроме как через recovery shell - при попытке обычного логона даже не предлагается ввести пароль, сразу идет возврат ко вводу имени пользователя)

Готовил очередной виртуальный сервер ко вводу в новый домен. Это будет первый самба-сервер в этом домене. В старом особых проблем не возникало, надеюсь, не сильно их будет и в новом. Однако, такие вот неплановые грабли: неожиданно sudo стала давать segfault, а после перезагрузки вообще не удалось залогиниться. Благо, сервер еще не в боевом состоянии, поэтому открыта recovery shell в grub-е.

Установил krb5_user, вроде бы правильно. Но напутал в /etc/krb5.conf - неправильно прописал "области действия" - realm-ы. Из-за чего и огрёб.
Неправильность была в том, что в разделе [domain_realm] забыл после доменов указать их реалмы и бедный керберос просто не знал, откуда я такой красивый нарисовался, после чего посылал меня.

среда, 12 июня 2013 г.

How do I configure lightdm to work with XDMCP?



To enable the XDMCP server in LightDM edit /etc/lightdm/lightdm.conf and add the following section:
[XDMCPServer]
enabled=true
Then restart LightDM with sudo restart lightdm from a text console (logout from any graphical sessions first).
You can set the XDM-AUTHENTICATION-1 key by setting key=value (value is in the same format as is used in the X -cookie option). If the key is not set then no authentication is used.
You can change the UDP/IP port by setting port=1234.
All the available LightDM settings are shown in the example configuration in/usr/share/doc/lightdm/lightdm.conf.
---
I have been trying to enable XDMCP on GDM without much success. Following some instructions I have edited /etc/gdm/custom.conf and added:
[daemon]
RemoteGreeter=/usr/lib/gdm/gdm-xdmcp-chooser-slave
[xdmcp]
Enable=true
Then restarted gdm and tried to connect both locally and from a remote system with:
Xnest :1 -query localhost
Xnest :1 -query remote_system_hostname
I just get a black screen instead of the GDM window as expected. I am missing something ?

вторник, 4 июня 2013 г.

Авторизация на прокси Squid 3 через ADDS

Возникла такая задача, особенно с тех пор, как районы отгородились маршрутизаторами и авторизация по MAC-адресам стала невозможна.

Задача не новая, но решать надо "как в первый раз", тем более, что это и есть первый раз, когда я такое проделал. Два месяца назад я забил сюда как в закладки ссылку на блог Лиссяры. Всё бы ничего, но он описывает работу с FreeBSD, а у меня таки "неправославная" ОС в его понимании. Ага, всё та же убунта-сервер (10.04.4, Lucid) с третьим сквидом. Кроме того, статье на данный момент около 6 лет, а за это время космические корабли избороздили еще кусок вселенной... В общем, мысленно поблагодарив Лиссяру за наводку, я отправился дальше.

Куда более подходящую статью я нашел у Макродмина. Статье нет еще и года, поэтому информация актуальна.

1. sudo apt-get install ntp
настраиваем синхронизацию времени со своим контроллером, вписывая его в нужное место в /etc/ntp.conf:

server имя_или_IP_контроллера_домена

Макродмин советует ставить туда IP, у меня нормально работает и с FQDN, тем более, что в примерах внутри самого этого файла указан ntp.ubuntu.com, а не его IP.

2. В /etc/resolv.conf у меня уже были прописаны нужный домен и в правильном порядке серверы DNS - первым сервером стоял адрес контроллера. Порядок здесь имеет значение - если на первом откликнувшемся сервере нет нужных SRV и т.п. записей, то не удастся ввести прокси в домен - будет тупо не находить контроллер.

3. Поскольку на этой "машине" (сервер крутится в виртуалке) отродясь не было ни самбы, ни злой собаки-цербера, то согласился с Макродмином и тупо установил рекомендованное:

sudo apt-get install samba winbind krb5-admin-server krb5-clients krb5-config krb5-doc krb5-kdc krb5-user

 При установке пакетов вылезали различные интересные параметры конфигурации, которые я установил в соответствии с подобными им, которые уже сделаны у меня на двух самбовских файл-серверах.

4. В этом месте у Макродмина опечатка, которая стоила мне нескольких седых волос. Вот мой рабочий конфиг самбы:

# cat smb.conf
[global]
workgroup = MYDOMAIN
realm = MYDOMAIN.FQDN.RU
netbios name = VMPROXY
server string =_
security = ADS
encrypt passwords = true
password server = pdc.mydomain.fqdn.ru
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
winbind uid = 10000-20000
winbind gid = 10000-20000
wins server = xxx.yyy.zzz.ttt

В качестве wins-сервера указан именно IP  моего PDC, остальное самоочевидно.
Оранжевый прямоугольник обозначает то же самое, что и у Макродмина - после знака равенства ставим пробел, чтобы самба не формировала серверную строку типа "samba server (ubuntu чего-то там)".
А вот подчеркнутое жирное "yes" - это как раз то место с опечаткой: в оригинале написано "yse", и я долго не мог понять, на что же самба ругается разными нехорошими словами вроде "lp_bool(yse): value is not boolean!". То, что это следствие опечатки, заметил совершенно случайно.

5. Править файл /etc/krb5.conf сильно не пришлось: как я уже сказал, при установке пакетов мне было задано много вопросов, ответы на которые были автоматически вписаны в нужные конфиги. Часок работы напильником и всё готово. (из текста конфига я удалил оригинальные комментарии)

# cat krb5.conf
[libdefaults]
    default_realm = MYDOMAIN.FQDN.RU

    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]
    MYDOMAIN.FQDN.RU = {
        kdc = pdc.mydomain.fqdn.ru
        kdc = bdc.mydomain.fqdn.ru
        kdc = 3rddc.mydomain.fqdn.ru
        admin_server = pdc.mydomain.fqdn.ru
        default_domain = MYDOMAIN.FQDN.RU    }


[domain_realm]
    .mydomain.fqdn.ru = MYDOMAIN.FQDN.RU
     mydomain.fqdn.ru = MYDOMAIN.FQDN.RU

[login]
    krb4_convert = true
    krb4_get_tickets = false

Обращаем внимание на регистр букв!!!

6. После внесения правок просим билетик у кербероса:

kinit administrator

где administrator - логин администратора домена.
Если не последовало ругани и klist выдал что-то осмысленное, то вводим прокси в домен:

net ads join -U admin

Как сообщают разные источники и мой личный опыт, может вылезти невразумительная ошибка насчет сервера DNS (у меня в этот раз не вылезла, но с прежними самбами бывало), ее можно смело игнорировать.

7. Сквид у меня уже был настроен, поэтому не заморачиваюсь общими вопросами, а сразу лезем править конфиги. Для большей гибкости, конфиг сквида у меня разбит на три файла - основной конфиг (squid3.conf), файл "учёток" (squid3.acl.conf) и файл ограничений (squid3.restrictions.conf), причем два последних подключаются директивой include к первому.

При правке возникли некоторые вопросы, ответы на которые я нашел на вики сквида: авторизация ntlm и авторизация ntlm с использованием групп. Существенная грабля: нельзя тупо копипастить! Я сидел и тихо сходил с ума, пытаясь понять, почему же сквид жалуется "хелпер слишком часто падает и я отключаюсь". У меня сквид третьей версии и установлен в squid3. Но в абсолютном большинстве примеров речь о второй версии, установленной в просто squid. И естественно, что хелпер вылетал - трудно запустить что-то вроде /usr/lib/squid/program, если на самом деле оно находится в /usr/lib/squid3/program.

В домене я создал отдельную ОЕ: domain/groups/ACL/Internet. В ней находятся группы разрешения и запрета доступа - по одной группе на каждую службу. Все эти группы в зависимости от того, что они делают, входят в супергруппы inet_allow или inet_deny, живущие уровнем выше в domain/groups/ACL.

8.Итак, конфиги сквида (частичные):

SQUID3.CONF
#http://wiki.squid-cache.org/ConfigExamples/Authenticate/Ntlm
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 30

auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 15
auth_param basic realm Proxy Autentification Required
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off

SQUID3.ACL.CONF
#Проверка работы через AD
    acl    nt_group    proxy_auth    REQUIRED
    external_acl_type    nt_group %LOGIN /usr/lib/squid3/wbinfo_group.pl
    acl    dom-white-list    external    nt_group    inet_allow
    acl    dom-black-list    external    nt_group    inet_deny

SQUID3.RESTRICTIONS.CONF
#Через домен
    http_access    allow    dom-white-list
    http_access    deny    dom-black-list


Как раз из-за последнего "/usr/lib/squid3/wbinfo_group.pl" у меня и вылезали ошибки, о которых я говорил - в примерах везде было "squid", а не "squid3".

9. Ну и финальный штрих. Winbind при запуске создает каталог /var/run/samba/winbindd_privileged, на который дает права группе winbindd_priv. Сквид в нее не входит и сильно расстраивается из-за невозможности проверить права доступа. Фигня. Просто добавляем его в эту группу. У меня сквид работает от имени пользователя proxy:

gpasswd -a proxy winbindd_priv

Перезапускаем самбовские службы и сквид.

В некоторых источниках предлагают изменить стартовый скрипт самого winbind-a, но это неправильно, я считаю.

10. Осталось внести нужных пользователей в соответствующие группы, а дальше уже раздавать полномочия по мере необходимости... После внесения пользователя в группу разрешения/запрета не помешает сделать

sudo service squid3 force-reload

чтобы не ждать, пока сквид повторно обратится к AD за проверкой разрешений. Поскольку доступ в домен мне нужен только для проверки, входит ли указанный пользователь в указанную группу, то я не настраивал nsswitch и т.п. дела.

Для проверки работы хелпера можно воспользоваться командой:

# ntlm_auth --username=логин
password:
NT_STATUS_OK: Success (0x0)

Где вместо "логин" подставляем имя пользователя из домена.

четверг, 9 мая 2013 г.

Подключение box.com в линуксе

Пару месяцев назад, поддавшись моменту, зарегистрировал себе бесплатный аккаунт на box.com - очередное файлохранилище на 50 гигов. Речь, однако, не о самом обменнике, а об его практическом использовании. Веб-интерфейс у него приятный, спору нет, но лично меня, например, раздражает, что для загрузки целого каталога надо запускать java-апплет. Штатного синхронизатора под линукс тоже нет, только под винду и макось. Стало быть, надо найти способ смонтировать хранилище в файловую систему.

Из официального FAQ:
В: Поддерживает ли box.com доступ через WebDAV?
О: Да, поддерживает. Адрес: https://www.box.com/dav

Отлично. Но как? Ответ нашелся здесь. Однако, xmodulo описывает подключение через штатный GUI Nautilus для Unity/Gnome, которого нет в XFCE. Ну, или я очень плохо искал. Выглядит это так (за неимением юнити, использую авторские скриншоты):


  1. Выбираем пункт "подключиться к серверу":
  2. Вводим параметры:
  3. Готово!


Но этот путь мне не подходит, ибо нету "подключения к серверу". Что ж, продолжим читать xmodulo... (в его примерах используется vi, лично я предпочитаю nano)

Для подключения без использования GUI воспользуемся davfs2.


  1. Устанавливаем:
    sudo apt-get install davfs2
  2. Создаем точку монтирования (у меня так, вам никто не запрещает разместить ее где-то в другом месте):
    $ mkdir ~/mnt/boxcom
  3. Поскольку WebDAV от box.com не поддерживает блокировку файлов, отключим её, чтобы не получать сообщения об ошибках:
    sudo nano /etc/davfs2/davfs2.conf
    Если файл раньше не правили, то в нем будет строчка
    #use_locks       1

    Убираем комментарий и меняем 1 на 0 - мы НЕ используем блокировки:
    use_locks       0
  4. Поскольку мы не хотим возиться с лишними sudo, то перенастроим пакет так, чтобы монтирование davfs было разрешено и простым смертным обычным пользователям:
    sudo dpkg-reconfigure davfs2


  5. А еще для этого надо добавить себя в соответствующую группу пользователей:
    (дальше по тексту замените sergei на своё имя пользователя)
    sudo usermod -a -G davfs2 sergei
  6. Вводить каждый раз длинную команду монтирования тоже некошерно, поэтому слегка поправим /etc/fstab, добавив в него строку (замените /home/sergei/mnt/boxcom на путь к вашей точке монтирования):
    https://www.box.com/dav /home/sergei/mnt/boxcom davfs rw,user,noauto 0 0
  7. Подключаемся:
    $ mount boxcomPlease enter the username to authenticate with server https://www.box.com/dav or hit enter for none.  Username: <ваш бокс-комовский логин>Please enter the password to authenticate user <ваш бокс-комовский логин> with serverhttps://www.box.com/dav or hit enter for none.  Password: <ваш бокс-комовский пароль>
Готово, собственно! Посмотрите командой mount, как оно подключилось, а с помощью df проверьте, сколько там свободного места. Чтобы еще больше облегчить себе жизнь и монтировать этот сетевой диск без лишних нажатий, добавим имя и пароль в соответствующий файл:

(защищаем его от непрошенных глаз)
$ chmod 600 ~/.davfs2/secrets

(собственно правка)
$ nano ~/.davfs2/secrets

https://www.box.com/dav <ваш бокс-комовский логин, как правило - емайл> <ваш бокс-комовский пароль>


воскресенье, 4 ноября 2012 г.

Ubuntu 12.10 и /media

Начиная с Квантового Кетцаля, изменился порядок монтирования съемных дисков. Было:

/media/точка-монтирования-диска

стало:

/media/имя-пользователя/точка-монтирования диска

Например, мой диск с образами виртуальных машин, который привычно жил в /media/vdi, переехал в /media/sergei/vdi, что сильно расстроило VirtualBox.

С одной стороны, так стало лучше, всё-таки, *nix - многопользовательская система, и нововведение разруливает проблему одновременной работы нескольких пользователей. Не знаю, правда, как оно себя поведет, если один и тот же диск захотят смонтировать сразу два пользователя - вроде бы монтирование одного ресурса в несколько точек не запрещено, но вот как быть с правами доступа и прочим? Надо, кстати, проверить будет, да.

С другой стороны, у тех, кто делал не чистый реинсталл, а обновлялся, пошли по бороде все привязки к месту на диске, как в вышеприведенном диске с хранилищем образов. А если у кого-то остались множественные .desktop и просто ссылки в скриптах, тем было впору вешаться.

Однако, как гласит известная длинная пословица, "на хитрую ж... найдется х... винтом". Вспоминаем, что мы имеем из инструментов, в частности про символические ссылки - инструмент, для которого в винде, как минимум - по win2003 включительно (в более новых не проверял) есть только жалкое недокументированное подобие под названием joint, создавать которое штатными средствами нельзя*.

Итак, задача: что-то сделать, чтобы VirtualBox не плакал, что не может найти образы дисков в /media/vdi и чтобы не пришлось его перенастраивать на новое местоположение.

Решение: типичный unix-way.

ln -s /media/sergei/vdi /media/vdi
(ls -s цель-ссылки размещение-ссылки)

И всё, собственно. Диск монтируется куда его захотела впихнуть система, но у меня доступ к нему по-прежнему через привычный путь. Если диск не смонтирован, то ссылка становится invalid, но это меньшее из зол. На лончпаде со мной согласились, что не может не радовать.

Уверен, новый тип монтирования уже не отменят, стало быть, в будущем, делая привязки к смонтированным ресурсам, нужно сразу закладывать в путь точку монтирования в виде /media/$USER/точка-монтирования.

* я использую эти джойнты под виндой - у меня создан каталог \mnt, в котором куча подкаталогов с именами флешек и съемных дисков, когда-либо подключавшихся к моему рабочему компу: в "управлении дисками" я не назначаю каждой из них букву, а подключаю к "пустой папке NTFS". Кстати, я был просто вынужден так сделать по двум причинам:
1. у нас пока еще используется Novell Netware, но винда почему-то кладет с пробором на то, что на некую букву назначен сетевой диск, и охотно подцепляет свежеподключенный накопитель на ту же самую букву. Но при этом получается, что два диска делят одну букву и делят ее не на равных: сетевой диск имеет преимущество, а к внешнему накопителю через эту букву не добраться, пока не отключен сетевой.
2. Количество возможных букв ограничено длиной латинского алфавита (26), как минимум 2 из которых всегда заняты - A: и C:. А вот в каталоге mnt у меня уже около сотни подкаталогов...

четверг, 6 сентября 2012 г.

UUID в убунте и не только


Удобная, надо заметить, штука...

Но недавно тупо заткнулся, не сообразив, как же мне посмотреть UUID-ы существующих дисков для создания нормальных записей в fstab. Не, я, конечно, могу глянуть что-то вроде

# ls -la /dev/disk/by-uuid/
lrwxrwxrwx 1 root root  10 2012-09-05 15:40 0d7aa8fb-bf3e-4b00-920e-c111c0b497c3 -> ../../sda1
lrwxrwxrwx 1 root root  10 2012-09-05 15:40 cc554ed1-3953-4e0e-bd86-94d3bafd48ef -> ../../sda5
lrwxrwxrwx 1 root root  10 2012-09-05 15:40 f10836e7-6594-4463-93c9-ca9c28ff71d0 -> ../../sdb5
но это сильно отдает извращением. Гораздо проще воспользоваться штатной командой
 # blkid
/dev/sda5: UUID="cc554ed1-3953-4e0e-bd86-94d3bafd48ef" TYPE="swap"
/dev/sdb5: UUID="f10836e7-6594-4463-93c9-ca9c28ff71d0" TYPE="ext4"
/dev/sda1: UUID="0d7aa8fb-bf3e-4b00-920e-c111c0b497c3" TYPE="ext4"
Почему я об этом пишу? Потому что родной apropos никак не связывает UUID и blkid. Оно, конечно, понятно, что UUID - это один из "block device attributes", но всё же как-то не всегда это вспоминается.