# [HARDENED] Migration Noyau (résolu)

## pharaon44

Bonjour,

Je suis un nouvel utilisateur de gentoo.

Actuellement, je viens d'installer un serveur web sur gentoo. Je souhaiterai le passer en hardened.

Pour faire cela, est-ce qu'il faut simplement choisir le profile hardened et recompiler ou alors y a t-il d'autres manips à faire?

Est-ce que les droits sur  les différents répertoires du systèmes vont-être modifiés?

Est-ce qu'il existe une commande ou autre pour voir que l'on est bien passé en hardened une fois que ces manips ont été faites?

Merci d'avance pour vos réponses.Last edited by pharaon44 on Fri Apr 13, 2012 8:24 am; edited 2 times in total

----------

## jaypeche

Salut, je suis pas un expert mais je vais tenter de t'apporter qq précisions car j'utilise également hardened..

 *Quote:*   

> Pour faire cela, est-ce qu'il faut simplement choisir le profile hardened et recompiler ou alors y a t-il d'autres manips à faire?

 

Il te faut déja compiler un noyau hardened, avec genkernel ca se fait assez simplement, du moins de manière identique à un noyau classique.

```
# emerge -av hardened-sources */ on installe les sources du noyau

# ls -ll /usr/src/linux */ On vérifie ensuite que /usr/src/linux pointe bien vers les sources hardened, au besoin créer un lien ..

```

Ensuite dans ton /etc/make.conf tu peux utiliser le flag "hardened" pour les apllications qui l'utilise, USE="hardened...". Comme il s'agit d'un serveur je pense que tu n'as pas X donc : USE="-X hardened'

 *Quote:*   

> Est-ce qu'il existe une commande ou autre pour voir que l'on est bien passé en hardened une fois que ces manips ont été faites? 

 

Comme tu le dis tu peux modifier ton profile vers un profile hardened ou hardened+selinux, mais avec ce dernier c'est vraiment trop secure et je te déconseille de l'utiliser si tu ne sais pas parfaitement ce que tu fais...

```
server ~ # eselect profile list

Available profile symlink targets:

  [1]   default/linux/x86/10.0

  [2]   default/linux/x86/10.0/selinux

  [3]   default/linux/x86/10.0/desktop

  [4]   default/linux/x86/10.0/desktop/gnome

  [5]   default/linux/x86/10.0/desktop/kde

  [6]   default/linux/x86/10.0/developer

  [7]   default/linux/x86/10.0/server

  [8]   hardened/linux/x86 *

  [9]   hardened/linux/x86/selinux

server ~ # eselect profile set 8 */ Dans notre cas 

 
```

A présent ton système est prêt a être recompiler :

D'abord le noyau, perso j'utilise genkernel mais tu peux également le faire avec le traditionnel : make clean + make menuconfig + make dep + make bzimage....

```
server ~ # genkernel --menuconfig all */ avec /usr/src/linux correctement paramètré

server ~ # genkernel --menuconfig --mdadm all */ Au cas où tu veuilles mettre tout ce petit monde en raid via mdadm

```

Sans oublier de modifier ton grub pour booter sur le nouveau kernel..

http://www.gentoo.org/doc/fr/kernel-upgrade.xml peut t'être utile !

```
server ~ # emerge --deep --newuse --ask world /* Et hop tu recompiles tout !  

```

 *Quote:*   

> Est-ce que les droits sur les différents répertoires du systèmes vont-être modifiés?

 

Je ne pense pas non, http://www.gentoo.org/proj/fr/hardened/primer.xml pour qq infos sur ce qu'est hardened...

En éspérant t'avoir aider un peu...   :Wink: 

----------

## El_Goretto

De mémoire, il faut reconstruire une fois la toochain en hardened, pour ensuite recompiler tout le world avec cette toolchain hardened. Mais je ne sais pas si c'est encore valide, comme procédure.

----------

## boozo

 *El_Goretto wrote:*   

> De mémoire, il faut reconstruire une fois la toochain en hardened, pour ensuite recompiler tout le world avec cette toolchain hardened. Mais je ne sais pas si c'est encore valide, comme procédure.

 

A ma connaissance, c'est toujours la procédure pour une migration càd si on ne part pas directement d'une installation hardened   :Wink: 

 *manual wrote:*   

> After setting up your profile, you should recompile your system using a hardened toolchain so that you have a consistent base:
> 
> Code Listing 2.3: Switch to hardened toolchain
> 
> # emerge --oneshot binutils gcc virtual/libc
> ...

 

Cependant (tant pis si j'enfonce une porte ouverte) même en hardened la configuration et administration reste une obligation !

Ce n'est pas parce qu'on choisit ce profil que le système se suffit à lui-même par défaut et qu'on est tranquile sans avoir à se soucier de rien en terme de config - se documenter pour la mise en oeuvre reste primordial -   :Wink: 

Par ailleurs, vu que les autes l'ont zappé : pourrais-tu éditer ton premier post et modifier ton titre selon nos conventions (Section 3/3) par avance merci ^^ 

ps: Bienvenue sur Gentoo et le forum au fait !

----------

## El_Goretto

Waaaaah, le post de cador, avec le lien qui va bien...

J'ai honte de moi, heureusement que boozo il assure  :Wink: 

----------

## guilc

 *boozo wrote:*   

> 
> 
> Par ailleurs, vu que les autes l'ont zappé : pourrais-tu éditer ton premier post et modifier ton titre selon nos conventions (Section 3/3) par avance merci ^^ 

 

Le fourbe, en plus il me vole mon boulot :p

Sinon je crois que tout à été dit. outre le fait de compiler une toolchain et un kernel, il faut configurer proprement le système (avant même de mettre une toolchaine hardened d'ailleurs), et en bonus, se plonger dans gradm/RSBAC ou SELINUX, avec le lot d'embêtements qui vont avec (restrictions par rôle et pas par utilisateur à la mode POSIX) !

----------

## boozo

/off>   :Laughing:   Meuh non voyons c'est juste la frustration de ne pas avoir le bouton rouge

btw, je vous laisse vous y prendre au moins jusqu'au coude avec le dernier en date...   :Rolling Eyes: 

----------

## pharaon44

Merci à tous pour vos réponses,

J'ai réussi ma première migration Hardened aujourd'hui. En fait, les liens que vous m'avez communiqués, je les avez vu mais il me manquait le fil conducteur que vous m'avez permis d'avoir. Merci!

Bon maintenant, il me reste à creuser la partie PAXCTL car je ne n'arrive plus à me connecter à mon serveur et je suppose qu'il est le responsable. Je me retrouve avec le message bateau suivant "you don't have permission to access /admin on this server".

Il est sur que la migration vers Hardened est responsable! 

Enfin pour le momment, j'ai fait les manips suivantes avec PAXCTL:

# paxctl -z /usr/sbin/apache2 

# paxctl -z /usr/sbin/asterisk

# paxctl -z /usr/sbin/mysql

 Cela dans le but de mettre les flags comme à l'origine mais pour le moment ça bloque.

Si vous avez des idées, je suis preneur.

Merci encore et bonne soirée.

----------

## guilc

Dans un premier temps, il n'y a pas à trafiquer avec paxctl. Si tu bootes sur le noyaux grsec et que tu as simplement une toolchain hardened, il ne devrait pas y avoir de souci. Tout doit continuer à marcher comme avant. Seuls quelques programmes (graphiques ou java en général) ont des soucis avec cette configuration et ont besoin de trafiquer les marquages pax.

Ce qui se corse, c'est si tu actives gradm ou selinux. Pour selinux, il a des profils pour pas mal d'applications dans portage. Pour gradm, il faut passer par une phase de learning (http://en.wikibooks.org/wiki/Grsecurity/The_Administration_Utility#Learning_Mode) pour déterminer qui a besoin d'avoir accès à quoi avant de pouvoir affiner les règles gradm. Mais tant que le système n'est pas activé (gradm -E), cela ne bloque rien !

----------

## boozo

 *pharaon44 wrote:*   

> Bon maintenant, il me reste à creuser la partie PAXCTL car je ne n'arrive plus à me connecter à mon serveur et je suppose qu'il est le responsable. Je me retrouve avec le message bateau suivant "you don't have permission to access /admin on this server".
> 
> Il est sur que la migration vers Hardened est responsable!
> 
> Enfin pour le momment, j'ai fait les manips suivantes avec PAXCTL:
> ...

 

Mille excuses mais que veux-tu dire exactement par "pas d'accès au serveur" ou "mettre les flags comme à l'origine" ?

Qu'est-ce qui sert ce message et qu'y a-t-il dans les logs ? (c'est via l'ihm d'admin d'un serveur web ? via ssh ?)

----------

## pharaon44

Bonjour,

Désolé de ne pas avoir donné assez d'information!

Losque, que je dis pas "d'accès au serveur", c'est que lorsque je veux me connecter à mon serveur web (freepbx) en interface graphique, j'ai un joli message d'erreur: " Forbidden. You don't have permission to access /admin/ on this server".

Dans les logs de mon serveur, il me dis que l'accès est refusé par la configuration de mon serveur: " [error][client XXX.XXX.2.78] client denied by server configuration: /var/www/admin/index.html, referer: http://XXX.XXX.2.10/".

Par contre, j'ai refait le test. En fait, après la compilation du noyau, j'arrive toujours à me connecter. Mais, après la mise à jour de mon système "emerge --deep --newuse --ask world", je n'y arrive plus!

Pour info, lorsque je disais "mettre les flags comme à l'origine" en fait je pensais que pax mettais des restrictions sur les applications.

----------

## boozo

 *pharaon44 wrote:*   

> (snip)
> 
> Par contre, j'ai refait le test. En fait, après la compilation du noyau, j'arrive toujours à me connecter. Mais, après la mise à jour de mon système "emerge --deep --newuse --ask world", je n'y arrive plus!
> 
> (...)

 

Ah ok là déjà c'est plus clair ^^

Alors juste pour remonter la chaîne des événements pour identifier une cause :

1- en profil hardened, la recompilation de la toolchain et du noyau hardened est ok

2- et le #emerge -e world est passé convenablement après reboot sur le nouveau noyau 

3- (un --sync plus tard sans doute) le #emerge -uDNv world a mis le brin

J'ai bon ?

Là d'après la trace de log que tu indiques (dmesg?) on dirait un pb de grant sur les répertoires apache ou de user/group non ?

Y'a autre chose dans les logs spécifiques aux applications concernées (i.e. apache, mysql, asterisk etc) ?

btw, On peut avoir le #emerge --info pour la forme

et juste par acquis de conscience, n'aurais-tu par hasard oublié/raté un fichier lors du etc-update p.e. ?

----------

## pharaon44

En effet, le "emerge -uDNv world a mis le brin "!

Par contre, le log que j'ai indiqué, vient d'apache2.

Voici mon emerge --info:

Portage 2.1.10.41 (hardened/linux/x86, gcc-4.4.4, glibc-2.11.2-r3, 3.1.5-hardened i686)

=================================================================

System uname: Linux-3.1.5-hardened-i686-Intel-R-_Core-TM-_i3_CPU_M_370_@_2.40GHz-with-gentoo-2.0.3

Timestamp of tree: Tue, 10 Jan 2012 09:15:01 +0000

app-shells/bash:          4.1_p7

dev-lang/python:          2.6.5-r3, 2.7.2-r3, 3.1.2-r4

dev-util/cmake:           2.8.6-r4

dev-util/pkgconfig:       0.26

sys-apps/baselayout:      2.0.3

sys-apps/openrc:          0.9.4

sys-apps/sandbox:         2.3-r1

sys-devel/autoconf:       2.65-r1

sys-devel/automake:       1.11.1

sys-devel/binutils:       2.20.1-r1

sys-devel/gcc:            4.4.4-r2

sys-devel/gcc-config:     1.4.1

sys-devel/libtool:        2.2.10

sys-devel/make:           3.81-r2

sys-kernel/linux-headers: 2.6.30-r1 (virtual/os-headers)

sys-libs/glibc:           2.11.2-r3

Repositories: gentoo

ACCEPT_KEYWORDS="x86"

ACCEPT_LICENSE="* -@EULA"

CBUILD="i686-pc-linux-gnu"

CFLAGS="-O2 -march=i686 -pipe"

CHOST="i686-pc-linux-gnu"

CONFIG_PROTECT="/etc"

CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/gconf /etc/gentoo-release /etc/php/apache2-php5.3/ext-active/ /etc/php/cgi-php5.3/ext-active/ /etc/php/cli-php5.3/ext-active/ /etc/sandbox.d /etc/terminfo"

CXXFLAGS="-O2 -march=i686 -pipe"

DISTDIR="/usr/portage/distfiles"

FEATURES="assume-digests binpkg-logs distlocks ebuild-locks fixlafiles news parallel-fetch protect-owned sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch"

FFLAGS=""

GENTOO_MIRRORS="ftp://xxxx/gentoo/distfile"

LDFLAGS="-Wl,-O1 -Wl,--as-needed"

PKGDIR="/usr/portage/packages"

PORTAGE_CONFIGROOT="/"

PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --stats --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages"

PORTAGE_TMPDIR="/var/tmp"

PORTDIR="/usr/portage"

PORTDIR_OVERLAY=""

SYNC="rsync://xx.xx.xx.x/gentoo-portage"

USE="acl acpi apm berkdb bzip2 cli cracklib crypt cups cxx dri gdbm gpm hardened iconv lm_sensors modules mudflap mysql ncurses nls nptl nptlonly openmp pam pax_kernel pcre perl pic pppd python readline session ssl sysfs tcpd urandom x86 xorg zlib" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1 emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol" APACHE2_MODULES="actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="kexi words flow plan stage tables krita karbon braindump" CAMERAS="ptp2" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ubx" INPUT_DEVICES="keyboard mouse evdev" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" PHP_TARGETS="php5-3" RUBY_TARGETS="ruby18" USERLAND="GNU" VIDEO_CARDS="apm ark chips cirrus cyrix dummy fbdev glint i128 i740 intel mach64 mga neomagic nsc nv r128 radeon rendition s3 s3virge savage siliconmotion sis sisusb tdfx tga trident tseng v4l vesa via vmware nouveau" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account"

Unset:  CPPFLAGS, CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LANG, LC_ALL, LINGUAS, MAKEOPTS, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS

Dans le log freepbx_dbug, j'ai ceci:

2012-Apr-03 13:13:06	/var/www/admin/views/footer_content.php:31

[NOTICE]: Undefined variable: module_name

2012-Apr-03 13:13:06	/var/www/admin/views/footer.php:72

[NOTICE]: Undefined variable: reload_needed

2012-Apr-03 13:13:20	/var/www/admin/modules/dashboard/class.procinfo.php:13

[WARNING]: fsockopen() [<a href='function.fsockopen'>function.fsockopen</a>]: unable to connect to localhost:22 (Connection refused)

Par contre, j'ai pas l'impression que le dmesg ou les logs de mysqld et asterisk renvoient des choses intéressantes pour mon souci.

Sinon, j'ai pas compris ce que tu voulais dire par "etc-update p.e".

----------

## boozo

Ben je voulais dire qu'il arrive d'oublier de lancer le #etc-update suivant l'update du world si il est demandé ou d'y aller un peu trop vite à cette occasion et de remettre à plat des fichiers de conf qu'il ne faudrait pas   :Wink: 

Sinon, je vois des trucs qui collent pas trop i.e. si l'installation du serveur est "fraîche", ton dernier sync date quand même du 10/01. Et vu les versions des kernel header par rapport au kernel, des outils de la toolchain, etc il n'y a donc pas d'étape 3 et d'update du world au sens strict depuis ; mais tu as peut-être une contrainte là-dessus ?

Es-tu sûr de ne pas avoir oublié une étape dans ce qu'on t'a décrit ?   :Sad: 

Sinon ce qui me vient à l'esprit de regarder du fait du changement de profile :

- vérifier les usesflags actifs pour les applis concernés

- vérifier également leurs fichiers de conf respectifs (httpd.conf, etc) car voir cracher "localhost:22" dans des logs j'ai toujours du mal

- vérifier s'il n'y a pas des modules spécifiques à recompiler/réinstaller pour ces appli lors d'une mise à jour (tq d'eventuels asterisk-*)

Malheureusement je n'ai pas d'expérience en voip mais je ne pense pas que la problématique hardened soit en cause ici

Il vaut peut-être mieux ouvrir un autre thread pour çà avec un titre adapté pour sensibiliser ceux ayant une expertise sur freepbx

***********

ps:/ C'est une gentoo native que tu as monté ou une release provenant d'un hébergeur ? parce que ton cflag n'est pas des plus optimisé pour le core i3 mais bon, c'est pas là le pb

ps 2 :/ Au fait, je signale çà à tout hasard, un update s'impose p.e. ^^

----------

## pharaon44

Ok ça fonctionne!!! Je sais pas trop où était le problème mais cela ne vennait pas de mon serveur web.

Voila ce que j'ai fait:

- J'ai repris intégralement mon make.conf

- J'ai fait un emerge --sync car comme me le faisait remarquer boozo, mon dernier sync datait!

- Ensuite, j'ai fait un emerge --newuse @world car j'avais modifié des USE dans le make.conf.

- J'ai recompilé mon noyau pour le basculer en hardened.

- J'ai fait un emerge --deep --newuse --ask @world et tout est rentré dans l'ordre!

En tout cas, merci à tous d'avoir pris du temps pour m'aider.

----------

## boozo

Je ne suis pas certain d'avoir tout compris non plus a vrai dire i.e. dans les 3 derniers étapes (sans doute des raccourcis dans les séquences d'opérations retranscrites ou des typos liées au fait que çà marche ^^) m'enfin si tout tourne, que tu as monté ta version d'astérisk, etc. C'est l'essentiel  :Wink: 

Edit: Au fait, dans la précipitation, pourrais-tu éditer ton premier message et modifier le titre selon nos conventions ? par avance merci ^^

----------

