Transcrição do áudio
Todo o processo tem três descritores. Imagine descritor com um número na memória e tem uma posição de memória e que lá nessa posição você é muito ninja nesse assunto não vai querer complicar a vida dos meus colegas que estão começando. Então você imagina que tem um número, esse número aponta com uma posição de memória de alguma forma e nessa posição de memória então eu tenho um tipo de arquivo do tipo stream, ou seja, são binários passando sem uma forma e muito bem definida e que são utilizados, por exemplo, para que outro processo possa capturar, para ver o que possa naturalmente comunicar de um processo com outro e aí você vê a ideia do pipe, como isso aí. Legal? Você ligar o output de um processo, o que é o pipe? Pipe, grape, você não precisa ouvir, PS é o X, não fizemos isso, PS é o X, pipe, é isso, grape. O que é aquele pipe? Aquele pipe nós pegamos e conectamos o output do PS no input do input. Então, eu preciso de traduzir aqui né cara? Output saída, input e entrada. Então para eu você está pegando o descritor do PS, output e apontando para o descritor de input no grape. E aí tudo que o PS vai escrevendo de caracteres preste atenção, terminal é texto, texto, não é texto, mas nada é texto. Ah, para escrever o númerozinho, não é texto, beleza? E aí ele vai escrevendo isso, esses bits e um outro muito louco dentro do grape, fica lendo o input e fazendo alguma coisa com ele, filtrando no caso e jogando pro output. Então veja, o PS tem input que não é nada. Output e erro, o output do PS foi injetado no input do grape, foi e aí o grape leu com o aço infinito, feito um louco e fez seu trabalho e escreveu no output, o output naturalmente do grape. E aí? O que acontece? Aí é que vem a mágica, a mágica. O shell, ele vai pegar isso, esse output do grape e vai mandar pro meu terminal. Então, o output ele escreve na tela. Entenderam? Todo o procedimento? Não é assim que aconteceu. Então, o que que acontece? Você tem o input, o output e o erro. O que é o erro? Todo erro que vai tendo, nós vamos escrevendo no descritor de erro. Beleza? Galera, vou ter que dar um espio. Desculpa, estou muito doente. Eu gravo essas coisas de madrugada. Então olha só, os erros vão acontecendo, nós vamos empilhando por isso que é o erro, meu amigo. Tá brincando? Tá brincando? Você programa do Java. A tal da stack trace de erro? Você programa do Python. A stack trace de erro? Nós vamos empilhando erros no descritor de erro. E aí o seu accept ou seu catch ele leia esse erro. Eu posso limpar o erro antes? Pode! Eu posso escrever no error? Pode! Eu posso fazer o que eu quiser no meu Linux? Pode! Provavelmente eu tenho coragueia. Eu tenho que trazer o treco pra me ajudar da aula. Não sei se vocês conhecem, tem tico, teco e treco. Procurem mundo carimbau. Vamos lá. Então zero é o descritor de input. Eu vou lembrar pra você que é um número. Então zero vai apontar para o endereço de memória que é o input. Nós vulgarmente conhecemos, chamamos de STJ. Geralmente abreviado como este. O descritor de input 1 é o output. STD. E o 2 é o STD. Beleza? É mom. Mas tem que sempre você tem que saber isso. Na verdade posso te falar a verdade? Acho que 99% dos caras não sabem essa bosta aí e são formados em infraestrutura. Tô desse paranaway que eu tô explicando pra vocês. Por quê? Meu livro não é o livro básico de programação. Sabe onde os caras começam essa explicação aqui? Os caras não tem essa explicação que eu passei pra vocês. Eles começam aqui. Começa aqui. No maior, no menor. Então vamos aprender a usar isso aqui. Imagine que você tem um comando e que você pode mandar ele para um arquivo. Então você poderia mandar ele para um outro programa, no input de um outro programa. Ou usar um pipe. Você pode carregar no STD um arquivo. Vamos lá. WC traço L. Não é o 1. Meu próximo livro eu vou reescrever esse livro todo. Eu vou trocar essa sintax aqui. Essa letra. Provavelmente eu vou usar o corriêniu. Então vamos lá. Nós temos um arquivo. WC. WC. Traço L de contar o número de linhas. E aí eu vou injetar o ponto para script. Eu vou pegar o ponto script e injetar no WC traço L. Ele me falou que tem 6 linhas lá dentro. Pegou a jogada. O que eu injetei esse aqui. Cara. E se eu te contar que o laço de repetição é um comando e um programa? Então eu consigo injetar isso aqui num laço de repetição. É muito louco cara. Poderia jogar os quadros. Muito louco cara. E quando eu quero fazer um input e pegar o resultado e jogar nesse output assim. E quando eu quero pegar somente o erro. Eu quero pegar somente o erro. Comando o erro. Eu peço somente o erro. Aqui é o 2. Os caras decoram. Mas você não decora. Porque você tem um STD em primeiro. Saída seria em segundo. E terceiro seria o erro. Só que começa de zero. Então só pode ser zero, um e dois. Entenda a coreba? Pense você programador cara. Ah eu quero escrever desse cara aqui. A saída. E também eu quero que junta com ele. Que junta com o descrito 1. Junta descrito 2 pra mim fazendo. Aí ele vai colocar o erro e o output no mesmo arquivo de um. Bom eu quero apendar. O arquivo já existia. E eu quero só injetar. Lá no final. Então você utiliza 2. Ele vai apendar. Beleza? Eu quero fazer uma output. Ai caralho. Como eu posso apagar pra vocês? Vamos lá. O lino que ele é auditável. Certo? Então tem uma forma de você conseguir apagar as provas e os hackers fazem. Eu acho que você não é hacker nem eu nem ninguém aqui quer ser essa porra. Certo? Então como que nós apagamos o rastro? Mandando. Eu poderia ter colocado não só o output. E poderia ter colocado o erro também. Para dentro do devnull cara. O que é o devnull? Devnull. Ele é um dos arquivos clássicos. E ele é um swing. Um arquivo de swing binário. E que tem um processo que fica limpando ele. Então tudo que você vai escrevendo ele, ele é binariamente limpado. Não fica registro no jornal link. Não fica registro em lugar nenhum. Entenderam? Ele é um arquivo em memória inclusive. Não fica nem no disco. Que vem memória. E que vai sendo limpo. O espaço de memória que é limpo o tempo inteiro. Exalocado o tempo inteiro. Cara, é assim que os hackers fazem para esconder. Porque muitos desses output, esses errors, são jogados no tema de logger do Linux. O Linux tem um sistema, uma camada, logger. Em que ele registra tudo cara. Para a auditoria. E sim cara. Erros podem ir para a auditoria. Podem ser capturados pelo serem personagens para a auditoria. Outputs podem ser enviados para a auditoria. Pode não né? O normal é que o sistema personal normalmente ele envia para esses arquivos de logger. Essa é a plataforma de logger. E que isso é possivelmente auditado. Dos incidentes de segurança que tiveram invasão. Que eu participei lá ajudando, trabalhando junto com a equipe toda. Porque trabalha assim, trabalha só assim nesse negócio. Ou seja dita cara, todas as vezes nós vamos nos logs do sistema operacional. Todas as vezes nós vamos no logger. Nós capturamos o logger, jogamos, não poderia falar tecnologia. Mas vamos colocar aqui uma somente gray log. Joga no gray log. É um dos tecnologias, eu pimento que eu dou uma aula de segurança mais lá no curso HAC. E aí eu falo bastante sobre essa questão de onde ficam esses logs para a auditoria. Legal? Até mais. Tchau.