⌨ Labor omnia vincit ☮

Good idea %)

Posted in security by anaumov on 26.01.2018

pam-accesscontrol: PAM-based access control system written in python

Posted in python, Qt, security by anaumov on 27.12.2017

In traditional UNIX/Linux authentication there is not much granularity available in limiting a user’s ability to login. For example, how would you limit the number of users from a specific group? What if you want to allow some users to log in from a specific host, but disallow all others from a same host? Firewall can not help at this point. What if you want to allow SSH for someone, but not X- or login sessions on tty? And… what if you want to be able to decide about allowing SSH-session for someone at the same moment when connection will be established?

PAM, or pluggable authentication modules, allows for you just this sort of functionality (and more) without the need to patch all your services. PAM is flexible enough to provide solution for all of the above listed issues. All what you need at this point is just implement a new PAM-plugin for your needs.

Some times ago I came across pam_python — a PAM module that lets you write PAM modules in python. During paying with pam-python I implemented my own plugin as a hobby. At the beginning that was just notification window about every new incoming SSH connection. After that I added possibility to allow or denied every new established SSH connection by asking the owner of the X session (that was implemented just for desktop users in mind, of course). Next – define the list of users who may to login any time, who should wait for confirmation and who should never get the shell on my machine. I came on idea to put these lists to the config file. Project grew quickly. Now I would like to introduce it, show the sources and invite everyone (who love coding) to take a part of the development 😉


I called it pam-accesscontrol. Before we start I would like to remind you, that it was implemented as a hobby project just for fun and it’s still unstable, i.e. can broke something on your system. “Someting” is, for example, possibility to login via tty/login(1), SSH or display manager . So, you can just look at the source code or, if you really know what you’re doing, install the package.

To be able to understand how PAM and pam-accesscontrol communicate with other, take a look at doc-page where you can find the list of pam-python methods which are nothing other then a interface for Linux PAM APIs. Every PAM event like open_session, close_session, authenticate, etc. will call appropriate pam-python method. This method will call appropriate pam-accesscontrol function.
For example, OpenSSH: by using password authentication procedure PAM calls pam_authenticate function, which call pam-python’s pam_sm_authenticate function. You just need to implement pam_sm_authenticate-method in your plugin to intercept further steps in the authentication process. Pam-python is just a “bridge” between PAM and pam-accesscontrol:

As you can see, we also should tell PAM (add configuration to files in /etc/pam.d/ directory) to call plugin in some necessary cases. Necessary cases are services like, for example, sshd or login (depend on our wishes) and events like auth, session, etc.

List of all available PAM modules can be found in /lib/$(arch)-linux-gnu/security/ directory. After installiing pam-python package pam-python.so file should be there and after installing pam-accesscontrol package — accesscontrol.py script.


PAM-accesscontrol’s behavior depend on its config file. You add rules for /etc/pam.d/* services like sddm or login. It’s similar to iptables rules: by an authenticate new user or creating new session, pam-accesscontrol will read config file, parse it and try to make a decision. Actually, pam-accessconfig is nothing else then just a parser. It’s possible to close access for everybody and specify in what case and for whem it will be open, or vice versa — just define who should have no access. At the end, decision has made by pam-accesscontrol will be returned to PAM.

Right after package installing it has just one rule in its config file: DEFAULT:OPEN, i.e. access open for everyone. If this DEFAULT variable will be not set in config file, pam-accesscontrol initialize it with CLOSE value.

Let me show some configuration examples.

> cat /etc/pam-accesscontrol/pam-accesscontrol.conf

sshd OPEN GROUP lp,users
sddm OPEN USER bob,alice
login OPEN USER bob,alice

First line of this configuration closes access for all users. After that we open SSH (password authentication) for all users from lp and users groups (it supports LDAP groups, POSIX groups and primary user groups); open access via sddm for users bob and alice; open access via login for users bob and alice. Pretty easy. Every rule should have exactly 4 fields. If rule is broken, it will be just ignored.

It’s possible to set limit for number of users from specific group.

sshd NUMBER GROUP users:2,lp:3

For example, this line sets limit to 2 for group users and to 3 for group lp. In other words, new SSH connection will be possible for users from group lp, if only 2 or less users will be logged on this system at the same time.

It’s also possible to configure it so that it will ask you for every new incoming connection. With this line in config file everyone from group lp will wait for your confirmation:

sshd-key ask group operation

It means, access will be granted via SSH by using public-key authentication only for someone from group operation… only if X-session owner allow it.

It calls QMessageBox from PyQt5 that returns 0 or 1 to pam-accesscontrol depend on your choice. This value will be interpreted as allow or not allow. By the way, if there is no active Xorg session, pam-accesscontrol will not be able to ask you… so in this case this will be interpreted as an OPEN rule. Also keep in mind that pam-accesscontrol ask owner of the Xorg session only for the first SSH incoming connection. Remote user would like, for example, to copy 100 files on its host; in that case also just one confirmation at the begging will be needed.


X-session owner also will be informed when remote user (whose SSH session was confirmed through QMessageBox) ends its SSH session.


Pam-accesscontrol uses syslog. It creates logs after every successful authentication. As usual, on systemd-based systems you can use journalctl(1). Also some logs can be found in /var/log/auth.log (authentication phase) and /var/log/syslog files. By default, there is not so much information. For debugging and during development it’s a good idea to enable debug/verbose mode. Add debug:true to the config file and it will put much more info about why it made this or that decision.
It also creates its own logfile /var/log/pam-accesscontrol-YEAR-MON.log where is stored short statistic about when, who, via which interface tried to login and also — was it successful or not.

Use ldd(1) to check PAM compatibility for supported interfaces:

# ldd $(which sshd) | grep pam
        libpam.so.0 => /lib64/libpam.so.0 (0x00007f82cdfff000)
# ldd $(which login) | grep pam
        libpam.so.0 => /lib64/libpam.so.0 (0x00007fee7f3c9000)
        libpam_misc.so.0 => /lib64/libpam_misc.so.0 (0x00007fee7f1c5000)

Google Cloud Summit 2017, Munich

Posted in cloud, Events by anaumov on 12.12.2017

OnBoard meeting at Google on 20 November sparked interest in me in Google Cloud Platform. After this event, having considered that again and collecting everything together at home, I got some new questions about this platform. That was not only technical questions. That was interesting to know about plans for developing, what developers think about its platform itself, how they compare GCP with Amazon Web Services and Microsoft Azure in general, what customers think about it and why they move its data to GCP, how secure is it, and how can I be sure that my data in the cloud will not be analyzed, and what happened if, for example, some employee upload some personal confidential data by mistake. There are a lot of questions, actually. Google Cloud Summit 2017 in Munich was organized exactly to answer on these.

All presentations were spited into four parallel sets. Thus, you could better orient yourself and could know better what to expect from this or that talk/presentation. Technical talks include not only HOWTOs about integration your infrastructure with an Google Cloud, but also how exactly “under the hood” components communicate with other. GCP includes few Free Software components like Docker and Kubernetes, so talks about there components, where Google shared its experience, attracted a lot of attention of DevOps people.

There was few places where you could ask Google developers about technical things like architecture in general or compatibility with some extra components or, for example, does Google has some plans to open the source code for GCP? 😉
By the way, with this topic – opening the source code for everybody, I got the luck – I met there one developer who spend some time to develop OpenStack in the past. He explained about some problems with OpenStack like, for example, maximum limits for amount of instances (VMs) deployed at same time, that GPC doesn’t have. I don’t want to put technical details here, but I’m going to test it. Unfortunately, that’s not so easy to play with cloud at home 🙂 It needs at least small datacenter if you want to test such things like maximum capacity, how scalable is it, how easy you can scalable it, etc. But if we’re talking about GCP, we will need not just a datacenter, but Google’s datacenter… Yes, unlike OpenStack, GCP is a proprietary software – it’s not available for downloading at all. Again, Google and its customers doesn’t see that as a problem: Microsoft Azure and Amazon Web Services also proprietary, so what?

There were also few stands where Google’s employees share information about specific topics like Google training program, GCP and bigdata, etc. I spent some time to inform myself about possibilities to prepare and take the exam and get certificate in Munich. Cloud is a very sexy topic today and it’s not just interesting, but I guess to have Google certificates can be very useful in case you can find new good employer.

As a conclusion I would like to thank Google for a very good organization summit. I also would like to see more Open Source components in GCP. This is my wish. In my opinion this will be a big-improving-quality-step.
Thanks again and see you next time 😉

Google Cloud Platform: OnBoard training in Munich

Posted in cloud, Events by anaumov on 22.11.2017

Yesterday Google invited everyone who is interested in cloud technology to its office in Munich. Cloud OnBoard is a free, full-day training event, where Google introduces its “Google Cloud Platform”. Well… what can I say… That was amazing. Well organized, well presented. I love it. I never worked with GCP before. This event included not only in-depth technical presentations about every part of the platform, but also demonstrations, examples, questions and exercises for participants.

Google Cloud Platform includes not only typical cloud parts that has, for example, OpenStack, but also supports BigData components. Yes, it’s compatible with API of Hadoops ecosystem. That was a nice surprise for me. When I visited some Cloud or BigData events or workshops I asked myself all the time why these technology can’t be merged. I missed an easy way to add new nodes to the Hadoop-cluser that could to analyze installed already components and add needed components to the new node of the cluster automatically. That’s exactly where cloud used for. On another hand, that will be very useful to analyze data about existing cloud on the cluster and change/reconfigure a cloud if it’s needed automatically.

Some features are sill under development, but all what was presented is very impressive. Just one thing makes me sad: some components of the platform are proprietary software 🙂 It makes platform unusable to hack and learn it in depth at home… On the other hand, Google is trying to create community around an platform and open the source code of some components like gcloud or Google App Engine. Some technologies used inside an platform like Docker and Kubernetes are 100% Free Software.

At the end everybody got certificates. Thanks for that!

Google Cloud Platform training accelerates your understanding of and ability to use the Google Cloud Platform services. By the way, today OnBoard meeting find the place in Google’s office in Hamburg and in 2 weeks I’m going to Google Cloud Summit 2017 in Munich. See you there 😉

Google Wind… I miss you so much in Munich :)

Posted in humor by anaumov on 21.11.2017

General Data Protection Regulation: Microsoft Cloud and Azure Security Center

Posted in cloud, Events by anaumov on 19.10.2017

Остается все меньше времени до вструпления в силу закона о GDPR, принятого европейским парламентом в прошлом году. После 25 мая 2018 года каждая европейская компания обязана адаптировать свою it-инфраструктуру таким образом, чтобы она удовлетворяла директиве 95/46/EC. В ФРГ пиратская партия, Chaos Computer Club и другие активисты внимательно следят за поправками к закону, а также с его совместимостью с немецким Bundesdatenschutzgesetz.
На сегодняшний день проблема под названием Windows 10, без остановки собирающая мета-данные пользователей и отправляя их на сервера компании для последующего анализа, остается нерешенной. Проблему усугубляют cloud-решения, где доступ к персональным данным находится под еще меньшим контролем.

Контроль доступа к данным осложняется еще и тем фактом, что мета-данные пользователя далеко не всегда могут быть удалены по требованию владельца из-за юридической стороны вопроса. Некоторые из мета-данных используются государством для предоставления социальных льгот. К примеру, чтобы получать от государства пособия по состоянию здоровья, должен быть доступ к истории болезни. Многие льготы предоствляются только прошедьшим военную службу, процент налогов снижается, если вы состоите в браке, процент налогов снижается еще раз, если у вас есть дети и т.д. Все эти данные принадлежат владельну, но, получается, так или иначе должны быть предоставленны государству. Или другой пример – информация о вас в базе данных у врача, к примеру, зубного врача. Как часто вы к нему приходили, что именно лечили, сколько за это платили, информация об аллергических реакциях и т.д. Если вы решите сменить врача, данные должны быть переданы дальше, т.е. они во-первых, они должны быть в таком формате, чтобы следующий врач смог ими воспользоваться, во-вторых, должно быть четко ясно какие именно данные должны быть переданы, а какие нет. Они защищены на уровне гос.законов, разглашение этой информации (любое, в том числе и случайное) будет наказываться огромными штрафами. Для Microsoft, к примеру, эта цифра составяет $ 3,598 миллиарда.

Тема использования Microsoft Cloud и Azure Security Center особенно актуальна сейчас в Мюнхене. На протяжении последних 15 лет данные жителей этого города хранились в Free Software базах данных, работающих на GNU/Linux. LiMux стал известен на весь мир как один из самых успешних проектов по переходу гос.учреждений на свободное ПО. До сих пор LiMux установлен на более чем 18 000 рабочих мест в столице Баварии. В начале этого года, несмотря на опубликованные Сноуденом документы и полную неспособность противостоять таким проблемам как, к примеру, WannaCry и Petya, было объявлено о планах миграции на продукты от Microsoft.

Вчера Microsoft пригласила всех желающих в свой офис и рассказала о планах интеграции своей cloud-платформы с GDPR и путях решения некоторых возникающих при этом проблем. Была продемонстрированы настройки и новые функции Azure Security Center. Многим текущее состояние показалось неудовлетворительным, а добавленные функции неудобными. Это при том, что конфигурация облака была специально спроектированна для демонстрации. Например, в мониторинг-системе, если текущее состояние VM не соответствует критериям настроек, нельзя быстро узнать что именно не так. Нельзя запрограммировать реакцию на то или иное событие. Нас уверили, что все проблемы будут устранены. Попросили создать аккаунты и отправить features request 🙂

Я благодарен за приглашение и информацию, которую я получил на этой встрече. Понимание cload-технологий, а также проблем, связанных с той или иной её реализацией, становится все важнее и важнее, и не только для it-инженеров (слайды: Accelerate GDPR compliance with the Microsoft Cloud и Azure Security Center in the context of GDPR _Partl_181017) Надеюсь, что Microsoft улучшит состояние своей платформы, и к маю следующего нам не придется переживать за наши данные 😉

openSUSE Conference 2017

Posted in Events, SuSE [ru] by anaumov on 27.06.2017

В конце прошлого месяца разработчики openSUSE снова собрались в Нюрнберге, чтобы обсудить дальнейшее развитие дистрибутива и просто пообщаться и весело провести время вместе. В последние пару лет проект стал очень быстро меняться. К проекту присоединилось очень много новых людей. Новые идеи, которые они приносят, находят свое место в новых проектах, разрабатываемых для openSUSE. Даже используя все информационные каналы проекта openSUSE, тяжело уследить за всеми новшествами, включаемыми в проект, и просто меняющейся стратегией совета. Поэтому вопрос о посещении конференции, тем более, если вы мейнтейнер, долгого размышления не потребует 🙂

Конференция была открыта докладом Матиаса о LiMux. Краткая история проекта, его взлет, надежды и его падение… Явный пример того, на сколько опасны могут быть политики, пользующиеся властью для удовлетворения собственных предпочтений, и закрывающие глаза на интересы и желания населения. В настоящий момент я как раз работаю над этим проектом в администриции Мюнхена.

На конференции я снова встретился с Дмитрием, занимающимся проектом invis и продвижением Free Software решений на базе 1C в Германии. Беседовали о русскоязычном сообществе openSUSE, и о причинах его столь плачевного состояния. Я очень надеюсь, что сообществу получится преодалеть существующие проблемы и оно снова возьмет курс на развитие, как было в 2008-2010 годах.

Познакомился с Денисом Кондратенко из Киева и его женой. Очень приятная пара. Денис рассказывал о Ceph и EKG в openSUSE, а также о методах обработки метаданных в Elasticsearch. Мой личный опыт использования Elasticsearch ограничивается только BigData/Hadoop, поэтому и тут удалось узнать что-то новое.

Много новых иновационных идей было услышано от Ричарда. Он уже давно стал openSUSE evangelist’ом; его доклады об OBS или openQA можно услышать практически на каждой европейской Free Software конференции, посвященной GNU/Linux. Я всем советую посмотреть его доклад о Containerised Application.

Одним из спонсоров конференции в этом году стал fedora project. Fedora уже не первый год использует нашу систему openQA для автоматического тестирования linux-систем, а сотрудники RedHat уже во второй раз читают свои доклады на openSUSE Conference. В этом году это был доклад How semantic analysis of C and C++ ELF binaries can be used to analyze ABI changes, в прошлом году это были Enforcement of a system-wide crypto policy и Testing complex software in CI.

В общем, как и обычно, конферениция оставила приятное впечатление (пару фоток можно найти тут). И хотя в этом году она длилась всего 3 дня вместо 5, как в прошлом, информации для размышления я пролучил придостаточно. Её посещение в этом году не стоило мне ничего. Спасибо за это TSP. В следующем году она пройдет в Праге, куда я планирую поехать с семьей. Возможно там я встречусь и с теми, кто читает сейчас эти стоки 😉

pam-python is avaliable for openSUSE

Posted in openSUSE, python, security by anaumov on 21.04.2017

Last week I came across pam_python, a PAM module that lets you write PAM modules in Python. It seems interesting to play in this direction, but I had to install it manually. It seems that there was no official packages for openSUSE until now…

Yesterday I built version 1.0.6 for Tumbleweed. Please test it. It’s in our security repo. Feel free to send submit requests.

After installing it we will get /lib64/security/pam_python.so PAM modul. It’s just an interface between PAM and your own plugin (that you have to implement). To test it, you will need to add PATH of your plugin to the /etc/pam.d/login file (in case of getty-access test, for example), like described here.

This code can be used as an example. It will close access for all getty.

> cat /lib64/security/access.py

def pam_sm_authenticate(pamh, flags, argv):
  if str(pamh.service) == "login":
    return pamh.PAM_AUTH_ERR

You will also need to add this line to the /etc/pam.d/login file:

auth required pam_python.so access.py

This is just an example with login service or getty. Pam-python supports also, for example, ssh- and kdm-services. It supports many other interesting things. For more info look at documentation page.

Silicon Valley

Posted in fun by anaumov on 29.03.2017

Can’t wait for the next season… 😉

GNU Screen v.4.5.0

Posted in GNU/Linux, openSUSE by anaumov on 18.01.2017

I’m proud to announce the release of GNU Screen v.4.5. This time it’s mostly a bugfix release. We added just one new feature: now it’s possible to specify logfile name by using parameter -L (default name stays screenlog.0). Myself also spent some time to make source code a bit cleaner.

As you probably noticed we were going to release 4.5 until Christmas. Unfortunately, we could not do it because of some internal GNU problems. I apologise for that.

As usual, we merged some community patches from our bug tracing system (small patches also were presented in IRC) and I would like to thank everyone who contribute to Screen and helps us to test development git-version!

For openSUSE users: I updated our devel-package already. It’s soon in factory and, as usual, after openQA routine new package will be available in Tumbleweed.

openSUSE :: kernel of the day

Posted in Linux Kernel, SuSE [ru] by anaumov on 09.01.2017

suseДля тех, кто по той или иной причине хочет использовать последнюю версию ядра, но постоянно пересобирать ее вручную нет ни времени ни желания, openSUSE проект делает это за нас. Идея Kernel Of The Day – предоставить тестерам и прсто kernel инженерам последнюю git-версию ядра в виде RPM пакета. Это devel проект для ядра, в котором собираются версии для последующего тестирования и отправлки в tumbleweed. Делается это также с целью получить feedback от сообщества в виде bugreports или просто в ML/IRC.

Процесс полностью автоматизированный. Вы подключаете репозиторий и обновляетесь (каждый раз как пакет с новым ядром доступен для установки) как и обычно.

Версия unstable, поэтому имеет смысл не перезаписывать каждый раз старое ядро, а добавлять новое. Это не работает автоматически. Для этого надо отредактировать /etc/zypp/zypp.conf. Добавьте две строчки:

multiversion = provides:multiversion(kernel)
multiversion.kernels = latest,running

Подробнее о multiple kernel.

Добавлю, что система ломатеся. Ломается достаточно часто. Только что, к примеру, у меня поломался dracut на ядре 4.9.0-2. Я не cмог загрузиться, т.к. он связан с LUKS, а я использую шифрование. Откатился назад на 4.8.13.
Интерсно, что именно сломано, почему и как починить. Это как раз ответ на вопрос “зачем мы этим занимаемся?”. Если бы этого не произошло, я вряд бы ли стал разбираться глубже в dracut. Проект таким способом предоставляет идеальную трейнинг площадку для энтузиастов, где обучение проходит в играющей форме 🙂


Posted in Linux Kernel by anaumov on 08.01.2017

Хочу поделиться ссылочкой на интересную БД wifi адаптеров. Я помню, как еще каких-то семь-десять лет назад у пользователей GNU/Linux были проблемы их с поддержкой. Сегодня ситуация на много лучше, но проблема как будто осталась. Мы знаем о поддерживаемом ядром чипе, но не знаем в каких устройствах используется этот чип. Мы заходим на страницу магазина, но видем лишь цену, производителся и название конкретных моделей. Если повезет, то в комментариях кто-то напишет, что та или иная железка заработала в GNU/Linux.

Проект wikidevi.com собрал для нас информацию более чем о 5К Wireless адаптеров. Информация включает в себя фотографии устройства и самой платы, информацию о чипсете и драйвере, используемом в Linux (а также версия ядра, начиная с которой есть его поддержка), страну производитель, страницу оф. поддержки производителем и другие полезные ссылки, типа темы на форуме, где пользователи делятся своими впечатлениями и просто опытом, как завести устройство, если оно не завелось автоматически.

Например, я беру первый попавшийся wifi адаптер на amazon, в описании к которому отсутствует “Linux” как поддерживаемая ОС. Пускай это будет Linksys AE3000. Вот что я нахожу о нем на wikidevi: wikidevi: Linksys_AE3000. Как видим, официальной поддержки нет (хотя ожидается в драйвере rt2800usb). Но есть патч, который исправляет эту проблему начиная с версии 3.12. На wiki есть ссылка на solved-тему форума, откуда мы узнаем, что

After installing the hacked module and loading it, I had to edit the wireless configuration menu to enter my network name and the device hardware address. I am not yet familiar with Debian, so had to dig around a while to find things. After that the device was recognized and my network came up. The real key is to get the hacked source code for the chipset. I believe you have seen where to get that.

Другими словами, если руки растут из нужного места, то устройство у вас заработет.

Другим примером может быть TP-LINK_TL-WN822N_v2. Откуда я узнаю, что начиная с версии 2.6.36 (2010-10-20) ядро поддеживает этот USB адаптер. Модуль называется ath9k_htc. В магазине о поддеожке Linux ни слова, но теперь мы знаем, что проблем с устройством не будет 🙂

UDP socket: NTPv3 client in C

Posted in C, Network by anaumov on 06.01.2017

Прошлый год запомнился резким скачком интереса к NTP, а точнее к проблемам безопасности, связанным с этим протоколом. Пытаясь вникнуть в причину уязвимости, ловлю себя на мысли, что пока я сам не запрограммирую NTP, по-настоящиему разобраться не получится. К тому же в книге TCP/IP Guide, которая стала моей настольной книгой, нет описания NTP, что огорчает, но в тоже время вызывает любопытство 🙂
Сам протокол достаточно сложен, тем не менее клиенскую часть можно описать в одном посте, что я сейчас и собираюсь сделать. Язык прогроммирования естественно С, пишем без каких-либо библиотек/оберток, иначе это не имеет смысла. Я попытался писать как можно компактнее (не в ущерб пониманию кода конечно же).
Читать дальше…

Let over Lambda

Posted in books, Lisp by anaumov on 06.12.2016

let over lambdaВедется работа по переводу книги Let over Lambda
Я начал писать этот пост почти год назад. Я хотел привлеч внимание русскоязычных ЛИСПеров к процессу перевода. Возможно кто-то нашел бы время и оказал бы помощь. Не опубликовал я этот пост тогда потому, что даже для перевода книги нужно разрешение автора. Иначе это нарушение авторских прав. Сейчас уже перевод закончен, а переводчик (Ametov Imil, ник Charlz_Klug) получил разрешение от автора на публикацию своего труда (автор постепенно, глава за главой, открывал материал). Я вернулся к этому посту и решил закончить начатое. Хоть замысел теперь не столько в поисках волонтеров-переводчиков, сколько в информации о наличии перевода как такового, который уже закончен и ждет читателей 🙂

Итак, исходники перевода книги можно скачать тут. Для сборки книги openSUSE-пользователям понадобится доустановить пару пакетов:

> sudo zypper in texlive-upquote
> sudo zypper in texlive-collection-langcyrillic
> sudo zypper in texlive-cyrillic

Большое тебе спасибо, Имиль, за перевод. Книга классная. Уверен, многие весело проведут время, эксперементируя с макросами Common Lisp, которым посвящена книга 😉

Linux Kernel 4.7 Update for openSUSE

Posted in Linux Kernel, SuSE [ru] by anaumov on 18.07.2016

Пару дней назад вышло ядро 4.7. В связи с этим наш репозиторий Tumbleweed в скором будущем будет обновлен. Для тех же, кому по той или иной причине нужны самые свежие версии ядер, собраные для openSUSE (не только Tumbleweed), существует специальный kernel-репозиторий. Там лежат ядра, собранные сразу же после официального релиза (в тот же день). Доступны сборки не только для x86, но и для ARM и Power. Есть vanilla.

Установка не предствляет из себя ничего сложного – самое обычное обновление rpm-пакета.
Я только что обновил ядро на одной из своих тестовых систем. Это 32-битный x86 нетбук c установленной (где-то в середине июня) Tumbleweed.

# uname -pr
4.6.2-1-pae i686

# zypper ar -f http://download.opensuse.org/repositories/Kernel:/HEAD/standard/Kernel:HEAD.repo                                                               
Adding repository 'Kernel builds for branch master (standard)' ...............................[done]
Repository 'Kernel builds for branch master (standard)' successfully added                                                                                                         
Enabled     : Yes                                                                                                                                                                  
Autorefresh : Yes                                                             
GPG Check   : Yes                                                             
Priority    : 99                                                              
URI         : http://download.opensuse.org/repositories/Kernel:/HEAD/standard/

# zypper lr
# | Alias               | Name                                       | Enabled | GPG Check | Refresh
1 | Kernel_HEAD         | Kernel builds for branch master (standard) | Yes     | ( p) Yes  | Yes    
2 | openSUSE-20160613-0 | openSUSE-20160613-0                        | No      | ----      | Yes    
3 | packman             | packman                                    | Yes     | (r ) Yes  | Yes    
4 | repo-debug          | openSUSE-Tumbleweed-Debug                  | No      | ----      | Yes    
5 | repo-non-oss        | openSUSE-Tumbleweed-Non-Oss                | Yes     | (r ) Yes  | Yes    
6 | repo-oss            | openSUSE-Tumbleweed-Oss                    | Yes     | (r ) Yes  | Yes    
7 | repo-source         | openSUSE-Tumbleweed-Source                 | No      | ----      | Yes    
8 | repo-update         | openSUSE-Tumbleweed-Update                 | Yes     | (r ) Yes  | Yes

Значит новый репозиторий называется Kernel_HEAD. Хорошо, я хочу обновиться только из него:

# zypper dup -r Kernel_HEAD
Retrieving repository 'Kernel builds for branch master (standard)' metadata --------------------[\]

New repository or package signing key received:

  Repository:       Kernel builds for branch master (standard)    
  Key Name:         Kernel OBS Project 
  Key Fingerprint:  4529410A B52F94C4 03BAB484 ECEEF210 03579C1D  
  Key Created:      Mi 22 Apr 2015 14:25:51 CEST                  
  Key Expires:      Fr 30 Jun 2017 14:25:51 CEST                  
  Rpm Name:         gpg-pubkey-03579c1d-5537934f                  

Do you want to reject the key, trust temporarily, or trust always? [r/t/a/? shows all options] (r): a
Retrieving repository 'Kernel builds for branch master (standard)' metadata ...................[done]
Building repository 'Kernel builds for branch master (standard)' cache ........................[done]
Loading repository data...
Reading installed packages...
Computing distribution upgrade...

The following 2 NEW packages are going to be installed:
  kernel-default-4.7.rc7-2.1.g152f160 kernel-pae-4.7.0-1.1.g24f30d5

The following 2 packages are going to be upgraded:
  kernel-firmware ucode-amd

The following 2 packages are going to change vendor:
  kernel-firmware  openSUSE -> obs://build.opensuse.org/Kernel
  ucode-amd        openSUSE -> obs://build.opensuse.org/Kernel

2 packages to upgrade, 2 new, 2  to change vendor.
Overall download size: 156.5 MiB. Already cached: 0 B.
After the operation, additional 372.8 MiB will be used.
Continue? [y/n/? shows all options] (y): y

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

> uname -pr
4.7.0-1.g24f30d5-pae i686

Обновляя ядра, вы не только становитесь привлекательнее для девушек, но и помогаете проекту в качестве beta-тестера. Помните, что Tumbleweed это не самое-самое свежее ПО. Это коллекция уже протестированных вместе компонентов.
“Стоит ли мне учавстовать в этом? А вдруг я себе что-то сломаю?”, – подумает ленивец. Нет, вероятность того, что произойдет креш системы очень мал. Прежде чем ядро официально выпустят, оно пройдет серию тестов.
Если креш все же произошел, всегда можно загрузить старое ядро, в котором вы работали прежде (и где все работало). В этом случае вы очень поможете, если не поленитесь сообщить нам о возникшей проблеме.
Посмотреть список установленных ядер можно вот так:

# zypper se -si 'kernel*'
Loading repository data...
Reading installed packages...

S | Name            | Type    | Version              | Arch   | Repository                                
i | kernel-default  | package | 4.6.2-1.2            | i586   | (System Packages)                         
i | kernel-default  | package | 4.7.rc7-2.1.g152f160 | i586   | Kernel builds for branch master 
i | kernel-firmware | package | 20160712-137.1       | noarch | Kernel builds for branch master 
i | kernel-pae      | package | 4.6.2-1.2            | i686   | (System Packages)                         
i | kernel-pae      | package | 4.7.0-1.1.g24f30d5   | i686   | Kernel builds for branch master 

Как видете, старое ядро никуда не делось. Я отправляю всех интересующихся к 12 главе нашего руководства. Там описана Multiple Kernel магия для zypper.

Обновившись, я протестировал сейчас, к примеру, LUKS и совместимость с проприетарным broadcom модулем для wireless. Все работает как и прежде, значит я иду дальше – перехожу к обновлению на своих ARM embedded-системах, чтобы удостовериться, что и там все работает как надо. Счастливо 😉