AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 409492
Accepted
thrig
thrig
Asked: 2017-12-08 06:55:51 +0800 CST2017-12-08 06:55:51 +0800 CST 2017-12-08 06:55:51 +0800 CST

quais são as desvantagens de dividir /proc/pid/stat por espaço em branco?

  • 772

Quais são as desvantagens de dividir /proc/pid/statno Linux por espaço em branco? Por exemplo, usando bashum pode acessar a terceira coluna via

$ cat /proc/$$/stat
14198 (bash) S 14195 14198 14198 34816 ...
$ x=($(< /proc/$$/stat)); echo ${x[2]}
S
$ 

e tudo parece bem?

linux proc
  • 2 2 respostas
  • 2089 Views

2 respostas

  • Voted
  1. thrig
    2017-12-08T06:58:27+08:002017-12-08T06:58:27+08:00

    O principal problema é que o caractere de espaço ( 0x20) é usado tanto para o delimitador entre registros quanto também pode aparecer dentro de um registro; um usuário local deve ser capaz de definir o nome do processo

    $ perl -e '$0="like this"; sleep 999' &
    [1] 14343
    $ 
    

    então a divisão de análise por espaço em branco falhará

    $ x=($(< /proc/14343/stat)); echo ${x[2]}
    this)
    $ 
    

    pois o nome do comando contém um espaço.

    $ cat /proc/14343/stat
    14343 (like this) S 14198 14343 ...
    $ 
    

    Quão ruim isso poderia ser? De acordo com proc(5)o "terminal de controle do processo" é interessante

              tty_nr %d   (7) The controlling terminal of the  process.   (The
                          minor  device number is contained in the combination
                          of bits 31 to 20 and 7 to 0; the major device number
                          is in bits 15 to 8.)
    

    portanto, se um processo usar indevidamente as informações do terminal de controle analisadas incorretamente /proc/pid/statporque alguém alterou essas informações, bem, você pode obter uma vulnerabilidade de segurança .

    A análise é adicionalmente complicada pelo fato de que um )pode ser colocado no nome do processo embora haja um limite de 15 caracteres

    $ perl -e '$0="lisp) a b c d e f g h i"; sleep 999' &
    [4] 14440
    $ cat /proc/14493/stat
    14493 (lisp) a b c d e) S 14198 14493 14198 34816 ...
    $ 
    

    Idéias para analisar esta verruga de uma interface

    Como o nome do processo pode variar em algum lugar entre a string vazia e 15 bytes de quase qualquer conteúdo

    1234 () S ...
    4321 (xxxxxxxxxxxxxxx) S ...
    

    uma ideia seria dividir no primeiro espaço para obter o pid e, em seguida, trabalhar de trás para frente a partir do final dessa string para encontrar o primeiro ); o material antes do primeiro )da direita deve ser o nome do processo e à esquerda os campos regulares. Testes de unidade para o código seriam altamente aconselháveis...

    • 4
  2. Best Answer
    ilkkachu
    2017-12-08T08:31:42+08:002017-12-08T08:31:42+08:00

    Se você precisa pensar sobre isso, por que não apenas ler /proc/$pid/status? Ele fornece as mesmas informações em linhas bem rotuladas e escapa de novas linhas e barras invertidas que aparecem no nome do processo:

    $ perl -e '$0="foo\nbar\n"; system "head -3 /proc/$$/status";'
    Name:   foo\nbar\n
    Umask:  0022
    State:  S (sleeping)
    
    • 3

relate perguntas

  • Existe uma maneira de fazer ls mostrar arquivos ocultos apenas para determinados diretórios?

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • Necessidade de algumas chamadas de sistema

  • astyle não altera a formatação do arquivo de origem

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Matriz JSON para bash variáveis ​​usando jq

    • 4 respostas
  • Marko Smith

    A data pode formatar a hora atual para o fuso horário GMT? [duplicado]

    • 2 respostas
  • Marko Smith

    bash + lê variáveis ​​e valores do arquivo pelo script bash

    • 4 respostas
  • Marko Smith

    Como posso copiar um diretório e renomeá-lo no mesmo comando?

    • 4 respostas
  • Marko Smith

    conexão ssh. Conexão X11 rejeitada devido a autenticação incorreta

    • 3 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Marko Smith

    comando systemctl não funciona no RHEL 6

    • 3 respostas
  • Marko Smith

    rsync porta 22 e 873 uso

    • 2 respostas
  • Marko Smith

    snap /dev/loop em 100% de utilização -- sem espaço livre

    • 1 respostas
  • Marko Smith

    chave de impressão jq e valor para todos no subobjeto

    • 2 respostas
  • Martin Hope
    EHerman Matriz JSON para bash variáveis ​​usando jq 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux A data pode formatar a hora atual para o fuso horário GMT? [duplicado] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC Como posso copiar um diretório e renomeá-lo no mesmo comando? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve Como as permissões de arquivo funcionam para o usuário "root"? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe Altere o editor padrão para vim para _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey Como baixar o pacote não instalá-lo com o comando apt-get? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao Por que os diretórios /home, /usr, /var, etc. têm o mesmo número de inode (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg — o comando list-keys gera uid [ desconhecido ] depois de importar a chave privada para uma instalação limpa 2017-11-26 18:26:02 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve