« LINUX:SELinux-Concept » : différence entre les versions

Aucun résumé des modifications
Aucun résumé des modifications
 
(8 versions intermédiaires par le même utilisateur non affichées)
Ligne 106 : Ligne 106 :
  semanage fcontext -a -t <type> <fichiers>
  semanage fcontext -a -t <type> <fichiers>
Par exemple:
Par exemple:
  semanage fcontext -a -t httpd_sys_content_t '/web(/.*)?'
  semanage fcontext -a -t httpd_sys_content_t '/application/web(/.*)?'
Qui ajoute ("-a") le type "httpd_sys_content_t" à tous les fichiers et répertoires de l'arborescence "/web".
Qui ajoute ("-a") le type "httpd_sys_content_t" à tous les fichiers et répertoires de l'arborescence "/application/web".
* l'élimination ("-d") d'une définition; on utilise la commande:
* l'élimination ("-d") d'une définition; on utilise la commande:
  semanage fcontext -d -t <type> <fichiers>
  semanage fcontext -d -t <type> <fichiers>
Par exemple:
Par exemple:
  semanage fcontext -d -t httpd_sys_content_t '/web(/.*)?'
  semanage fcontext -d -t httpd_sys_content_t '/application/web(/.*)?'
Pour éliminer la définition précédente.
Pour éliminer la définition précédente.
* l'application de cette définition ou son retrait avec la commande suivante:
* l'application de cette définition ou son retrait avec la commande suivante:
  restorecon -RFv <fichiers>
  restorecon -RFv <fichiers>
Par exemple:
Par exemple:
  restorecon -RFv /web/
  restorecon -RFv /application/web/
Si par après, on ajoute un fichier ou un répertoire et si leur "Context" ne suit pas, on réapplique cette définition avec cette même commande.
Si par après, on ajoute un fichier ou un répertoire et si leur "Context" ne suit pas, on réapplique cette définition avec cette même commande.


Ligne 272 : Ligne 272 :




=Common, Class et leurs permissions=
Chaque type peut être associé à diverses classes d'objets nommé "Class". Chacun de ces objets perssède diverses méthodes d'accès aucun est associé une permissions. Il se fait que certains objets possèdent les mêmes ensembles de permissions. Afin de simplifier la programmation, ces groupes de permissions sont regroupés sous un même nom appelés "Common". La "Class" concernée par un "Common", héritera des permissions de ce "Common".




Par exemple la "Class" "dir" qui concerne les accès aux répertoires, hérite du "Common" "file" auquel s'ajoute d'autres permissions.
----
common file
{
  ioctl
  read
  write
  create
  getattr
  setattr
  lock
  relabelfrom
  relabelto
  append
  unlink
  link
  rename
  execute
  swapon
  quotaon
  mounton
}
----
et
----
class dir
inherits file
{
  add_name
  remove_name
  reparent
  search
  rmdir
}
----
de même la "Class" "file" hérite aussi du "Common" "file" et de deux autres permissions:
----
class file
inherits file
{
  entrypoint
  execute_no_trans
}
----
On peut avoir une liste de ces "Common" et de ces "Class" à l'URL: <nowiki>https://selinuxproject.org/page/ObjectClassesPerms</nowiki>
La commande suivante:
seinfo --common -x
donne la liste des "Common" et de leurs permissions.
La commande suivante:
seinfo --class -x
donne la liste des "Class" et de leurs permissions.
On peut également les retrouver en parcourant l'arborescence "/sys/fs/selinux/class".
=Type Port=
Il existe un Type SELinux spécial. Leurs noms se terminent par "_port_t". Ils contiennent une liste de n° de ports réseaux TCP ou UDP par protocols.
Par exemple, le Type "http_port_t" possède l'information suivante:
----
tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000
----
ou pour le Type "mysqld_port_t":
----
tcp      1186, 3306, 63132-63164
----
On peut avoir une liste complête grâce à la commande suivante:
semanage port -l
On peut ajouter un port à un de ces types. Par exemple, on peut ajouter le port "1234" au protocol "ssh":
semanage port -a -t ssh_port_t -p tcp 1234
Il existe nombre de règles qui donne la permission pour qu'un programme puisse utiliser un protocole pour autant qu'il utilise un des ports repris dans la liste. Avant d'ajouter un port, il faut bien vérifier cette nécessité. Par exemple, si le service SSHD écoute sur le port "1234" et non "22" comme habituellement, il n'est pas nécessaire d'ajouter ce port. De façon analogue, le service Web HTTPD n'est pas concerné par cette liste de ports "http_port_t" au niveau de l'écoute ("LISTEN"); il ne concernent que les connexions clients qu'il veux effectuer vers un autre serveur.
=Boolean=
Un autre ensemble de paramètres sont les "Boolean" qui prennent les valeurs "True" et "False" (ou "on" et "off" ou "1" ou "0").
On peut afficher une liste complête grâce à la commande suivante:
semanage boolean -l
ou
seinfo --bool -x
ou
getsebool -a
On peut également les retrouver en parcourant le répertoire "/sys/fs/selinux/booleans".
On peut changer leur valeur. Par exemple, la commande suivante active le "Boolean" "httpd_can_network_connect_db":
setsebool -P httpd_can_network_connect_db on
Les deux exemples suivantes de règles illustrent l'utilisation conjointe d'un "Boolean" et d'un Type Port:
allow httpd_php_t '''mysqld_port_t''':tcp_socket name_connect; [ '''httpd_can_network_connect_db'''' ]:True
allow httpd_php_t '''mysqld_port_t''':tcp_socket { recv_msg send_msg }; [ '''httpd_can_network_connect_db''' ]:True
Si le Boolean "httpd_can_network_connect_db" est activé, la règle est activée et un script PHP lancé par le service Web HTTPD, peut effectuer une connexion TCP et des échanges vers une base de données MySql pour autant qu'elle utilise un des ports TCP repris dans la liste; usuellement, on utilise le port TCP 3306. Si ce n'est pas le cas, il faut ajouter le port utilisé à la liste sinon l'accès sera refusé.
Petite remarque, pour effectuer cette connexion vers le serveur MySql, on peut utiliser la fonction PHP "mysqli_connect()". Si pour la variable HOST, on utilise la valeur "localhost", le script va s'adapter et utiliser un socket local Unix et non TCP; dans ce cas, le "Boolean" "httpd_can_network_connect_db" peut être positionné sur "off". Par contre, si on utilise la valeur "127.0.0.1", ce sera un socket TCP qui sera utilisé et le "Boolean" "httpd_can_network_connect_db" devra être positionné sur "on".
Dans un souci de sécurité, on limite les accès; il ne faut pas activer un "Boolean" si ce n'est pas nécessaire.
Par exemple, les "Boolean" "httpd_graceful_shutdown" ou "httpd_can_network_connect" seront positionnés sur "off" car habituellement le service Web HTTPD ne fera pas de lui-même une connexion vers un autre serveur Web. Cet URL sera transmise au client (par exemple Firefox) qui fera cette connexion. Attention, le second "Boolean" a une portée plus large car il s'adresse à tous les ports sans limitation. Bien sûr tout dépend du logiciel utilisé.




Ligne 283 : Ligne 391 :
----
----
__NOEDITSECTION__
__NOEDITSECTION__
<!-- -->
[[Category:LINUX]]
[[Category:LINUX]]