Outils pour utilisateurs

Outils du site


systeme:selinux

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
systeme:selinux [2017/04/29 11:28] rootsysteme:selinux [2020/02/21 18:36] (Version actuelle) – [sepolicy network] root
Ligne 63: Ligne 63:
 <xtermrtf> <xtermrtf>
 $ touch /.autorelabel $ touch /.autorelabel
 +</xtermrtf>
 +
 +
 +====== Compiler une règle te en pp ======
 +Compiler une rule **te** :
 +<xtermrtf>
 +$ checkmodule -M -m -o gigix-tlp.mod gigix-tlp.te
 +checkmodule:  loading policy configuration from gigix-tlp.te
 +checkmodule:  policy configuration loaded
 +checkmodule:  writing binary representation (version 17) to gigix-tlp.mod
 +</xtermrtf>
 +
 +<xtermrtf>
 +$ semodule_package -m gigix-tlp.mod -o gigix-tlp.pp
 +</xtermrtf>
 +
 +On installe le module :
 +<xtermrtf>
 +$ semodule -i gigix-tlp.pp
 </xtermrtf> </xtermrtf>
  
Ligne 373: Ligne 392:
 $ sesearch --auditallow $ sesearch --auditallow
 </xtermrtf> </xtermrtf>
 +
 +<xtermrtf>
 +$ sesearch -T -s unconfined_t -t initrc_exec_t
 +Found 1 semantic te rules:
 +   type_transition unconfined_t initrc_exec_t : process initrc_t;
 +</xtermrtf>
 +
 +<xtermrtf>
 +$ sesearch -T -s unconfined_t -c process -C
 +</xtermrtf>
 +
 ===== matchpathcon ===== ===== matchpathcon =====
 La commande **//matchpathcon//** vous indique quel contexte devrait posséder votre fichier : La commande **//matchpathcon//** vous indique quel contexte devrait posséder votre fichier :
Ligne 412: Ligne 442:
 $ useradd myuser $ useradd myuser
 $ semanage login -a -s user_u myuser $ semanage login -a -s user_u myuser
 +</xtermrtf>
 +
 +Ou 
 +<xtermrtf>
 +$ useradd -Z user_u test
 +</xtermrtf>
 +
 +==== Mapping des utilsateurs par défaut  ====
 +
 +<xtermrtf>
 +$ semanage login -m -S targeted -s "user_u" -r s0 __default__
 +</xtermrtf>
 +
 +Pour revenir au mapping original:
 +<xtermrtf>
 +$ semanage login -m -S targeted -s "unconfined_u" -r s0-s0:c0.c1023
 +</xtermrtf>
 +
 +
 +Créez un nouvel utilisateur SELinux et spécifiez le rôle SELinux par défaut et un rôle d'administrateur confiné supplémentaire
 +<xtermrtf>
 +$ semanage user -a -r s0-s0:c0.c1023 -R "default_role_r administrator_r" gigix_user_u
 </xtermrtf> </xtermrtf>
  
Ligne 470: Ligne 522:
 $ semanage permissive -d httpd_t $ semanage permissive -d httpd_t
 </xtermrtf> </xtermrtf>
 +
  
   * Pour lister les domaine désactivé :   * Pour lister les domaine désactivé :
 <xtermrtf> <xtermrtf>
 $ semanage permissive -l $ semanage permissive -l
 +</xtermrtf>
 +
 +<xtermrtf>
 +seinfo --permissive -x
 </xtermrtf> </xtermrtf>
  
Ligne 556: Ligne 613:
 $ semanage fcontext -l $ semanage fcontext -l
 </xtermrtf> </xtermrtf>
 +
 +  * Pour vérifier le contexte:
 +<xtermrtf>
 +$ matchpathcon -V /var/www/html/*
 +/var/www/html/file1 has context unconfined_u:object_r:samba_share_t:s0, should be system_u:object_r:httpd_sys_content_t:s0
 +/var/www/html/file2 verified.
 +/var/www/html/file3 verified.
 +</xtermrtf>
 +
 ==== Booléen ==== ==== Booléen ====
 Les booléens permettent de modifier une politique SELinux, sans avoir la moindre connaissance ou compétence sur le sujet de la rédaction de politiques. L'activation ou la désactivation d'un booléen ne requiert pas la compilation ou le rechargement d'un module. Les booléens permettent de modifier une politique SELinux, sans avoir la moindre connaissance ou compétence sur le sujet de la rédaction de politiques. L'activation ou la désactivation d'un booléen ne requiert pas la compilation ou le rechargement d'un module.
Ligne 633: Ligne 699:
 </xtermrtf> </xtermrtf>
  
-  * Lister tous les utilisateurs SELinux :+  * Lister tous les utilisateurs et leurs rôles:
 <xtermrtf> <xtermrtf>
-$ seinfo -adomain -u +$ seinfo -u -x
-   domain+
  
 Users: 8 Users: 8
-   sysadm_u +   user guest_u roles guest_r level s0 range s0; 
-   system_u +   user root roles { staff_r system_r sysadm_r unconfined_r } level s0 range s0 - s0:c0.c1023; 
-   xguest_u +   user staff_u roles { staff_r system_r sysadm_r unconfined_r } level s0 range s0 - s0:c0.c1023; 
-   root +   user sysadm_u roles sysadm_r level s0 range s0 - s0:c0.c1023; 
-   guest_u +   user system_u roles { system_r unconfined_r } level s0 range s0 - s0:c0.c1023; 
-   staff_u +   user unconfined_u roles { system_r unconfined_r } level s0 range s0 - s0:c0.c1023; 
-   user_u +   user user_u roles user_r level s0 range s0; 
-   unconfined_u+   user xguest_u roles xguest_r level s0 range s0;
 </xtermrtf> </xtermrtf>
  
-  * Lister tous les types d'utilisateurs :+  * Lister tous les types des rômes: 
 +<xtermrtf> 
 +$ seinfo -r -x 
 +</xtermrtf> 
 + 
 +  * Lister tous les types d'un attribut :
 <xtermrtf> <xtermrtf>
 $ seinfo -auserdomain -x $ seinfo -auserdomain -x
Ligne 668: Ligne 738:
 </xtermrtf> </xtermrtf>
  
-  * Lister quel utilisateur SELinux appartient à quel rôle :+  * Lister les rôles d'un utilisateur précis :
 <xtermrtf> <xtermrtf>
 $ seinfo -usystem_u -x $ seinfo -usystem_u -x
Ligne 678: Ligne 748:
          system_r          system_r
          unconfined_r          unconfined_r
-</xtermrtf> 
- 
-  * Lister tous les domaines : 
-<xtermrtf> 
-$ seinfo -adomain -r 
-   domain 
- 
-Roles: 14 
-   auditadm_r 
-   dbadm_r 
-   guest_r 
-   staff_r 
-   user_r 
-   logadm_r 
-   object_r 
-   secadm_r 
-   sysadm_r 
-   system_r 
-   webadm_r 
-   xguest_r 
-   nx_server_r 
-   unconfined_r 
 </xtermrtf> </xtermrtf>
  
Ligne 707: Ligne 755:
 </xtermrtf> </xtermrtf>
  
-  * Afficher tous les types :+  * Afficher les types d'un attribut :
 <xtermrtf> <xtermrtf>
-$ seinfo -adomain -t+$ seinfo -avirt_domain -
 + 
 +Type Attributes: 1 
 +   attribute virt_domain; 
 + svirt_t 
 + svirt_tcg_t 
 </xtermrtf> </xtermrtf>
  
Ligne 737: Ligne 791:
 <xtermrtf> <xtermrtf>
 $ runcon system_u:system_r:crond_t:s0:c0.c255 /bin/bash $ runcon system_u:system_r:crond_t:s0:c0.c255 /bin/bash
 +</xtermrtf>
 +
 +===== sepolicy =====
 +==== sepolicy generate ====
 +Générer une policy pour un service:
 +<xtermrtf>
 +$ sepolicy generate --init -n myprogram /usr/bin/myprogram
 +</xtermrtf>
 +
 +Voir https://www.youtube.com/watch?v=2i1jFRHE7Wg&t=5660
 +
 +==== sepolicy transition ====
 +Interroger la stratégie SELinux pour voir si un domaine de traitement source peut transitionner vers un domaine de traitement cible:
 +<xtermrtf>
 +$ sepolicy transition -s httpd_t
 +</xtermrtf>
 +
 +==== sepolicy network ====
 +Interroger les stratégies SELinux relatives aux information réseau:
 +<xtermrtf>
 +$ sepolicy network -p 22
 +22: tcp ssh_port_t 22
 +22: udp reserved_port_t 1-511
 +22: tcp reserved_port_t 1-511
 +22: sctp reserved_port_t 1-511
 +</xtermrtf>
 +
 +==== sepolicy booleans ====
 +Interroger la stratégie SELinux pour voir les descriptions des booléens:
 +<xtermrtf>
 +$ sepolicy booleans -a
 +$ sepolicy booleans -b user_ping
 +</xtermrtf>
 +
 +==== sepolicy communicate ====
 +Interroger la stratégie SELinux pour voir si les domaines peuvent communiquer ensemble:
 +<xtermrtf>
 +$ sepolicy communicate -s syslogd_t -t httpd_t -c file
 </xtermrtf> </xtermrtf>
  
Ligne 750: Ligne 842:
 $ auditctl -l $ auditctl -l
 </xtermrtf> </xtermrtf>
 +
 +
 +====== Scripts ======
 +Download and extract and set the variable **POLICY_LOCATION**.
 +
 +Add to your ''~/.bashrc'':
 +<code bash>
 +POLICY_LOCATION="~/refpolicy/";
 +
 +# sefindif - Find interface definitions that have a string that matches the
 +# given regular expression
 +sefindif() {
 +  REGEXP="$1";
 +  pushd ${POLICY_LOCATION}/policy/modules > /dev/null 2>&1;
 +  for FILE in */*.if;
 +  do
 +    awk "/(interface\(|template\()/ { NAME=\$NF; P=0 }; /${REGEXP}/ { if (P==0) {P=1; print NAME}; print };" ${FILE} | sed -e "s:^:${FILE}\: :g";
 +  done
 +  popd > /dev/null 2>&1;
 +}
 +
 +# seshowif - Show the interface definition
 +seshowif() {
 +  INTERFACE="$1";
 +  pushd ${POLICY_LOCATION}/policy/modules > /dev/null 2>&1;
 +  for FILE in */*.if;
 +  do
 +    grep -A 9999 "\(interface(\`${INTERFACE}'\|template(\`${INTERFACE}'\)" ${FILE} | grep -B 9999 -m 1 "^')";
 +  done
 +  popd > /dev/null 2>&1;
 +}
 +
 +# sefinddef - Find macro definitions that have a string that matches the given
 +# regular expression
 +sefinddef() {
 +  REGEXP="$1";
 +  grep -H "define(\`.*${REGEXP}.*" ${POLICY_LOCATION}/policy/support/* | sed -e 's:.*\/\([^(]*\):\1:g'
 +}
 +
 +# seshowdef - Show the macro definition
 +seshowdef() {
 +  MACRONAME="$1";
 +  pushd ${POLICY_LOCATION}/policy/support > /dev/null 2>&1;
 +  for FILE in *.spt;
 +  do
 +    grep -A 9999 "define(\`${MACRONAME}'" ${FILE} | grep -B 999 -m 1 "')";
 +  done
 +  popd > /dev/null 2>&1;
 +}
 +
 +# sefindcon - Find macro definitions for constrains
 +sefindcon() {
 +  awk "/(interface\(|template\()/ { NAME=\$NF; P=0 }; /${REGEXP}/ { if (P==0) {P=1; print NAME}; print };" ${POLICY_LOCATION}/policy/constraints | sed -e "s:^:${FILE}\: :g";
 +}
 +
 +# selist - List all templates/interfaces in the order allowed by refpolicy
 +selist() {
 +  pushd ${POLICY_LOCATION}/policy/modules > /dev/null 2>&1;
 +  (
 +  egrep '^(interface|template)' kernel/kernel.if | awk -F'`' '{print $2}' | sed -e "s:',::g" | sed -e "s:$: (kernel, kernel):g" | sort;
 +  egrep '^(interface|template)' kernel/*.if | grep -v 'kernel/kernel.if' | awk -F'`' '{print $2}' | sed -e "s:',::g" | sed -e "s:$: (kernel, other):g" | sort;
 +  egrep '^(interface|template)' system/*.if | awk -F'`' '{print $2}' | sed -e "s:',::g" | sed -e "s:$: (system):g" | sort;
 +  egrep '^(interface|template)' admin/*.if apps/*.if roles/*.if services/*.if contrib/*.if | awk -F'`' '{print $2}' | sed -e "s:',::g" | sort;
 +  ) | nl | sed -e "s:$: :g";
 +  popd > /dev/null 2>&1;
 +}
 +</code>
 +
 +<xtermrtf>
 +$ sefindif 'filetrans.*postfix_etc'
 +services/postfix.if: interface(`postfix_config_filetrans',`
 +services/postfix.if: filetrans_pattern($1, postfix_etc_t, $2, $3, $4)
 +</xtermrtf>
 +
 +<xtermrtf>
 +$ seshowif systemd_tmpfilesd_managed   
 +interface(`systemd_tmpfilesd_managed',`
 + gen_require(`
 + type systemd_tmpfiles_t;
 + ')
 +
 + allow systemd_tmpfiles_t $1:$2 { setattr relabelfrom relabelto create };
 +')
 +</xtermrtf>
 +
 +<xtermrtf>
 +$ sefinddef 'socket.*create'
 +obj_perm_sets.spt:define(`create_socket_perms', `{ create rw_socket_perms }')
 +obj_perm_sets.spt:define(`create_stream_socket_perms', `{ create_socket_perms listen accept }')
 +obj_perm_sets.spt:define(`connected_socket_perms', `{ create ioctl read getattr write setattr append bind getopt setopt shutdown }')
 +obj_perm_sets.spt:define(`create_netlink_socket_perms', `{ create_socket_perms nlmsg_read nlmsg_write }')
 +obj_perm_sets.spt:define(`rw_netlink_socket_perms', `{ create_socket_perms nlmsg_read nlmsg_write }')
 +obj_perm_sets.spt:define(`r_netlink_socket_perms', `{ create_socket_perms nlmsg_read }')
 +obj_perm_sets.spt:define(`client_stream_socket_perms', `{ create ioctl read getattr write setattr append bind getopt setopt shutdown }')
 +</xtermrtf>
 +
 +<xtermrtf>
 +$ seshowdef manage_files_pattern
 +define(`manage_files_pattern',`
 +        allow $1 $2:dir rw_dir_perms;
 +        allow $1 $3:file manage_file_perms;
 +')
 +</xtermrtf>
 +
systeme/selinux.1493465338.txt.gz · Dernière modification : 2017/04/29 11:28 de root