Saturday 19 August 2017

Setuid Binary Options


Mount Opções para sistemas de arquivos NFS O texto subseqüente lista algumas das opções que podem seguir a opção - o quando você está montando um sistema de arquivos NFS. Para obter uma lista completa de opções, consulte a página man do mountnfs (1M). Essas opções podem ser usadas para selecionar o comportamento de repetição se uma montagem falhar. A opção bg faz com que as tentativas de montagem sejam executadas em segundo plano. A opção fg faz com que a tentativa de montagem seja executada em primeiro plano. O padrão é fg. Que é a melhor seleção para sistemas de arquivos que devem estar disponíveis. Essa opção evita o processamento posterior até que a montagem seja concluída. Bg é uma boa seleção para sistemas de arquivos não críticos porque o cliente pode fazer outro processamento enquanto espera que o pedido de montagem seja concluído. Essa opção melhora o desempenho de grandes transferências seqüenciais de dados. Os dados são copiados diretamente para um buffer de usuário. Nenhum cache é executado no kernel no cliente. Esta opção está desativada por padrão. Anteriormente, todas as solicitações de gravação foram serializadas pelo cliente NFS eo servidor NFS. O cliente NFS foi modificado para permitir que um aplicativo emita escritas simultâneas, bem como leituras e gravações simultâneas, em um único arquivo. Você pode habilitar essa funcionalidade no cliente usando a opção de montagem forçada. Quando você usa essa opção, você está habilitando essa funcionalidade para todos os arquivos dentro do sistema de arquivos montado. Você também pode habilitar essa funcionalidade em um único arquivo no cliente usando a interface directio (). A menos que esta funcionalidade tenha sido activada, escreve para ficheiros são serializados. Além disso, se estiverem ocorrendo gravações simultâneas ou leituras e gravações simultâneas, a semântica POSIX não estará mais sendo suportada para esse arquivo. Para obter um exemplo de como usar essa opção, consulte Usando o comando mount. Com esta opção, você pode acessar arquivos que são maiores que 2 Gbytes em um servidor que está executando a versão Solaris 2.6. Se um arquivo grande pode ser acessado somente pode ser controlado no servidor, portanto, esta opção é silenciosamente ignorada nas montagens NFS versão 3. Começando com a versão 2.6, por padrão, todos os sistemas de arquivos UFS são montados com arquivos grandes. Para montagens que usam o protocolo NFS versão 2, a opção largefiles faz com que a montagem falhe com um erro. Esta opção para montagens UFS garante que nenhum arquivo grande pode existir no sistema de arquivos. Consulte a página man do mountufs (1M). Como a existência de arquivos grandes só pode ser controlada no servidor NFS, nenhuma opção para nolargefiles existe ao usar montagens NFS. As tentativas de montar um sistema de arquivos NFS usando esta opção são rejeitadas com um erro. A partir da versão Solaris 10, a opção nosuid é equivalente a especificar a opção nodevices com a opção nosetuid. Quando a opção nodevices é especificada, a abertura de arquivos especiais do dispositivo no sistema de arquivos montado não é permitida. Quando a opção nosetuid é especificada, o bit setuid eo bit setgid em arquivos binários que estão localizados no sistema de arquivos são ignorados. Os processos são executados com os privilégios do usuário que executa o arquivo binário. A opção suid é o equivalente a especificar a opção devices com a opção setuid. Quando a opção devices é especificada, a abertura de arquivos especiais do dispositivo no sistema de arquivos montado é permitida. Quando a opção setuid é especificada, o bit setuid eo bit setgid em arquivos binários que estão localizados no sistema de arquivos são honrados pelo kernel. Se nenhuma opção for especificada, a opção padrão é suid. Que fornece o comportamento padrão de especificar a opção de dispositivos com a opção setuid. A tabela a seguir descreve o efeito da combinação de nosuid ou suid com dispositivos ou nodevices. E setuid ou nosetuid. Note que em cada combinação de opções, a opção mais restritiva determina o comportamento. Comportamento das opções combinadas A opção nosuid fornece segurança adicional para clientes NFS que acessam servidores potencialmente não confiáveis. A montagem de sistemas de arquivos remotos com essa opção reduz a chance de escalonamento de privilégios através da importação de dispositivos não confiáveis ​​ou da importação de arquivos binários setuid não confiáveis. Todas estas opções estão disponíveis em todos os sistemas de arquivos Solaris. Essa opção força o uso do identificador de arquivo público ao entrar em contato com o servidor NFS. Se o identificador de arquivo público é suportado pelo servidor, a operação de montagem é mais rápida porque o protocolo MOUNT não é usado. Além disso, como o protocolo MOUNT não é usado, a opção pública permite que a montagem ocorra através de um firewall. As opções - rw e - ro indicam se um sistema de arquivos deve ser montado como read-write ou read-only. O padrão é read-write, que é a opção apropriada para diretórios remotos remotos, diretórios de spooling de mensagens ou outros sistemas de arquivos que precisam ser alterados pelos usuários. A opção somente leitura é apropriada para diretórios que não devem ser alterados pelos usuários. Por exemplo, cópias compartilhadas das páginas man não devem ser graváveis ​​pelos usuários. Você pode usar essa opção para especificar o mecanismo de autenticação a ser usado durante a transação de montagem. O valor para o modo pode ser um dos seguintes. Use o krb5 para o serviço de autenticação Kerberos versão 5. Use krb5i para Kerberos versão 5 com integridade. Use krb5p para Kerberos versão 5 com privacidade. Use nenhum para nenhuma autenticação. Use dh para autenticação Diffie-Hellman (DH). Use sys para autenticação UNIX padrão. Os modos também são definidos em /etc/nfssec. conf. Um sistema de arquivos NFS que é montado com a opção soft retorna um erro se o servidor não responder. A opção hard faz com que o mount continue a tentar novamente até que o servidor responda. O padrão é difícil. Que deve ser usado para a maioria dos sistemas de arquivos. Aplicativos com freqüência não verificar valores de retorno de soft-montado sistemas de arquivos, que pode fazer o aplicativo falhar ou pode levar a arquivos corrompidos. Se o aplicativo não verificar os valores de retorno, problemas de roteamento e outras condições ainda podem confundir o aplicativo ou levar a corrupção de arquivo se a opção de software é usada. Na maioria das situações, a opção soft não deve ser usada. Se um sistema de arquivos for montado usando a opção hard e ficar indisponível, um aplicativo que usa esse sistema de arquivos trava até que o sistema de arquivos fique disponível. O bit de permissão setuid diz ao Linux para executar um programa com o ID do usuário efetivo do proprietário em vez de O executor: No entanto, isso só se aplica a scripts de shell executáveis ​​ignorar o bit setuid: Devido à maior probabilidade de falhas de segurança, muitos sistemas operacionais ignoram o atributo setuid quando aplicados a scripts de shell executável. Supondo que estou disposto a aceitar esses riscos, há alguma maneira de dizer ao Linux para tratar o bit setuid o mesmo em scripts de shell como ele faz em executáveis ​​Se não, existe uma solução comum para este problema Minha solução atual é adicionar uma entrada de sudoers Para permitir que todos executem um determinado script como o usuário que eu quero executá-lo como, com NOPASSWD para evitar o prompt de senha. As principais desvantagens para isso é a necessidade de uma entrada de sudoers cada vez que eu quero fazer isso, ea necessidade de o chamador para sudo algum script em vez de apenas algum script pediu 12 de agosto às 2:20 Linux ignora o bit setuid Em todos os executáveis ​​interpretados (ou seja, executáveis ​​começando com uma linha). O FAQ comp. unix. questions explica os problemas de segurança com os scripts shell do setuid. Estes problemas são de dois tipos: shebang-relacionados e shell-relacionados eu entrar em mais detalhes abaixo. Se você não se preocupa com a segurança e deseja permitir scripts setuid, no Linux, você precisará corrigir o kernel. A partir de kernels 3.x, acho que você precisa adicionar uma chamada para installexeccreds na função loadscript, antes da chamada para openexec. Mas eu havent testado. Setuid shebang Existe uma condição de corrida inerente à forma como shebang () é normalmente implementado: O kernel abre o executável e descobre que ele começa com. O kernel fecha o executável e abre o interpretador. O kernel insere o caminho para o script para a lista de argumentos (como argv1) e executa o interpretador. Se os scripts setuid forem permitidos com esta implementação, um invasor pode invocar um script arbitrário criando um link simbólico para um script setuid existente, executando-o e organizando a alteração do link após o kernel ter executado o passo 1 e antes que o interpretador chegue ao redor Abrindo seu primeiro argumento. Por esta razão, a maioria dos unices ignorar o bit setuid quando eles detectam um shebang. Uma maneira de proteger essa implementação seria que o kernel bloqueie o arquivo de script até que o interpretador o tenha aberto (observe que isso deve impedir não apenas desassociar ou substituir o arquivo, mas também renomear qualquer diretório no caminho). Mas os sistemas unix tendem a se esquivar de bloqueios obrigatórios, e links simbólicos faria um bloqueio correto recurso especialmente difícil e invasivo. Eu não acho que alguém faz isso dessa maneira. Alguns sistemas unix (principalmente OpenBSD, NetBSD e Mac OS X, todos os quais requerem uma configuração de kernel para serem ativados) implementam o setub seguro usando uma característica adicional: o caminho / dev / fd / N refere-se ao arquivo já aberto no arquivo Descritor N (assim, opening / dev / fd / N é aproximadamente equivalente a dup (N)). Muitos sistemas unix (incluindo Linux) possuem / dev / fd mas não setuid scripts. O kernel abre o executável e descobre que ele começa com. Vamos dizer que o descritor de arquivo para o executável é 3. O kernel abre o interpretador. O kernel insere / dev / fd / 3 a lista de argumentos (como argv1) e executa o interpretador. Sven Maschecks shebang página tem um monte de informações sobre shebang across unices, incluindo o suporte a setuid. Interpretadores do Setuid Vamos assumir que você conseguiu fazer o seu programa ser executado como root, porque seu sistema operacional suporta o setuid shebang ou porque você usou um wrapper binário nativo (como o sudo). Você abriu um buraco de segurança Talvez. O problema aqui não é sobre interpretados vs programas compilados. O problema é se o sistema de tempo de execução se comporta com segurança se for executado com privilégios. Qualquer executável binário nativo vinculado dinamicamente é de alguma forma interpretado pelo carregador dinâmico (por exemplo, /lib/ld. so), que carrega as bibliotecas dinâmicas requeridas pelo programa. Em muitos unices, você pode configurar o caminho de busca para bibliotecas dinâmicas através do ambiente (LDLIBRARYPATH é um nome comum para a variável de ambiente) e até mesmo carregar bibliotecas adicionais em todos os binários executados (LDPRELOAD). O invocador do programa pode executar código arbitrário nesse contexto de programas colocando um libc. so especialmente criado em LDLIBRARYPATH (entre outras táticas). Todos os sistemas sadios ignoram as variáveis ​​LD em executáveis ​​setuid. Em shells como sh, csh e derivados, as variáveis ​​de ambiente tornam-se automaticamente parâmetros shell. Através de parâmetros como PATH. IFS. E muitos mais, o invocador do script tem muitas oportunidades para executar código arbitrário no contexto do shell scripts. Alguns shells definem essas variáveis ​​como padrões saneados se detectarem que o script foi invocado com privilégios, mas não sei se existe alguma implementação em particular que confio. A maioria dos ambientes de tempo de execução (sejam eles nativos, bytecode ou interpretados) possuem características semelhantes. Poucos tomam precauções especiais em executáveis ​​setuid, embora aqueles que executam o código nativo muitas vezes não fazem nada mais sofisticado do que o link dinâmico (que não toma precauções). Perl é uma exceção notável. Ele suporta explicitamente scripts setuid de forma segura. Na verdade, seu script pode executar setuid mesmo se seu sistema operacional ignorou o bit setuid em scripts. Isso ocorre porque o perl é fornecido com um auxiliar de raiz setuid que executa as verificações necessárias e reinvoca o interpretador nos scripts desejados com os privilégios desejados. Isso é explicado no manual perlsec. Costumava ser que os scripts peru do setuid precisassem / usr / bin / suidperl - wT em vez de / usr / bin / perl - wT. Mas na maioria dos sistemas modernos, / usr / bin / perl - wT é suficiente. Observe que usar um wrapper binário nativo não faz nada em si para evitar esses problemas. Na verdade, isso pode piorar a situação. Porque pode impedir que seu ambiente de tempo de execução detecte que ele é invocado com privilégios e ignorando sua configuração de tempo de execução. Um wrapper binário nativo pode tornar um script shell seguro se o wrapper desinfectar o ambiente. O script deve tomar cuidado para não fazer suposições demais (por exemplo, sobre o diretório atual), mas isso vai. Você pode usar o sudo para este desde que sua configuração para desinfetar o ambiente. As variáveis ​​da lista negra são propensas a erros, por isso sempre lista branca. Com o sudo, certifique-se de que a opção envreset está ativada, que setenv está desativado e que envfile e envkeep contêm apenas variáveis ​​inócuas. Setuid shebang é inseguro, mas geralmente ignorado. Se você executar um programa com privilégios (através de sudo ou setuid), escreva código nativo ou perl, ou inicie o programa com um wrapper que sanitizes o ambiente (como sudo com a opção envreset). Esta discussão aplica-se igualmente se você substituir setgid por setuid. Na verdade, o suidperl foi removido a partir de perl 5,11 (5,12 estável): perl5110delta: gt quotsuidperlquot foi removido. Ele foi usado para fornecer um mecanismo para emular os bits de permissão do setuid em sistemas que não o suportam adequadamente. Perl5120delta: gt quotsuidperlquot já não faz parte do Perl. Ele foi usado para fornecer um mecanismo para emular os bits de permissão do setuid em sistemas que não o suportam adequadamente. Ndash Randy Stauner Jul 14 11 at 17:40 Note também esta linha de perl 5.6.1 docs (há quase uma década). Perl561delta: gt Observe que suidperl não é construído nem instalado por padrão em qualquer versão recente do perl. O uso de suidperl é altamente desencorajado. Se você acha que precisa dele, tente alternativas como sudo primeiro. Veja cortesã / sudo. Ndash Randy Stauner Jul 14 11 at 17:45 Eu me sinto mal que ele subitamente recebendo downvoted para isso - eu disse especificamente que eu queria ouvir versões inseguras também, e eu estava imaginando um executável que levou um argumento shell script quando eu disse isso . Obviamente, ele é extremamente inseguro, mas eu queria saber quais possibilidades existem. Se você quiser evitar chamar sudo somescript você pode apenas fazer: programas SETUID precisam ser projetados com extremo cuidado como eles funcionam com Privilégios de root e usuários têm grande controle sobre eles. Eles precisam de sanidade-verificar tudo. Você não pode fazê-lo com scripts porque: Os escudos são grandes pedaços de software que interagem fortemente com o usuário. É quase impossível verificar a sanidade tudo especialmente porque a maior parte do código não se destina a ser executado nesse modo. Scripts são uma solução na maior parte quickndirty e geralmente não são preparados com tal cuidado que eles iriam permitir setuid. Eles têm muitos recursos potencialmente perigosos. Eles dependem fortemente de outros programas. Não é suficiente que o shell foi verificado. Sed. Awk. Etc, teria de ser verificado também Tenha em atenção que o sudo fornece alguma sanidade de verificação, mas não é suficiente verificar cada linha em seu próprio código. Como última nota: considere o uso de recursos. Eles permitem que você dê a um processo execução como um usuário privilégios especiais que normalmente exigem privilégios de root. No entanto, por exemplo, enquanto o ping precisa de manipular a rede, ele não precisa ter acesso a arquivos. Não tenho certeza no entanto se eles são herdados. Respondeu Aug 17 10 at 11:04 Você pode criar um alias para sudo o nome do script. Claro, isso é ainda mais trabalho a configurar, uma vez que você também tem que configurar um alias, também, mas ele evita que você tenha que digitar sudo. Mas se você não se importar com os riscos de segurança horríveis, use um shell setuid como o interpretador para o script shell. Não sei se thatll trabalho para você, mas eu acho que poderia. Deixe-me afirmar que eu aconselho contra realmente fazer isso, no entanto. Im apenas mencionando-o para finalidades educacionais -) respondido agosto 12 10 em 6:38 trabalhará. Horrivelmente como você afirmou. Bit SETUID permite a execução com o direito proprietário. O shell Setuid (a menos que tenha sido projetado para funcionar com o setuid) será executado como root para qualquer usuário. I. e. Qualquer um pode executar rm-rf 47 (e outros comandos da série DON39T DO IT AT HOME). Ndash Maciej Piechotka Aug 17 10 às 10:52 MaciejPiechotka por DON39T FAZER EM CASA você quer dizer Sinta-se livre para fazer isso no trabalho :) ndash peterph Feb 27 14 às 21:22 super - r reqpath comando args Super permite que usuários especificados para executar scripts (Ou outros comandos) como se fossem raiz ou pode definir o uid, gid e / ou grupos suplementares em uma base por comando antes de executar o comando. Pretende-se ser uma alternativa segura para fazer scripts setuid root. Super também permite que usuários comuns forneçam comandos para execução por outros, estes executam com o uid, gid e grupos do usuário que oferece o comando. Super consulta um arquivo super. tab para ver se o usuário tem permissão para executar o comando solicitado. Se a permissão for concedida, o super irá exec pgm args, onde pgm é o programa que está associado a este comando. (A raiz é permitida a execução por defeito, mas ainda pode ser negada se uma regra exclui a raiz. Usuários comuns são proibidos execução por padrão.) Se o comando é um link simbólico (ou link rígido, também) para o super programa, em seguida, digitando comando args É equivalente a digitar args de comando super (O comando não deve ser super ou super não reconhecerá que ele está sendo invocado por meio de um link.) Estou tentando usar LDPRELOAD para pré-carregar uma biblioteca com um aplicativo que tem permissões de setuid. Tentei LDPRELOAD no início, e parecia que estava sendo ignorado com o setuid binário, embora ele estava funcionando quando eu tentei com outros como ls. Dir etc. Da documentação de LDPRELOAD: Eu tentei colocar a biblioteca em / usr / lib. / Usr / local / lib. E / usr / lib64 com permissões setuid conforme esta documentação acima, mas ainda não parece funcionar. Se eu não der LDPRELOAD um caminho no caso em que eu tenho a biblioteca no padrão dirs com setuid, não consigo encontrar a biblioteca. Se eu der o caminho, ele não faz nada. O binário setuid é um binário de permissões de raiz que é executado em um shell de usuário não-root. Quaisquer pensamentos Não tenho certeza se estou faltando um caminho, uma variável de ambiente, ou estou entendendo mal a documentação acima. Editar. Permissões conforme solicitado são: Se você estiver usando SELinux, isso pode ser devido a ele. Um dos vetores auxiliares de ELF que suporta glibc é ATSECURE. Este parâmetro particular (que é 0 por padrão ou 1) informa o vinculador dinâmico ELF para desmarcar várias variáveis ​​de ambiente que são consideradas potencialmente prejudiciais para o seu sistema. Uma delas é a LDPRELOAD. Normalmente, esse saneamento ambiental é feito quando um aplicativo setuid / setgid é chamado (para evitar as vulnerabilidades óbvias). O SELinux também aprimorou esse saneamento sempre que um aplicativo está disparando uma transição de domínio no SELinux (diga sysadmt para mozillat através de um binário chamado moz.) SELinux define o sinalizador ATSECURE para o aplicativo carregado (no exemplo, mozilla / firefox). A permissão noatsecure desabilita a atividade de saneamento do ambiente para uma transição específica. Você pode fazer isso através da seguinte instrução allow (como seria aplicável no exemplo acima): respondeu Feb 11 12 at 9:50 Is selinux security enhanced linux ou suse enterprise Estou executando o último. O que você mencionou ainda se aplicam a suse enterprise ndash Mark Lobo Feb 13 12 at 18:49 De acordo com este SELinux é uma opção no SUSE Enterprise começando com 11.1. Se você não está usando, no entanto, minha resposta não se aplica. Ndash Michael Foukarakis Feb 13 12 em 19:02

No comments:

Post a Comment