{"id":335,"date":"2015-08-29T11:22:02","date_gmt":"2015-08-29T14:22:02","guid":{"rendered":"http:\/\/www.henriquereis.com\/?p=335"},"modified":"2015-08-30T14:18:10","modified_gmt":"2015-08-30T17:18:10","slug":"seguranca-ssh-verificacao-em-duas-etapas","status":"publish","type":"post","link":"https:\/\/henriquereis.com\/blog\/seguranca-ssh-verificacao-em-duas-etapas\/","title":{"rendered":"Seguran\u00e7a: SSH &#8211; Verifica\u00e7\u00e3o em duas etapas"},"content":{"rendered":"<p>A verifica\u00e7\u00e3o em duas etapas (two-factors) \u00e9 a tecnologia que nos permite adicionar uma camada de seguran\u00e7a no processo de autentica\u00e7\u00e3o convencional (usu\u00e1rio e senha).<br \/>\n\u00c9 recomend\u00e1vel usar sempre que \u00e9 poss\u00edvel, mas e o SSH, tem alguma coisa voltada para isso? N\u00e3o sei, mas podemos criar algo n\u00f3s mesmos para isso.<\/p>\n<p>O Linux nos d\u00e1 o poder de fazer as configura\u00e7\u00f5es necess\u00e1rias.<\/p>\n<p>Ent\u00e3o vamos a ela.<\/p>\n<p>Primeiro passo voc\u00ea precisa alterar o bash do seu usu\u00e1rio, os comandos a seguir precisam ser executados como root.<\/p>\n<p>Edite o arquivo &#8220;\/etc\/passwd&#8221;, quando encontrar seu usu\u00e1rio, altere o bash dele<\/p>\n<p>exemplo:<\/p>\n<p>leandro:x:1000:1000:Leandro Henrique:\/home\/leandro:\/bin\/bash<br \/>\naltere para:<br \/>\nleandro:x:1000:1000:Leandro Henrique:\/home\/leandro:\/usr\/local\/token<\/p>\n<p>Feito isso hora de criar nosso arquivo &#8220;\/usr\/local\/token&#8221; para fazer a segunda verifica\u00e7\u00e3o<\/p>\n<p>exemplo:<\/p>\n<p><code><br \/>\n#!\/bin\/bash<br \/>\necho -e \"\\nControl + c acionado.\\n\"<br \/>\ncontrol_c () {<br \/>\n#pkill -kill -u $USUARIO<br \/>\nexit 0;<br \/>\n}<\/p>\n<p>trap control_c INT HUP TERM<\/p>\n<p>USUARIO=`whoami`;<br \/>\n#Aqui voc\u00ea coloca uma URL para enviar para voc\u00ea um SMS,<br \/>\n#ou um email.<br \/>\n#Claro se for SMS voc\u00ea precisa de ter um gateway que fa\u00e7a isso<br \/>\n#existem outros meios, mas este artigo n\u00e3o tem objetivo de<br \/>\n#explorar isso.<br \/>\nVALID_TOKEN=`curl http:\/\/asterisk.reis\/api\/sms\/sendtoken\/6`<\/p>\n<p>echo \"Please enter the token:\"<br \/>\nread TOKEN;<\/p>\n<p>if [ \"$TOKEN\" == \"$VALID_TOKEN\" ]; then<br \/>\necho \"You have access!\"<br \/>\n\/bin\/bash<br \/>\nexit;<br \/>\nfi<\/p>\n<p>echo \"ACCESS DENIED!\"<br \/>\n#pkill -kill -u $USUARIO<br \/>\nexit;<br \/>\n<\/code><\/p>\n<p>O que o c\u00f3digo a cima faz?<br \/>\nPrimeiro e disse que o script vai ser executado pelo bash.<br \/>\nCria uma fun\u00e7\u00e3o para prevenir que caso o usu\u00e1rio pressione ctrl+c, ao inv\u00e9s de cancelar o script e ir para o prompt de comando, saia do bash e finalize a conex\u00e3o SSH, ou caso prefira, pode remover o coment\u00e1rio da linha &#8220;#pkill -kill -u $USUARIO&#8221; e todas as sess\u00f5es com este usu\u00e1rio ser\u00e3o fechadas (meio brusco, mas fica a crit\u00e9rio de cada um), tem suas vantagens e desvantagens vale a voc\u00ea analisar o que \u00e9 melhor para voc\u00ea.<\/p>\n<p>Depois ele pega gera um token usando um servi\u00e7o externo que este artigo n\u00e3o contempla, cabe a voc\u00ea desenvolver ou utilizar algo pronto por ai para enviar um SMS ou email para voc\u00ea.<\/p>\n<p>Em seguida ele solicita ao usu\u00e1rio que digita o valor do token, que foi enviado por SMS ou EMAIL ou qualquer meio que voc\u00ea utilizar.<br \/>\nEnt\u00e3o verifica se os tokens batem, se batem ok! Ele passa, sen\u00e3o sai do bash, finaliza.<\/p>\n<p>Bom temos dois problemas ai, primeiro \u00e9 que seu gateway pode falhar, segundo que voc\u00ea pode ter acesso ao terminal fisicamente e ficaria incomodo voc\u00ea com acesso f\u00edsico ter que esperar sempre receber o token para poder acessar sua m\u00e1quina toda vez que abrir um terminal.<\/p>\n<p>Ent\u00e3o vamos a um script que verifica se ouve erro, vamos considerar que o token seja apenas de 6 caracteres se o CURL devolver algo maior que isso \u00e9 porque deu algum erro.<\/p>\n<p>O c\u00f3digo completo de como fica est\u00e1 abaixo, e no v\u00eddeo mais detalhes da utiliza\u00e7\u00e3o desse processo.<\/p>\n<p><code><br \/>\n#!\/bin\/bash<br \/>\ncontrol_c () {<br \/>\necho -e \"\\nControl + c acionado.\\n\"<br \/>\n#pkill -kill -u $USUARIO<br \/>\nexit 0;<br \/>\n}<\/p>\n<p>trap control_c INT HUP TERM<\/p>\n<p>if [[ $(who am i) =~ \\((\\:0\\))$ ]]; then<br \/>\n\/bin\/bash<br \/>\nexit;<br \/>\nfi<\/p>\n<p>USUARIO=`whoami`;<br \/>\nSECRET=\"123123\";<\/p>\n<p>VALID_TOKEN=\"15\";<br \/>\n#VALID_TOKEN=`curl http:\/\/asterisk.reis\/api\/sms\/sendtoken\/6`<\/p>\n<p>TAMANHO=${#VALID_TOKEN};<br \/>\nNO_TOKEN=\"-\";<\/p>\n<p>if [[ \"$VALID_TOKEN\" == \"$NO_TOKEN\" || \"$TAMANHO\" -gt 6 ]]; then<br \/>\necho \"Failed to send the token\";<br \/>\nstty -echo;<br \/>\nVALID_TOKEN=$SECRET;<br \/>\nfi<\/p>\n<p>echo \"Please enter the token:\"<br \/>\nread TOKEN;<br \/>\nstty echo;<\/p>\n<p>if [ \"$TOKEN\" == \"secret\" ]; then<br \/>\nVALID_TOKEN=$SECRET;<br \/>\necho \"Please enter the password:\"<br \/>\nstty -echo;<br \/>\nread TOKEN;<br \/>\nstty echo;<br \/>\nfi<\/p>\n<p>if [ \"$TOKEN\" == \"$VALID_TOKEN\" ]; then<br \/>\necho \"You have access!\"<br \/>\n\/bin\/bash<br \/>\nexit;<br \/>\nfi<\/p>\n<p>echo \"ACCESS DENIED!\"<br \/>\n#pkill -kill -u $USUARIO<br \/>\nexit;<br \/>\n<\/code><br \/>\nBom temos ai um script que caso falhe a gera\u00e7\u00e3o do tem, ou voc\u00ea n\u00e3o queira muito esperar possa digitar &#8220;secret&#8221; e depois digitar sua segunda senha secreta.<\/p>\n<p>Assista o v\u00eddeo para mais detalhes de utiliza\u00e7\u00e3o e como funciona, caso n\u00e3o tenha compreendido.<\/p>\n<div class=\"video-container\">\n<iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/W3o4VlEy2aY?rel=0\" frameborder=\"0\" allowfullscreen><\/iframe>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>A verifica\u00e7\u00e3o em duas etapas (two-factors) \u00e9 a tecnologia que nos permite adicionar uma camada de seguran\u00e7a no processo de autentica\u00e7\u00e3o convencional (usu\u00e1rio e senha). \u00c9 recomend\u00e1vel usar sempre que \u00e9 poss\u00edvel, mas e o SSH, tem alguma coisa voltada para isso? N\u00e3o sei, mas podemos criar algo n\u00f3s mesmos para isso. O Linux nos &hellip; <a href=\"https:\/\/henriquereis.com\/blog\/seguranca-ssh-verificacao-em-duas-etapas\/\" class=\"more-link\">Continue lendo <span class=\"screen-reader-text\">Seguran\u00e7a: SSH &#8211; Verifica\u00e7\u00e3o em duas etapas<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[5],"tags":[],"_links":{"self":[{"href":"https:\/\/henriquereis.com\/blog\/wp-json\/wp\/v2\/posts\/335"}],"collection":[{"href":"https:\/\/henriquereis.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/henriquereis.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/henriquereis.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/henriquereis.com\/blog\/wp-json\/wp\/v2\/comments?post=335"}],"version-history":[{"count":9,"href":"https:\/\/henriquereis.com\/blog\/wp-json\/wp\/v2\/posts\/335\/revisions"}],"predecessor-version":[{"id":345,"href":"https:\/\/henriquereis.com\/blog\/wp-json\/wp\/v2\/posts\/335\/revisions\/345"}],"wp:attachment":[{"href":"https:\/\/henriquereis.com\/blog\/wp-json\/wp\/v2\/media?parent=335"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/henriquereis.com\/blog\/wp-json\/wp\/v2\/categories?post=335"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/henriquereis.com\/blog\/wp-json\/wp\/v2\/tags?post=335"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}