Fedora Core 5 SELinux FAQ Frequently-asked questions about Security Enhanced Linux Karsten Wade Paul W. Frields Chad Sellers Copyright © 2004,2005 Red Hat, Inc. and others. The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. The original authors of this document, and Red Hat, designate the Fedora Project as the "Attribution Party" for purposes of CC-BY-SA. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version. Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law. Red Hat, Red Hat Enterprise Linux, the Shadowman logo, JBoss, MetaMatrix, Fedora, the Infinity Logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries. For guidelines on the permitted uses of the Fedora trademarks, refer to https:// fedoraproject.org/wiki/Legal:Trademark_guidelines. Linux® is the registered trademark of Linus Torvalds in the United States and other countries. Java® is a registered trademark of Oracle and/or its affiliates. XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries. All other trademarks are the property of their respective owners. Resumo 1. Notas e FAQ do SELinux ........................................................................................................ 2 1 SELinux FAQ 1. Notas e FAQ do SELinux The information in this FAQ is valuable for those who are new to SELinux. It is also valuable if you are new to the latest SELinux implementation in Fedora Core, since some of the behavior may be different than you have experienced. This FAQ is specific to Fedora Core 5 If you are looking for the FAQ for other versions of Fedora Core, refer to http:// fedora.redhat.com/docs/selinux-faq/. Para mais informações sobre o funcionamento do SELinux, como usar o SELinux nas distribuições gerais e específicas do Linux, assim como escrever políticas, estes recursos são úteis: Lista de Referências Externas • NSA SELinux main website — http://www.nsa.gov/selinux/ • NSA SELinux FAQ — http://www.nsa.gov/selinux/info/faq.cfm • SELinux community page — http://selinux.sourceforge.net • UnOfficial FAQ — http://www.crypt.gen.nz/selinux/faq.html • Writing traditional SE Linux policy HOWTO — https://sourceforge.net/docman/display_doc.php? docid=21959&group_id=21266 • Reference Policy (the new policy found in Fedora Core 5) — http://serefpolicy.sourceforge.net/ • SELinux policy development training courses — http://tresys.com/services/training.shtml and https:// www.redhat.com/training/security/courses/rhs429.html • Getting Started with SE Linux HOWTO: the new SE Linux (Debian) — https://sourceforge.net/ docman/display_doc.php?docid=20372&group_id=21266 • List of SELinux object classes and permissions — http://tresys.com/selinux/obj_perms_help.shtml • No IRC — irc.freenode.net, #fedora-selinux • Fedora Core mailing list — mailto:[email protected]; read the archives or subscribe at http://www.redhat.com/mailman/listinfo/fedora-selinux-list Making changes/additions to the Fedora Core SELinux FAQ Esta FAQ está disponível em http://fedora.redhat.com/docs/selinux-faq-fc5/. 1 For changes or additions to the Fedora Core SELinux FAQ, use this bugzilla template , which pre-fills most of the bug report. Patches should be a diff -u against the XML, which is available from CVS (refer to http://fedora.redhat.com/projects/docs/ for details on obtaining the fedora-docs/selinux-faq module from anonymous CVS; you can get just the fedora-docs/selinux-faq module if you don't want the entire fedora-docs tree.) Otherwise, plain text showing before and after is sufficient. 2 Notas e FAQ do SELinux Para uma lista com todos os relatórios de erros enviados para esta FAQ, veja em https:// bugzilla.redhat.com/bugzilla/showdependencytree.cgi?id=118757. 1.1. Compreender o SELinux P: O que é o SELinux? R: SELinux (Security-Enhanced Linux) in Fedora Core is an implementation of mandatory access control in the Linux kernel using the Linux Security Modules (LSM) framework. Standard Linux security is a discretionary access control model. Controlo de acesso discreto (DAC) O DAC é a segurança normal no Linux, e não oferece qualquer protecção contra 'software' defeituoso ou programas maliciosos que corram como um utilizador normal ou como 'root'. Os utilizadores poderão ceder níveis arriscados de acesso aos ficheiros que possuem. Controlo de acesso obrigatório (MAC) O MAC oferece um controlo completo sobre todas as interacções do 'software'. Uma política definida a nível administrativo controla de forma restrita as interacções dos utilizadores e dos processos com o sistema, oferecendo uma protecção contra programas defeituosos ou maliciosos como um utilizador qualquer. In a DAC model, file and resource decisions are based solely on user identity and ownership of the objects. Each user and program run by that user has complete discretion over the user's objects. Malicious or flawed software can do anything with the files and resources it controls through the user that started the process. If the user is the super-user or the application is setuid or setgid to root, the process can have root level control over the entire file system. Um sistema MAC não sofre destes problemas. Em primeiro lugar, poderá definir de forma administrativa uma política de segurança sobre todos os processos e objectos. Em segundo lugar, você controla todos os processos e objectos, no caso do SELinux, através do 'kernel'. Em terceiro lugar, as decisões baseiam-se em toda a informação relevante para a segurança, não apenas na identidade do utilizador autenticado. O MAC no SELinux permite-lhe oferecer permissões de forma granular para todos os sujeitos (utilizadores, programas, processos) e objectos (ficheiros, dispositivos). Na prática, pense nos sujeitos como processos e nos objectos como o alvo de uma operação do processo. Poderá ceder em segurança a um processo apenas as permissões que necessita para efectuar a sua função, nada mais. The SELinux implementation uses role-based access control (RBAC), which provides abstracted user-level control based on roles, and Type Enforcement® (TE). TE uses a table, or matrix to handle access controls, enforcing policy rules based on the types of processes and objects. Process types are called domains, and a cross-reference on the matrix of the process's domain and the object's type defines their interaction. This system provides extremely granular control for actors in a Linux system. P: O que é uma política do SELinux? R: The SELinux policy describes the access permissions for all subjects and objects, that is, the entire system of users, programs, and processes and the files and devices they act upon. 3 SELinux FAQ Fedora Core policy is delivered in a package, with an associated source package. Current shipping policy packages are: selinux-policy-<version>.noarch.rpm Este pacote é comum a todos os tipos de políticas e contém os ficheiros de configuração/ páginas do manual. Isto inclui os ficheiros de interface do ambiente de desenvolvimento. Este pacote substitui o pacote '-sources' do passado. Este pacote contém os ficheiros de interface usados na Política de Referência, em conjunto com um aMakefile e uma ferramenta pequena chamada policygentool, que é usada para gerar um ficheiro de modelo de políticas. Os ficheiros da interface residem na pasta /usr/share/selinux/ devel/include. Se quiser ver todos os ficheiros da política que são usados para criar a Política de Referência, terá de instalar então o src.rpm. selinux-policy-strict-<version>.noarch.rpm, selinux-policytargeted-<version>.noarch.rpm, selinux-policy-mls-<version>.noarch.rpm A política instalada e os ficheiros de suporte estão em /etc/selinux/nome-política/. As sub-pastas incluem • policy - uma política binária que é carregada no 'kernel' • contexts - uma política de contextos/etiquetagem, usada para tomar decisões de legendagem por parte de alguns programas, como o 'restorecon' e o 'fixfiles' • modules - um armazém para os módulos de políticas que são combinados para criar a política binária do 'kernel'. Lembre-se que este não deverá ser editado à mão, dado que é um recurso privado da 'libsemanage'. More information on the different policies available in SELinux can be found at http:// fedoraproject.org/wiki/SELinux/Policies. P: O que é a política-alvo do SELinux? R: When SELinux was initially introduced in Fedora Core, it enforced the NSA strict policy. For testing purposes, this effectively exposed hundreds of problems in the strict policy. In addition, it demonstrated that applying a single strict policy to the many environments of Fedora Core users was not feasible. To manage a single strict policy for anything other than default installation would require local expertise. Nest altura, os programadores do SELinux reveram as suas escolhas e optaram por tentar uma estratégia diferente. Decidiram criar uma política-alvo que bloqueia os servidores específicos, especialmente aqueles que são vulneráveis a ataques ou que poderiam devastar um sistema, se tivessem problemas ou fossem atacados. O resto do sistema funciona exactamente como aconteceria numa política normal de DAC do Linux. Na política-alvo, a maioria dos processos corre no domínio unconfined_t. Como o nome indica em inglês, estes processos não estão confinados na política do SELinux. São à mesma cobertos pela política de segurança DAC normal do Linux, todavia. Estes servidores de rede, os quais são tratados pela política-alvo, fazem uma transição para a política-alvo quando a aplicação arranca. Por exemplo, no arranque do sistema, o init executa-se sob a política unconfined_t. Quando o named se inicia, faz uma transição para o domínio named_t e é bloqueado pela política apropriada. 4 Notas e FAQ do SELinux For more information on enabling or disabling targeted policy on each of the specific daemons, refer to How to use system-config-securitylevel. More information on the different policies available in SELinux can be found at http:// fedoraproject.org/wiki/SELinux/Policies. P: Quais os programas que são protegidos pela política-alvo? R: De momento, a lista de programas é, aproximadamente: accton, amanda, httpd (apache), arpwatch, pam, automount, avahi, named, bluez, lilo, grub, canna, comsat, cpucontrol, cpuspeed, cups, cvs, cyrus, dbskkd, dbus, dhcpd, dictd, dmidecode, dovecot, fetchmail, fingerd, ftpd (vsftpd, proftpd, and muddleftpd), gpm, hald, hotplug, howl, innd, kerberos, ktalkd, openldap, auditd, syslog, logwatch, lpd, lvm, mailman, module-init-tools, mount, mysql, NetworkManager, NIS, nscd, ntp, pegasus, portmap, postfix, postgresql, pppd, pptp, privoxy, procmail, radiusd, radvd, rlogin, nfs, rsync, samba, saslauthd, snmpd, spamd, squid, stunnel, dhcpc, ifconfig, sysstat, tcp wrappers, telnetd, tftpd, updfstab, user management (passwd, useradd, etc.), crack, uucpd, vpnc, webalizer, xend, xfs, zebra P: Então e a política restrita? Ainda funciona sequer? R: The strict policy does work on Fedora Core. It is challenged by the unique environments of different users. To use the strict policy in your environment, you may need to fine-tune both the policy and your systems. Para tornar a política restrita mais simples de usar, os programadores do SELinux tentaram fazer a alteração de uma política para a outra mais simples. Por exemplo, o system-configsecuritylevel cria um 'relabel' (mudança de nome) nos programas de arranque. More information on the different policies available in SELinux can be found at http:// fedoraproject.org/wiki/SELinux/Policies. P: O que é a política 'mls'? Para quem é que serve? R: A política 'mls' é semelhante à política restrita, só que acrescenta um campo adicional aos contextos de segurança, para separar os níveis. O SELinux poderá usar estes níveis para separar os dados num ambiente que obriga a uma separação hierárquica restrita. Um exemplo típico é uma configuração militar, onde os dados são secretos a um dado nível. Esta política está destinada a este tipo de ambientes, e poderá não ser útil para si, a menos que caia nesta categoria. More information on the different policies available in SELinux can be found at http:// fedoraproject.org/wiki/SELinux/Policies. P: O que é a Política de Referência? R: The Reference Policy is a new project maintained by Tresys Technology (http://www.tresys.com/) designed to rewrite the entire SELinux policy in a way that is easier to use and understand. To do this, it uses the concepts of modularity, abstraction, and well-defined interfaces. Refer to http:// serefpolicy.sourceforge.net/ for more information on the Reference Policy. 5 SELinux FAQ Lembre-se que a Política de Referência não é um novo tipo de política, como a política-alvo ou a restrita. Em vez disso, é uma base nova, a partir da qual poderão ser criadas as políticas. As políticas-alvo, restritas e 'mls' poderão ser todas criadas a partir da Política de Referência. De facto, um dos objectivos de desenho da Política de Referência é ter uma árvore de código unificada para as diferentes variantes de políticas. Fedora policies at version 1.x are based on the traditional example policy. Version 2.x policies (as used in Fedora Core 5) are based on the Reference Policy. P: O que são os contextos de ficheiros? R: Os contextos de ficheiros são usados pelo comando setfiles para gerar os nomes ou legendas persistentes, que descrevem o contexto de segurança de um ficheiro ou pasta. Fedora Core ships with the fixfiles script, which supports three options: check, restore, and relabel. This script allows users to relabel the file system without having the selinuxpolicy-targeted-sources package installed. The command line usage is more friendly than the standard setfiles command. P: Como é que vejo o contexto de segurança de um ficheiro, utilizador ou processo? R: A nova opção -Z é o método resumido para mostrar o contexto de um sujeito ou objecto: ls -alZ file.foo id -Z ps -eZ P: Qual é a diferença entre um domínio e um tipo? R: Não existem diferenças entre um domínio e um tipo, ainda que o domínio seja usado normalmente usado para se referir ao tipo de um processo. O uso de um domínio, desta forma, deriva dos modelos de Obrigação de Domínio e Tipo (DTE), onde os domínios e os tipos são separados. P: O que são os módulos de políticas? R: Prior to Fedora Core 5, SELinux policies were monolithic, meaning making a change required getting the entire policy source, modifying it, compiling it, and replacing the current policy with it. With Fedora Core 5, the policy is now modular. This means that third party developers can ship policy modules with their applications, and then they can be added to the policy without having to switch out the entire policy. The new module is then added to the module store, which results in a new policy binary that is a combination of the previous policy and the new module. This actually works by separating out compile and link steps in the policy build procedure. Policy modules are compiled from source, and linked when installed into the module store (see Managed Policy). This linked policy is then loaded into the kernel for enforcement. O comando primário para lidar com os módulos é o semodule, que lhe permitirá efectuar funções básicas como a instalação, actualização ou remoção de módulos. Os os outros comandos úteis incluem o checkmodule, que é o compilador de módulos e que é instalado com o RPM do 'checkpolicy', assim como o semodule_package, que cria um ficheiro de pacote de políticas (.pp) a partir de um módulo de política compilado. 6 Notas e FAQ do SELinux Os módulos são normalmente guardados num ficheiro de pacote de políticas (com a extensão '.pp') em /usr/share/selinux/nome-política/. Aí, deverá encontrar, pelo menos, o ficheiro 'base.pp', que é o módulo de base. To see how to write a simple policy module, check out Local Policy Customizations. P: O que é uma política gerida? R: Prior to Fedora Core 5, SELinux policies were handled as user-editable config files in etc. Unfortunately, this made it difficult to address many of the usability issues arising with SELinux. So, a new library, libsemanage, was added to provide userspace tools an interface to making policy management easier. All policy management should use this library to access the policy store. The policy store holds all the policy information, and is found at /etc/ selinux/policyname/modules/. Nunca deverá ter de editar o armazém directamente. Em vez disso, deverá usar ferramentas que se associem à 'libsemanage'. Uma ferramenta de exemplo é a semanage, que é uma ferramenta da linha de comandos para gerir boa parte da política, como o mapeamento de utilizadores do SELinux, o mapeamento de portos do SELinux e os itens dos contextos dos ficheiros. Outros exemplos de ferramentas que usam a 'libsemanage' incluem o semodule, que a usa para gerir os módulos de políticas do SELinux instalados no armazém e o setsebool que a usa para gerir os valores booleanos da política do SELinux. Estão também a ser desenvolvidas outras ferramentas gráficas que usam a funcionalidade oferecida pela 'libsemanage'. 1.2. Controlar o SELinux P: Como é que instalo/não instalo o SELinux? R: O instalador segue a opção que fizer no ecrã de Configuração da 'Firewall'. A política predefinida em execução é a política-alvo, e está activa por omissão. P: Como administrador, o que preciso de fazer para configurar o SELinux no meu sistema? R: The answer might be nothing. There are many Fedora users that don't even realize that they are using SELinux. SELinux provides protection for their systems with an out-of-the-box configuration. That said, there are a couple of things an administrator might want to do to configure their system. These include: booleanos Os booleanos são configurações que poderão ser invertidas para alterar o comportamento da política do SELinux sem ter de criar uma política nova. Existem muitos booleanos que poderão ser definidos no Fedora, e que permitem a um administrador configurar o SELinux em grande medida. Para ver os booleanos disponíveis e modificar a sua configuração, use o system-config-securitylevel ou a ferramenta da linha de comandos setsebool. definir contextos de ficheiros personalizados Files on an SELinux system have a security context which is stored in the extended attribute of the file (behavior can vary from filesystem to filesystem, but this is how ext3 works). These are set by rpm automatically, but sometimes a user might want to set a particular context on a file. An example would be setting the context on a public_html directory so that 7 SELinux FAQ apache can access it, as illustrated in How do I make a user public_html directory work under SELinux. Para uma lista de tipos que poderá querer atribuir aos ficheiros, veja em /etc/selinux/ targeted/contexts/customizable_types. Estes são tipos normalmente atribuídos aos ficheiros pelos utilizadores e administradores. Para os definir, use o comando chcon. Lembre-se que os tipos em customizable_types são também preservados após a mudança de nome, como tal a legendagem do sistema não irá anular isto. fazer algumas bibliotecas mal-comportadas funcionar There are many libraries around that behave badly and try to break the memory protections SELinux provides. These libraries should really be fixed, so please file a bug with the library maintainer. That said, they can be made to work. More information and solutions to make the libraries work can be found in I have a process running as unconfined_t, and SELinux is still preventing my application from running. P: Como é que activo/desactivo a protecção do SELinux em domínios específicos, sob a políticaalvo? R: Use o system-config-securitylevel, também conhecida como a ferramenta gráfica da Configuração do Nível de Segurança, para controlar os valores booleanos dos servidores específicos. Por exemplo, se precisar de desactivar o SELinux para o Apache correr correctamente no seu ambiente, poderá desactivar o valor no system-configsecuritylevel. Esta mudança desactiva a transição para a política definida no apache.te, permitindo ao httpd manter-se segundo a segurança DAC normal do Linux. P: In the past I have written local.te file in policy sources for my own local customization to policy, how do I do this in Fedora Core 5? R: Since Fedora Core 5 uses a modular policy, you don't have to have the complete policy source any more. Now, you can just create a local policy module for your local policy customizations. To do this, follow these steps. 1. Crie uma pasta temporária e entre nela. $ mkdir foo $ cd foo 2. Crie ficheiros 'te', 'if' e 'fc' vazios. $ touch local.te local.if local.fc 3. Edite o ficheiro 'local.te', adicionando algum conteúdo apropriado. Por exemplo: policy_module(local, 1.0) require { attribute httpdcontent; type smbd_t; } allow smbd_t httpdcontent:dir create_dir_perms; allow smbd_t httpdcontent:{ file lnk_file } create_file_perms; Existem 3 partes neste ficheiro. 8 Notas e FAQ do SELinux • A chamada policy_module insere as instruções para pôr o módulo a funcionar, incluindo a declaração do módulo e a requisição de papéis, classes e permissões do sistema. Certifique-se que o nome aqui indicado ('local', neste caso) corresponde ao nome que indicou no ficheiro (local.te). • O bloco require indica os símbolos que este módulo usa que deverão estar declarados noutros módulos. Neste caso, é necessário o atributo httpdcontent e o tipo smbd_t. Repare que todos os tipos e atributos que usar nas regras deverão ser indicados aqui, a menos que os esteja a declarar você mesmo, mais abaixo. • O resto do ficheiro é a política, que consiste neste caso apenas num conjunto de regras de permissões. Poderia também colocar aqui as declarações dos tipos, as instruções 'dontaudit', as chamadas à interface ou a maioria das coisas que poderão ir para um ficheiro 'te' normal. 4. Compile o módulo da política. $ make -f /usr/share/selinux/devel/Makefile Compliling targeted local module / usr/bin/checkmodule: loading policy configuration from tmp/local.tmp /usr/bin/ checkmodule: policy configuration loaded /usr/bin/checkmodule: writing binary representation (version 5) to tmp/local.mod Creating targeted local.pp policy package rm tmp/local.mod.fc tmp/local.mod Repare que isto usa o checkmodule, que faz parte do RPM do 'checkpolicy'. Como tal, certifique-se que instala este RPM antes de fazer este passo. 5. Mude para o utilizador 'root' e instale o módulo da política com o semodule. $ su Password: # semodule -i local.pp Os módulos são identificados univocamente por nome Isto significa que, se inserir mais tarde outro ficheiro local.pp, ele irá substituir o que acabou de carregar. Por isso, deverá manter este ficheiro local.te e adicione-o apenas se precisar de fazer mais personalizações da política. Se o perder, mas quiser manter a sua política anterior, basta chamar ao novo módulo da política local outro nome (por exemplo, local2.te). P: Tenho algumas proibições do 'avc' que gostaria de permitir; como é que faço isso? R: Se tiver mensagens de AVC específicas, poderá usar o audit2allow para gerar um ficheiro de Type Enforcement que está pronto a ser carregado como um módulo de políticas. audit2allow -M local < /tmp/avcs Isto irá criar um local.pp, o qual poderá depois carregar no 'kernel' com o comando semodule -i local.pp. Poderá também editar o local.te para fazer personalizações 9 SELinux FAQ adicionais. Para criar um módulo que permita todas as proibições desde o último arranque, para que o possa personalizar de seguida, execute o seguinte: audit2allow -m local -l -i /var/log/messages > local.te Lembre-se que o que está acima assume que você não está a usar o servidor de auditorias. Se estivesse a usar o servidor de auditorias, então iria usar o /var/log/audit/audit.log em vez do /var/log/messages como ficheiro de registo. Isto irá gerar um ficheiro local.te, que se parece mais ou menos com o seguinte: module local 1.0; require { class file { append execute execute_no_trans getattr ioctl read write }; type httpd_t; type httpd_w3c_script_exec_t; }; allow httpd_t httpd_w3c_script_exec_t:file { execute execute_no_trans getattr ioctl read }; You can hand edit this file, removing allow statements that you don't want to allow, and then recompile and reload it using • Use o checkmodule -M -m -o local.mod local.te para compilar o ficheiro 'te'. Lembre-se que o checkmodule faz parte do RPM 'checkpolicy', por isso este deverá estar instalado. • semodule_package -o local.pp -m local.mod para criar um pacote de política. • semodule -i local.pp to add it to the current machine's running policy. This installs a new module called local with these rules into the module store. Importante Para carregar este pacote de política no 'kernel', é preciso executar o semodule i local.pp Lembre-se que, se instalar posteriormente outro módulo chamado 'local', este irá substituir este módulo. Se quiser manter estas regras, então terá de adicionar as personalizações futuras a este ficheiro 'local.te' ou então dar às novas personalizações um nome diferente. P: Como é que posso ajudar a criar políticas? R: A sua ajuda é claramente bem-vinda. • You can start by joining the Fedora Core SELinux mailing list. You can subscribe and read the archives at http://www.redhat.com/mailman/listinfo/fedora-selinux-list. • The Unofficial FAQ has some generic policy writing HOWTO information. Refer to http:// sourceforge.net/docman/display_doc.php?docid=14882&group_id=21266#BSP.1 for more information. • Another new resource is the Writing SE Linux policy HOWTO, located online at https:// sourceforge.net/docman/display_doc.php?docid=21959&group_id=21266. 10 Notas e FAQ do SELinux Also, since the Fedora Core 5 policy is based on the Reference Policy, you should look at the documentation on its project page. Another excellent source of information is the example policy files in /usr/share/doc/selinux-policy->version< and /usr/share/selinux/ devel. Se quiser criar um novo domínio de políticas, poderá ver os ficheiros de interface nas subpastas da /usr/share/selinux/devel. Existe também aí uma ferramenta que o ajuda a começar. O procedimento seguinte é um exemplo: 1. Use o comando policygentool para gerar os seus próprios ficheiros te, fc e if. O comando policygentool recebe dois parâmetros: o nome do módulo da política e a localização completa do executável. O comando seguinte dá um exemplo de utilização: policygentool mydaemon /usr/sbin/mydaemon Ele pedir-lhe-á algumas características comuns do domínio, e irá de seguida criar três ficheiros: o omeuservidor.te, o omeuservidor.fc e o omeuservidor.if. 2. Depois de gerar os ficheiros da política, use a Makefile oferecida, a /usr/share/ selinux/devel/Makefile, para criar um pacote de políticas (omeuservidor.pp): make -f /usr/share/selinux/devel/Makefile 3. Agora, poderá carregar o módulo da política, usando o semodule e mudar a legenda do executável com o restorecon: semodule -i mydaemon.pp restorecon -v /usr/sbin/mydaemon 4. Dado que você tem uma política muito limitada para o seu executável, o SELinux irá evitar que ele faça muita coisa. Active o modo permissivo e use então o programa 'init' para iniciar o seu servidor: setenforce 0 service mydaemon restart Agora, poderá recolher as mensagens do 'avc'. Poderá usar o audit2allow para traduzir as mensagens do 'avc' para regras de permissão e começar a actualizar o seu ficheiro omeuservidor.te. Deverá procurar por macros de interfaces na pasta /usr/share/ selinux/devel/include e usar estas macros, em vez das regras directas, sempre que possível. O audit2allow -R irá tentar descobrir as interfaces que correspondam à regra de permissão. Se quiser mais exemplos de políticas, poderá sempre instalar o pacote de código do 'selinux-policy', que contém todos os ficheiros 'te' da política de referência. P: Como é que mudo a política que estou a usar de momento? 11 SELinux FAQ R: Tenha cuidado ao mudar de política Para além de tentar uma política nova para fins de investigação, numa máquina de testes, deverá considerar seriamente a sua situação antes de mudar para uma política diferente num sistema de produção. O acto de mudar é relativamente simples. Este método é razoavelmente seguro, mas devê-lo-á testar primeiro num sistema de testes. To use the automated method, run the Security Level Configuration tool. From the GUI Main Menu, select Desktop → System Settings → Security level, or from a terminal, run systemconfig-securitylevel. Change the policy as desired and ensure that the Relabel on next reboot option is enabled. Poderá também efectuar estes passos manualmente com o seguinte procedimento: 1. Edite o /etc/selinux/config e mude o tipo e o modo da política: SELINUXTYPE=policyname SELINUX=permissive Este passo garante que você não ficará bloqueado depois de reiniciar o sistema. O SELinux irá correr com a política correcta, mas permitir-lhe-á autenticar-se se ocorrer um problema, como a mudança de nome de um contexto de ficheiros incorrecto. 2. Configure o sistema para mudar o nome no sistema de ficheiros ao reiniciar: touch /.autorelabel 3. Reinicie o sistema. Um arranque limpo, com a política nova, permite iniciar todos os processos do sistema no contexto correcto, revelando todos os problemas que existem pela mudança de política. 4. Confirme se as suas alterações fizeram efeito com o seguinte comando: sestatus -v With the new system running in permissive mode, check /var/log/messages for avc: denied messages. These may indicate a problem that needs to be solved for the system to run without trouble under the new policy. 5. Quando estiver satisfeito com a estabilidade com o sistema corre com a nova política, active o modo real ou obrigatório, mudando para SELINUX=enforcing. Poderá tanto reiniciar o sistema como executar o comando setenforce 1 para activar a efectividade do sistema em tempo-real. P: Como é que posso salvaguardar os ficheiros de um sistema de ficheiros do SELinux? R: Use o utilitário star, que suporta os atributos extendidos que guardam os nomes dos contextos de segurança. Indique a opção -xattr e -H=exustar ao criar os pacotes. 12 Notas e FAQ do SELinux ls -Z /var/log/maillog -rw------- root root system_u:object_r:var_log_t /var/log/maillog cd /var/log star -xattr -H=exustar -c -f maillog.star ./maillog* Os locais absolutos poderão substituir os dados existentes Se usar um local absoluto, como o /var/log/maillog, ao descomprimir o pacote com o star -c -f, os ficheiros serão repostos no mesmo local com que foram arquivados. O ficheiro maillog irá tentar gravar no /var/log/maillog. Deverá receber um aviso do star se os ficheiros prestes a serem sobrepostos tiverem uma data posterior, mas não poderá confiar neste comportamento. Pense com cuidado na forma como constrói o seu argumento de arquivo. P: Como é posso instalar a política restrita por omissão com o 'kickstart'? R: 1. Na secção %packages, adicione a selinux-policy-strict. 2. Na secção %post, adicione o seguinte: lokkit -q --selinuxtype=strict touch /.autorelabel P: Como é que ponho a pasta public_html de um utilizador a funcionar no SELinux? R: This process presumes that you have enabled user public HTML directories in your Apache configuration file, /etc/httpd/conf/httpd.conf. This process only covers serving static Web content. For more information about Apache HTTP and SELinux, refer to http:// fedora.redhat.com/docs/selinux-apache-fc3/. 1. Se não tiver já uma pasta ~/public_html, crie uma e preencha-a com os ficheiros e pastas a serem servidos. cd ~ mkdir public_html cp /path/to/content ~/public_html 2. At this point, httpd is configured to serve the contents, but you still receive a 403 forbidden error. This is because httpd is not allowed to read the security type for the directory and files as they are created in the user's home directory. Change the security context of the folder and its contents recursively using the -R option: ls -Z -d public_html/ drwxrwxr-x auser auser user_u:object_r:user_home_t public_html chcon -R -t httpd_user_content_t public_html/ ls -Z -d public_html/ drwxrwxr-x auser auser user_u:object_r:httpd_user_content_t public_html/ ls -Z public_html/ -rw-rw-r-- auser auser user_u:object_r:httpd_user_content_t bar.html -rw-rw-r-auser auser user_u:object_r:httpd_user_content_t baz.html -rw-rw-r-- auser auser user_u:object_r:httpd_user_content_t foo.html 13 SELinux FAQ Poderá reparar mais tarde que o campo do utilizador, definido aqui como user_u, é mudado para system_u. Isto não afecta a forma como a política-alvo funciona. O campo que interessa é o campo do tipo. 3. Your static webpages should now be served correctly. If you continue to have errors, ensure that the Boolean which enables user home directories is enabled. You can set it using system-config-securitylevel. Select the SELinux tab, and then select the Modify SELinux Policy area. Select Allow HTTPD to read home directories. The changes take effect immediately. P: Como é que desactivo o SELinux no arranque? R: Configure o SELINUX=disabled no /etc/selinux/config. Em alternativa, poderá adicionar selinux=0 aos seus parâmetros de arranque do 'kernel'. Contudo, esta opção não é recomendada. Tenha cuidado ao desactivar o SELinux Se arrancar com o selinux=0, todos os ficheiros que criar, enquanto o SELinux estiver desactivado, não terão informações de contexto do SELinux. O sistema de ficheiros será marcado para mudança de nome no próximo arranque. Se um problema imprevisível evitar que você reinicie normalmente, poderá ter de reiniciar no modo mono-utilizador para recuperar. Adicione a opção emergency aos seus parâmetros de arranque do 'kernel'. P: Como é que activo/desactivo o modo obrigatório no arranque? R: Poderá indicar o modo do SELinux com o ficheiro de configuração /etc/sysconfig/ selinux. # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=enforcing # SELINUXTYPE= type of policy in use. Possible values are: # targeted - Only targeted network daemons are protected. # strict - Full SELinux protection. SELINUXTYPE=targeted A configuração do valor enforcing é a mesma que adicionar enforcing=1 aos parâmetros de arranque do 'kernel'. A configuração deste valor como permissive é a mesma que adicionar enforcing=0 aos mesmos parâmetros de arranque. Contudo, configurar o valor como disabled não é o mesmo que o parâmetro de arranque selinux=0. Em vez de desactivar por completo o SELinux no 'kernel', a opção disabled simplesmente desactiva a aplicação e o carregamento de uma política. 14 Notas e FAQ do SELinux Precedência da Configuração do SELinux O parâmetro da linha de comandos do 'kernel' tem precedência sobre o ficheiro de configuração. P: Como é que desactivo temporariamente o modo 'enforcing' sem ter de reiniciar o sistema? R: Em algumas ocasiões, poderá ter de efectuar uma acção que é impedida normalmente pela política. Execute o comando setenforce 0 para desactivar o modo de aplicação da política em tempo-real. Quando terminar, execute setenforce 1 para voltar a aplicar o SELinux de novo. sysadm_r Papel obrigatório para a política restrita Deverá executar o comando setenforce com o papel de sysadm_r, se estiver a usar a política restrita. Se estiver a usar a política-alvo normal, então não é necessário. Use o comando newrole para assumir este papel. P: Como é que desactivo a auditoria de chamadas de sistema no arranque? R: Adicione audit=1 à sua linha de comandos do 'kernel', para activar a auditoria de chamadas do sistema. Adicione audit=0 na mesma linha de comandos para desactivar essa auditoria. A auditoria às chamadas do sistema está activada por omissão. Quando assim estiver, ela produz informações acercada da chamada de sistema que estava a ser executada, quando o SELinux gerou uma mensagem denied (negado). A mensagem de erro é útil para fins de depuração. P: Como é que desactivo temporariamente a auditoria às chamadas de sistema sem ter de reiniciar o mesmo? R: Execute auditctl -e 0. Lembre-se que este comando não irá afectar a auditoria das proibições de AVC do SELinux. P: Como é que obtenho a informação do estado da minha instalação do SELinux? R: Como 'root', execute o comando /usr/sbin/sestatus -v. Para mais informações, veja a página de manual do sestatus(8). P: Como é que escrevo uma política para permitir a um domínio usar o pam_unix.so? R: Muito poucos domínios no mundo do SELInux têm permissão para ler o ficheiro /etc/shadow. Existem regras restritas que impedem os criadores de políticas de escrever código do género allow mydomain_t shadow_t:file read; 15 SELinux FAQ No RHEL4, poderá configurar o seu domínio para usar o comando unix_chkpwd. A forma mais simples é usar o atributo unix_chkpwd. Por isso, se estiver a criar a política para um servidor 'ftpd', iria escrever algo do tipo daemon_domain(vsftpd, `auth_chkpwd') This would create a context where vsftpd_t -> chkpwd_exec_t -> system_chkpwd_t which can read /etc/shadow, while vsftpd_t is not able to read it. In Fedora Core 5/RHEL5, add the rule auth_domtrans_chk_passwd(vsftpd_t) P: Criei um novo Pacote de Políticas; onde é que o ponho para garantir que é carregado no 'kernel'? R: Tudo o que tem a fazer é executar o comando semodule -i minha_aplicacao.pp. Isto modifica a política que é gravada na máquina. Por agora, sempre que o resto da política for carregado, a política da sua aplicação será também carregada. Até poderá remover o ficheiro 'pp' do sistema. O semodule -l irá listar os módulos carregados de momento. #semodule -i myapp 1.2.1 Se quiser remover mais tarde o pacote da política, poderá executar o comando semodule -r minha_aplicacao. 1.3. Resolução de Problemas P: Onde é que são guardadas as mensagens do AVC do SELinux (registos de proibições, etc.)? R: In Fedora Core 2 and 3, SELinux AVC messages could be found in /var/log/messages. In Fedora Core 4, the audit daemon was added, and these messages moved to /var/log/ audit/audit.log. In Fedora Core 5, the audit daemon is not installed by default, and consequently these messages can be found in /var/log/messages unless you choose to install and enable the audit daemon, in which case AVC messages will be in /var/log/audit/ audit.log. P: My application isn't working as expected and I am seeing avc: denied messages. How do I fix this? R: Esta mensagem significa que a política actual do SELinux não está a permitir à aplicação fazer algo. Existe um conjunto de razões para isto acontecer. First, one of the files the application is trying to access could be mislabeled. If the AVC message refers to a specific file, inspect its current label with ls -alZ /path/to/file. If it seems wrong, use the command restorecon -v /path/to/file to restore the file's default 16 Notas e FAQ do SELinux context. If you have a large number of denials related to files, you may want to use fixfiles relabel, or run restorecon -R /path to recursively relabel a directory path. Denials are sometimes due to a configuration change in the program that triggered the denial message. For example, if you change Apache to also listen on port 8800, you must also change the security policy, apache.te. Refer to Lista de Referências Externas for more information about writing policy. If you are having trouble getting a specific application like Apache to work, refer to How to use system-config-securitylevel for information on disabling enforcement just for that application. P: I installed Fedora Core on a system with an existing /home partition, and now I can't log in. R: A sua partição /home não tem o nome ou legenda correcto. Poderá resolver isto facilmente de duas formas diferentes. Se quiser simplesmente mudar o nome da /home de forma recursiva: /sbin/restorecon -v -R /home Se quiser ter a certeza que não existem outros ficheiros com nomes ou legendas incorrectos, poderá aplicar esse nome em todo o sistema de ficheiros: /sbin/fixfiles relabel Deverá ter o pacote policycoreutils instalado para usar o fixfiles. P: Depois de mudar o nome da minha /home com o setfiles ou o fixfiles, serei capaz à mesma de ler a /home num sistema que não tenha o SELinux activo? R: You can read the files from a non-SELinux distribution, or one with SELinux disabled. However, files created by a system not using SELinux systems do not have a security context, nor do any files you remove and recreate. This could be a challenge with files such as ~/.bashrc. You may have to relabel /home when you reboot the SELinux enabled Fedora Core system. P: How do I share directories using NFS between Fedora Core and non-SELinux systems? R: Assim como o NFS suporta de forma transparente vários tipos de sistemas de ficheiros, pode ser usado para partilhar directorias entre sistemas SELinux e não-SELinux. Quando montar um sistema de ficheiros não-SELinux por NFS, o SELinux, por omissão, irá tratar todos os ficheiros da partilha como tendo um contexto nfs_t. Poderá substituir o contexto predefinido se o configurar manualmente, com a opção context=. O seguinte comando faz com que os ficheiros na pasta montada por NFS pareça ter um contexto system_u:object_r:tmp_t no SELinux: mount -t nfs -o context=system_u:object_r:tmp_t server:/shared/foo /mnt/foo 17 SELinux FAQ Quando o SELinux exporta um sistema de ficheiros via NFS, os ficheiros acabados de criar têm o contexto da pasta onde foram criados. Por outras palavras, a presença do SELinux no sistema de montagem remota não faz efeito nos contextos locais de segurança. P: How can I create a new Linux user account with the user's home directory having the proper context? R: Poderá criar o seu utilizador novo com o comando useradd normal. Primeiro, deverá mudar para o root. Na política restrita, terá de mudar o papel para sysadm_r com o seguinte comando: newrole -r sysadm_r Para a política-alvo, não terá de mudar de papéis, mantendo-se no unconfined_t: su - root id -Z root:system_r:unconfined_t useradd auser ls -Z /home drwx------ auser auser root:object_r:user_home_dir_t /home/auser O contexto inicial para uma nova pasta pessoal de um utilizador tem a identidade do root. Se mudar a legenda do sistema de ficheiros, irá mudar a identidade para system_u. Estas opções são, a título funcional, as mesmas, dado que o papel e o tipo são idênticos (object_r:user_home_dir_t.) P: Será que o comando su muda a minha identidade e papel no SELInux? R: In previous versions of Fedora Core, security context transitions were integrated into the su via pam_selinux. This turned out to be more trouble than it was worth, and is quite unnecessary on a system running targeted policy. So, this is no longer the case. Now, su/sudo only change the Linux identy. You will need to use newrole to change the SELinux identity, role, or level. Outras formas de mudança de identidade do Linux/UNIX®, por exemplo o setuid(2), também não causam uma mudança de identidade do SELinux. P: I'm having troubles with avc errors filling my logs for a particular program. How do I choose not to audit the access for it? R: Se não quiser auditar o dmesg, por exemplo, colocaria isto no seu ficheiro dmesg.te: dontaudit dmesg_t userdomain:fd { use }; Isto elimina as mensagens de erro no terminal para todos os domínios de utilizadores, incluindo o user, o staff e o sysadm. P: Even running in permissive mode, I'm getting a large number of avc denied messages. R: Num modo não-obrigatório, deverá de facto receber mais mensagens que no modo obrigatório. O 'kernel' regista cada proibição de acesso, como se estivesse no modo obrigatório. Dado que 18 Notas e FAQ do SELinux não está restringido pela aplicação da política, poderá efectuar mais acções, o que resulta no registo de mais proibições. Se uma aplicação em execução, no modo obrigatório, ver negado o acesso à leitura de um conjunto de ficheiros numa pasta, é interrompida logo no início da acção. Num modo não-obrigatório, a aplicação não é impedida de percorrer a árvore de pastas, gerando uma mensagem de proibição por cada ficheiro lido na pasta. P: I get a specific permission denial only when SELinux is in enforcing mode, but I don't see any audit messages in /var/log/messages (or /var/log/audit/audit.log if using the audit daemon). How can I identify the cause of these silent denials? R: A razão mais comum para uma proibição silenciosa é quando a política contém uma rega dontaudit explícita para eliminar as mensagens de auditoria. A regra dontaudit é usada normalmente quando uma proibição benigna está a encher os registos de auditoria. Para procurar pela sua proibição em particular, terá de activar a auditoria de todas as regras dontaudit: semodule -b /usr/share/selinux/targeted/enableaudit.pp O resultado dos dontaudit activados é bastante descritivo Se activar a auditoria de todas as regras dontaudit, irá provavelmente resultar numa grande quantidade de informações de auditoria, a maioria das quais sendo irrelevante para a sua proibição. Use esta técnica apenas quando estiver à procura explicitamente de uma mensagem de auditoria por uma proibição que parece ocorrer de forma silenciosa. De certeza irá querer activar de novo as regras dontaudit o mais cedo possível. Logo que tenha descoberto o seu problema, poderá voltar ao modo predefinido com o comando semodule -b /usr/share/selinux/targeted/base.pp P: Porque é que não vejo o resultado, quando corro certos servidores no modo de depuração ou interactivo? R: O SELinux desactiva intencionalmente o acesso aos dispositivos TTY para impedir os servidores de comunicarem de volta no terminal sob controlo. Esta comunicação poderá ser um risco de segurança potencial, porque esses servidores poderão introduzir comandos no terminal que controlam. Um programa defeituoso ou modificado poderá usar esta falha para causar problemas sérios. Existem algumas formas de você capturar o resultado do 'standard output' dos servidores. Um método é encaminhar o resultado para o comando 'cat'. 19 SELinux FAQ snmpd -v | cat Ao fazer a depuração de um servidor, poderá querer desligar a transição do servidor para o seu domínio específico. Poderá fazer isto com as aplicações system-config-securitylevel ou setsebool na linha de comandos. Uma opção final é desligar o modo obrigatório durante a depuração. Invoque o comando setenforce 0 para desligar o modo obrigatório e use o comando setenforce 1 para voltar a activar o SELinux quando terminar a depuração. P: Quando fizer uma actualização do pacote da política (por exemplo, com o yum), o que acontece à política? É actualizada automaticamente? R: A política carrega-se a si própria, quando o pacote é actualizado. Este comportamento substitui o make load manual. Em algumas situações, poderá ter de mudar a legenda do sistema de ficheiros. Isto poderá ocorrer como parte da correcção de um erro do SELinux, onde os contextos dos ficheiros se tornem inválidos ou quando a política faz alterações no ficheiro /etc/selinux/targeted/ contexts/files/file_contexts. Depois de o sistema de ficheiros ter mudado de nome ou legenda, não será necessário fazer um reboot, mas é útil para garantir que todos os processos e programas estão a correr no domínio correcto. Isto é altamente dependente das alterações na política actualizada. Para mudar o nome ou legenda, tem várias opções. Poderá usar o comando fixfiles: fixfiles relabel reboot Em alternativa, use o mecanismo do /.autorelabel: touch /.autorelabel reboot P: Se a política que vem com o pacote de uma aplicação mudar de forma a que necessite de mudança da legenda, será que o RPM consegue lidar com a mudança de legenda dos ficheiros que pertencem ao pacote? R: Sim. Os contextos de segurança dos ficheiros pertencentes ao pacote são guardados nos dados do cabeçalho do pacote. Os contextos dos ficheiros são definidos directamente a seguir à cópia do cpio, à medida que os ficheiros vão sendo colocados no disco. P: Why do binary policies distributed with Fedora, such as /etc/selinux/<policyname>/ policy/policy.<version>, and those I compile myself have different sizes and MD5 checksums? R: Quando você instala o pacote de uma política, os ficheiros pré-compilados das políticas binárias são colocados directamente em /etc/selinux. Os ambientes de compilação diferentes fazem com que os ficheiros-alvo tenham tamanhos e códigos MD5 diferentes. P: Será que os pacotes novos de políticas poderão invalidar o meu sistema? 20 Notas e FAQ do SELinux R: There is a possibility that changes in the policy package or in the policy shipping with an application package can cause errors, more denials, or other unknown behaviors. You can discover which package caused the breakage by reverting policy and application packages one at a time. If you don't want to return to the previous package, the older version of the configuration files will be saved with the extension .rpmsave. Use the mailing lists, bugzilla, and IRC to help you work through your problem. If you are able, write or fix policy to resolve your problem. P: A minha consola está a ficar inundada com mensagens. Como é que as desligo? R: Para voltar a ganhar algum controlo útil, desligue as mensagens do 'kernel' para a consola com este comando: dmesg -n 1 P: Posso testar a política predefinida sem instalar o código da política? R: Pode testar a política predefinida do SELinux, instalando apenas os pacotes selinuxpolicy-nome-política e policycoreutils. Sem o código da política instalado, o comando fixfiles automatiza a mudança de nome do sistema de ficheiros. O comando fixfiles relabel é o equivalente do make relabel. Durante a mudança de nome ou legenda, irá remover todos os ficheiros da /tmp, limpar os ficheiros que já tenham legendas de contextos de ficheiros antigas. Os outros comandos são o fixfiles check, que verifica os ficheiros sem legendas e o fixfiles restore, que corrige os ficheiros sem legenda mas não remove os ficheiros na / tmp. O comando fixfiles não recebe uma lista de pastas como argumento, dado que muda o nome ou legenda de todo o sistema de ficheiros. Se precisar de efectuar a mudança apenas numa pasta específica, use o restorecon. P: Porque é que algumas das minhas aplicações do KDE têm problemas com o SELinux? R: Os executáveis do KDE aparecem sempre como kdeinit, o que limita o que poderá ser feito com a política do SELinux. Isto deve-se ao facto de todas as aplicações do KDE correrem no domínio do kdeinit. Aparecem normalmente problemas ao instalar o SELinux, dado que não é possível mudar a legenda do /tmp e do /var/tmp. Não existe um método bom para determinar qual o contexto que cada ficheiro deverá ter. A solução é encerrar a sessão do KDE por completo e remover todos os ficheiros temporários do KDE: rm -rf /var/tmp/kdecache-<username> rm -rf /var/tmp/<other_kde_files> Na sua próxima sessão, o seu problema já deverá estar corrigido. P: Porque é que o SELINUX=disabled não funciona para mim? 21 SELinux FAQ R: Tenha cuidado com os espaços em branco no ficheiro /etc/sysconfig/selinux. O código é muito sensível a espaços em branco, mesmo com os espaços finais. P: Tenho um processo a correr como unconfined_t, e o SELinux impede à mesma que a minha aplicação corra. R: We have begun to confine the unconfined_t domain somewhat. SELinux restricts certain memory protection operation. Following is a list of those denials, as well as possible reasons and solutions for those denials. For more information on these restrictions, see http:// people.redhat.com/drepper/selinux-mem.html. Este tipo de mensagens aparece no /var/log/messages (ou no /var/log/audit/ audit.log se estiver a usar o servidor de auditorias) como negações do AVC. Também poderão aparecer ao executar programas com erros do género error while loading shared libraries: /usr/lib/libavutil.so.49: cannot restore segment prot after reloc: Permission denied que indica que a biblioteca está a tentar mudar o segmento de texto de local e não conseguiu. Estas mudanças são más, mas poderão ser permitidas com a primeira sugestão abaixo. Seguem-se as permissões de memória do SELinux que são negadas, assim como sugestões para como lidar com estas proibições. execmod Isto baseia-se normalmente numa legenda de uma biblioteca. Poderá mudar de forma permanente o contexto da biblioteca com os seguintes comandos # /usr/sbin/semanage fcontext -a -t textrel_shlib_t '/usr/lib/libavutil.so.49.0.0' # /sbin/restorecon -v /usr/lib/libavutil.so.49.0.0 com a biblioteca que está a dar problemas em particular, em substituição de /usr/lib/ libavutil.so.49.0.0. Agora, a sua aplicação deverá ser capaz de correr. Comunique este facto no Bugzilla. execstack Tente o execstack -c BIBLIOTECA. Agora, teste a sua aplicação de novo. Se a aplicação agora funcionar, a biblioteca foi marcada por engano como necessitando do execstack. Comunique isto como um Bugzilla. execmem, execheap Um valor booleano para cada um destes erros de verificação de memória foram oferecidos. Por isso, se precisar de executar uma aplicação que necessite de alguma destas permissões, poderá activar o 'allow_exec*' para corrigir o problema. Por exemplo, se tentar executar uma aplicação e obter uma mensagem do AVC que contenha um erro execstack. Poderá configurar o valor booleano com setsebool -P allow_execstack=1 P: 22 O que significam estes erros do RPM? Notas e FAQ do SELinux R: restorecon reset /etc/modprobe.conf context system_u:object_r:etc_runtime_t>system_u:object_r:modules_conf_t restorecon reset /etc/cups/ppd/homehp.ppd context user_u:object_r:cupsd_etc_t->system_u:object_r:cupsd_rw_etc_t Durante o processo de actualização, o pacote do selinux executa o 'restorecon' na diferença entre a política de instalação anterior 'file_context' e o contexto da nova política instalada. Isto mantém o contexto dos ficheiros correcto no disco. libsepol.sepol_genbools_array: boolean hidd_disable_trans no longer in policy Isto indica que a política actualizada removeu o valor booleano da política. P: Quero executar um servidor num porto não-padrão mas o SELinux não mo permite. Como é que ponho isto a funcionar? R: Pode usar o comando semanage para definir portos adicionais. Por exemplo, imagine que quer que o 'httpd' seja capaz de atender pedidos no porto 8082. Iria indicar o comando. semanage port -a -p tcp -t http_port_t 8082 P: Como é que adiciono traduções adicionais ao meu sistema MCS/MLS? R: As traduções são feitas pela libsemanage. Use o semanage translation -l para listar todas as traduções actuais. # semanage translation -l Level Translation s0 s0-s0:c0.c255 SystemLow-SystemHigh s0:c0.c255 SystemHigh Agora, escolha uma categoria não usada. Imagine que queria definir o "Tesouraria" como tradução, e o s0:c6 não estivesse a ser usado. # semanage translation -a -T Payroll s0:c6 # semanage translation -l Level Translation s0 s0-s0:c0.c255 SystemLow-SystemHigh s0:c0.c255 SystemHigh s0:c6 Payroll P: Configurei as minhas traduções do MCS/MLS, agora quero designar os utilizadores que poderão ler uma dada categoria? R: Poderá modificar o intervalo de categorias a que um utilizador se poderá autenticar com o semanage, como se vê neste exemplo. # semanage login -a -r s0-Payroll csellers # semanage login -l Login Name SELinux User MLS/MCS Range __default__ user_u s0 csellers user_u s0-Payroll root root SystemLowSystemHigh No exemplo acima, o utilizador 'ze' ficou com acesso à categoria Tesouraria com o primeiro comando, como aparece no resultado da listagem do segundo comando. 23 SELinux FAQ P: Estou a criar um programa em PHP que precisa de criar ficheiros temporários na /tmp e depois executá-los; a política do SELinux impede-me isso. O que tenho de fazer? R: Em primeiro lugar, nunca deverá permitir a um serviço do sistema executar qualquer coisa que consiga gerar. Isto dá ao atacante a possibilidade de enviar código malicioso para o servidor e depois executá-lo, o que é algo que se deseja evitar. Se precisa simplesmente de permitir que o seu programa crie ficheiros (não-executáveis), isto é possível. Posto isto, deverá evitar ter estas aplicações do sistema a criar ficheiros na pasta / tmp, dado que os utilizadores têm a tendência também de usar a pasta /tmp. Será melhorar criar uma outra pasta qualquer, pertencente ao processo 'apache' e permitir ao seu programa gravar nessa pasta. Deverá legendar a pasta com o nome httpd_sys_script_rw_t, o que permitirá que o Apache leia e grave ficheiros nessa pasta. A pasta poderá estar em qualquer local onde o Apache consiga aceder (mesmo na $HOME/public_html/). P: Estou a configurar a memória virtual para um ficheiro, mas estou a ver mensagens do AVC nos meus ficheiros de registo? R: Terá de identificar o ficheiro de memória virtual no SELinux, configurando o contexto do seu ficheiro como swapfile_t. chcon -t swapfile_t SWAPFILE P: Por favor explique-me as permissões relabelto/relabelfrom? R: For files, relabelfrom means "Can domain D relabel a file from (i.e. currently in) type T1?" and relabelto means "Can domain D relabel a file to type T2?", so both checks are applied upon a file relabeling, where T1 is the original type of the type and T2 is the new type specified by the program. Alguns documentos úteis a ler: • Object class and permission summary by Tresys http://tresys.com/selinux/ obj_perms_help.shtml • Implementing SELinux as an LSM technical report (describes permission checks on a perhook basis) http://www.nsa.gov/selinux/papers/module-abs.cfm. This is also available in the selinux-doc package (and more up-to-date there). • Integrating Flexible Support for Security Policies into the Linux Operating System - technical report (describes original design and implementation, including summary tables of classes, permissions, and what permission checks are applied to what system calls. It is not entirely up-to-date with current implementation, but a good resource nonetheless). http://www.nsa.gov/ selinux/papers/slinux-abs.cfm 1.4. Instalar o SELinux P: 24 Que sistemas de ficheiros posso usar para o SELinux? Notas e FAQ do SELinux R: O sistema de ficheiros deverá suportar as legendas xattr no espaço de nomes security.* correcto. Para além do ext2/ext3, o XFS passou recentemente a ter suporte para as legendas necessárias. Lembre-se que o suporte de SELinux para o XFS ficou com problemas no 'kernel' 2.6.14 e 2.6.15, mas foi corrigido (com uma solução alternativa) no 2.6.16. O seu 'kernel' deverá incluir esta correcção se optar por usar o XFS com o SELinux. P: Qual o impacto do SELinux na performance do sistema? R: Esta é uma variável difícil de medir, e é altamente dependente do ajuste e da utilização do sistema que está a correr o SELinux. Quando a performance foi medida da última vez, o impacto foi de cerca de 7%, para o código sem qualquer afinação. As mudanças subsequentes nos componentes de sistema, como a rede, são capazes de ter piorado alguns dos casos. A afinação de performance do SELinux continua a ser uma prioridade da equipa de desenvolvimento. P: Quais os tipos de instalações, aplicações e sistemas onde poderei considerar a instalação do SELinux? R: Inicialmente, o SELinux foi usado nos servidores públicos da Internet que executam algumas funções especializadas, onde é crítico maner uma segurança extremamente apertada. Os administradores normalmente retiram dessas máquinas todos os serviços e aplicações extra, correndo apenas um conjunto muito pequeno e bem definido de serviços. Um servidor Web ou um servidor de e-mail é um bom exemplo. Nestes servidores de topo, poderá apertar a política ao máximo. Quanto menor for o número de interacções com outros componentes, mais fácil será a aplicação de uma política. Um sistema dedicado que corra uma aplicação especializada de terceiros seria também um bom candidato. No futuro, o SELinux focar-se-á em todos os ambientes. Para atingir esse objectivo, a comunidade e os fornecedores independentes de 'software' (ISVs) deverão trabalhar com os programadores do SELinux para produzir as políticas necessárias. Até agora, foi criada uma política restrita muito apertada, assim como uma política-alvo que se foca em servidores específicos e vulneráveis. For more information about these policies, refer to What is SELinux policy? and What is the SELinux targeted policy?. P: Como é que o SELinux afecta as aplicações de terceiros? R: One goal of implementing a targeted SELinux policy in Fedora Core is to allow thirdparty applications to work without modification. The targeted policy is transparent to those unaddressed applications, and it falls back on standard Linux DAC security. These applications, however, will not be running in an extra-secure manner. You or another provider must write policy to protect these applications with MAC security. É impossível prever como todas as aplicações de terceiros se irão comportar com o SELinux, mesmo na execução da política-alvo. Será capaz de corrigir os problema que aparecem, mudando a política. Poderá descobrir que o SELinux expões questões de segurança desconhecidas anteriormente com a sua aplicação. Terá de modificar a aplicação para funcionar com o SELinux. 25 SELinux FAQ Note that with the addition of Policy Modules, it is now possible for third-party developers to include policy modules with their application. If you are a third-party developer or a packagemaintainer, please consider including a policy module in your package. This will allow you to secure the behavior of your application with the power of SELinux for any user installing your package. One important value that Fedora Core testers and users bring to the community is extensive testing of third-party applications. With that in mind, please bring your experiences to the appropriate mailing list, such as the fedora-selinux list, for discussion. For more information about that list, refer to http://www.redhat.com/mailman/listinfo/fedora-selinux-list/. 26