a) Cite um comando para criar usuários no Linux. R: O comando adduser adiciona um usuário ou grupo no sistema. Por padrão, quando um novo usuário é adicionado, é criado um grupo com o mesmo nome do usuário. Opcionalmente o adduser também pode ser usado para adicionar um usuário a um grupo. Será criado um diretório home com o nome do usuário (a não ser que o novo usuário criado seja um usuário do sistema) e este receberá uma identificação. A identificação do usuário (UID) escolhida será a primeira disponível no sistema especificada de acordo com a faixa de UIDS de usuários permitidas no arquivo de configuração /etc/adduser/cong. Este é o arquivo que contém os padröes para a criação de novos usuários no sistema. b)Existe algum comando para criar grupos de usuários no Linux? Qual é? R: Sim, addgroup. d)Faça um script em Perl que recebe, pela linha de comando, um nome de usuário com este login e um grupo de mesmo nome. Faça com que esse script gere uma senha aleatória para este usuário e, ao final da execução, imprima na tela o login e a senha. R: cat /dev/urandom|tr -dc "a-zA-Z0-9-_\$\?"|fold -w 12|head -n 1 makepasswd --chars 8 para gerar a senha aleatória. e)É possível forçar os usuários a digitarem uma senha 'segura' seguindo alguma restricao (caracteres alfa-numéricos, alfabéticos e outros - ou tamanho da senha...)? R: Sim. Modificando-se as configurações do PAM. Utilizando o módulo pam_cracklib. f) Como verificar de uma forma esperta em quais grupos está um usuário? R: groups user. Exercício 2 - Inicialização do sistema a) O que é o processo "init"? Como ele funciona? R: O processo init é o primeiro executado pelo kernel de qualaquer sistema operacional Linux/Unix na sua inicialição. Ele é o primeiro processo a ser executado e é o pai de todos os outros processo. É o único processo que não pode ser abortado. Na inicialização o bootloader carrega o kernel, e é iniciada a detecção do hardware, após o kernel monta o root filesystem, o dirétorio raiz do sistema, e executa o processo init. O init é o processo responsável por continuar o carregamento do sistema chamando todos os deamons necessários e executando os shell scripts necessários para isto. b) Como se faz para executar programas/scripts na inicialização do sistema? R: Adiciona-se a chamada do programas/script no arquivo /etc/rc.local ou no /etc/rc.d/rc.local (no Slackware). c) O que é um daemon? Onde ficam localizados os arquivos que iniciam os daemons numa distribuição Debian? R: Daemons são processos que rodam em background e controlam determinados serviços no sistema (servidor ssh, servidor http, etc.). Processos normalmente se tornam daemons com o fork do processo filho, o processo pai mata-se e então o init adota o processo filho. Os daemons que são carregados na inicialização do sistema normalmente ficam localizados em /etc/init.d/. /usr/sbin/??? Exercício 3 - Gerenciamento de dispositivos a) O que é uma partição num dispositivo de armazenamento? R: Uma partição é uma divisão de um dispositivo de armazenameto. Cada partição pode conter um sistema de arquivos diferente. Consequentemente vários sistemas operacionais podem ser instalados na mesma unidade de disco. b) Onde ficam localizadas as partições e os outros dispositivos no Linux? /dev c) Que comando você utilizaria para criar/editar/excluir partições no Linux? R: # cfdisk d) Quais são os formatos de partições utilizados no Linux? Qual a diferença entre eles? R: -> partição primária Este tipo de partição contém um sistema de arquivos. Em um disco deve haver no mínimo uma e no máximo quatro partições primárias. Se existirem quatro partições primárias, nenhuma outra poderá existir neste disco. Uma dessas partições deve ser marcada como bootável para que a BIOS possa iniciar a máquina por ela. -> partição estendida Só pode haver uma partição estendida em cada disco. Uma partição estendida é um tipo especial de partição primária que não pode conter um sistema de arquivos. Ao invés disso, ela contém partições lógicas. Se existir uma partição estendida, ela toma o lugar de uma das partições primárias, podendo haver apenas três. -> partição lógica Também chamadas de unidades lógicas, as partições lógicas residem dentro da partição estendida. Podem haver de uma a 12 partições lógicas em um disco. e) O que é "Mont Point"? R: O GNU/Linux acessa as partições em seus dispositivos de armazenameto através de diretórios. Os diretórios que são usados para acessar(montar) partições são chamados de Mont Points ou Pontos de Montagem. No DOS/Windows cada letra de unidade (C:, D:, E:) identifica uma partição de disco, no GNU/Linux os pontos de montagem fazem parte da grande estrutura do sistema de arquivos raiz. f) Qual comando é utilizado para montar partições? E para desmontar? R: mount [dispositivo] [ponto de montagem] [opções] umount [ponto de montagem ou dispositivo] g) Para que serve o comando "fsck"? É possível executá-lo durante a inicialização? R: O fsck é usado para checar e opcionalmente reparar um ou mais sistemas de arquivos do Linux. Para forçar sua execução na inicialização basta criar um arquivo em branco como /forcefsck ou então reinicializar o sistema com o comando # shutdown -rF now. Exercício 4 - Gerenciamento de processos a) Num sistema operacional, qual a definição de "processo"? R: Nos sistemas operacionas, um processo é a forma de representar um programa em execução. É o processo que utiliza os recurso do computador para a realização das tarefas para as quais a máquina é destinada. b) Quais são os atributos de um processo, isto é, quais são os dados que o identificam no sistema? R: -> Process ID (PID) ou identificação do processo: Cada processo possui um número de identificação única. O primeiro processo init sempre terá o PID 1 e para o restante dos processos este número é incrementado à medida que novos processos são executados. -> User ID e Group ID (ID do usuário e ID do grupo): Os processo precisam ser executados com privilégios de uma conta de usuário e grupo associado a eles. Isto é importante porque assim o sitema pode determinar o acesso aos recursos. -> Processo Pai: No Linux nenhum processo é executado de forma independente dos outros. Todos os processo no sistema, com exceção do init possuem um processo pai que é responsável pela sua execução. -> Parent ID (ID do processo pai): Este atributo grava o PID do processo pai. Caso o processo pai termine sua execução antes do processo filho, o processo filho é adotado pelo init, ganhando o Parent ID igual a 1. -> Variáveis de ambiente: Cada processo herda do processo pai algumas variáveis de ambiente que simplesmente guardam alguns valores que podem ou não ser importantes para o processo em execução. É possível que durante a execução um processo altere, incremente ou apague uma variável de ambiente. -> Diretório de trabalho: Os processo também são associados a um diretório de trabalho, onde podem fazer leitura e escrita de disco. -> Temporizadores: O Kernel mantém registros da hora em que os processos são criados bem como o tempo de CPU que eles consomem durante a sua execução. c) Como funciona a sequência de execução de um processo, isto é, quais são os estados de execução que ele pode apresentar? R: -> Executável: o processo pode ser executado imediatamente; -> Dormente: o processo precisa aguardar alguma coisa para ser executado. Só depois dessa "coisa" acontecer é que ele passa para o estado executável; -> Zumbi: o processo é considerado "morto", mas, por algum motivo, ainda existe; -> Parado: o processo está "congelado", ou seja, não pode ser executado. d) Qual a diferença em chamar o comando "vim" e o comando "vim &"? R: "vim" chamará o editor de testo VIM em "foreground", ou seja, em primeiro plano. "vim &" chamará o editor em "background", ou seja, em segundo plano. e) Como você faz para rodar comandos em modo "background"? R: Para iniciar um programa em background, basta chamá-lo no terminal com "&" ao final. Ex: "vim &". f) Como você faz para colocar um comando que está em foreground em background? E o contrário? R: Primeiro deve-se paralizar a execução do processo, pode-se fazer isto pressionando Ctrl + Z no teclado. Depois utiliza-se o comando "bg" do seguinte modo: bg +[número do pocesso]. Para se passar em foreground utiliza-se o cumando "fg": fg +[número do processo]. g) Qual o comando para mostra os processos que estão rodando? R: Pode-se utilizar o comando ps: ps aux; ps lax; etc. h) Qual o procedimento para finalizar um processo? R: Pode-se utilizar o comando kill: kill [opções] [PID] i) Suponha que o usuário "malvadeza" esteja consumindo quase todos os recursos do seu computador, como você faria para finalizar todos os processos deste usuário? R: Pode-se utilizar o comando pkill da seguinte maneira: pkill -u [Nome de Usuário] j) O que faz: :(){ :|:& };: ? R: Cria um processo que consome todos os recursos do computador. k) É possível controlar os recursoso que um determinado usuário pode utilizar? Exercício 5 - a) O que são soft links (links simbólicos)? (Definição, para que servem, como criar um link simbólico para um determinado arquivo). R: Soft links (ou links simbólicos) são apontadores para um arquivo ou diretório. Quando acessado o link, é acessado o arquivo ou diretório para o qual ele aponta. Os links tem função de atalho tanto para arquivos como para pastas. É importante ressaltar que se o arquivo apontado pelo soft link for mudado de nome ou endereço, o soft link ficará quebrado. O soft link pode ser criado com o seguite comando: ln -s [endereço apontado] [nome do link] b) Quais as difereças entre hard links e soft links? R: A principal diferença é que soft links apenas apontam para outro local, enquanto um hard link compartilha o mesmo inode, ou seja compartilha o mesmo endereço físico. Quando modifica-se um hard link, a mudança ocorre propriamente no arquivo/diretório. c) Como se comportam os comandos rm, cp e tar para soft links?: - se um soft link for removido com rm, o arquivo para o qual ele aponta será removido também? - o comano cp, por default, ao ser rodado sobre um diretório que contém um soft link, armazenará o soft link, armazenará o arquivo para o qual o soft link aponto ou ignora o soft link? R: Ao remover-se um soft link com o comando rm, o arquivo ou diretório para o qual ele aponta permanece inalterado sendo, portanto, apenas removido o soft link. De forma análoga para o comando cp e tar. O comando cp apenas copiará o soft link e não o arquivo para o qual ele aponta e o comando tar armazenará apenas o soft link. Exercício 6 - SSH a) Existe uma forma de logar por SSH sem o uso de senhas? Se existir, diga como fazer. R: Sim. No computador cliente execute o seguinte comando: ssh-keygen -t rsa Quando perguntado para entrar com uma "passphrase", apenas tecle "Enter" duas vezes para que fique em branco, caso contrário esta frase precisará ser digitada posteriormente. Agora uma chave pública e uma chave privada foram geradas. A chave privada está em "~/.ssh/id_rsa" e a pública em "~/.ssh/id_rsa.pub". Para que seja prossível uma conexão SSh sem senha entre cliente e servidor, é preciso divulgar para o servidor a chave pública gerada pelo cliente. É possível fazer esta cópia remotamente executando os seguintes comandos: scp ~/.ssh/id_rsa.pub usuario@servidor:~ ssh usuario@servidor cat ~/id_rsa.pub >> ~/.ssh/authorized_keys No exemplo acima foi realizada a cópia do arquivo "id_rsa.pub" do cliente para o servidor o conteúdo do arquivo "id_rsa.pub" foi inserido dentro do arquivo "authorized_keys". b) Qual a porta utilizada pelo SSH? É possível trocá-la? Como faz? R: A porta padrão do SSH é a 22. É possível trocá-la. No servidor SSH, deve ser modificado no arquivo /etc/ssh/sshd_config a porta 22 para a desejada. No cliente, pode ser especificada a porta no arquivo /etc/ssh/ssh_config, ou como opção pela linha de comando com o parâmetro -p. c) É possível bloquear por login por SSH como root? É possível permitir que o root faça logon por SSH apenas em determinadas circunstâncias? R: Sim. Para bloquear o login por SSH como root, basta adicionar a seguinte linha ao arquivo /etc/ssh/sshd_config: PermitRootLogin no Pode-se adicionar restrições ao logon root, como horário e IP. Exemplo: Altere o arquivo /etc/security/access.conf e coloque o parâmetro: -:root:ALL EXCEPT LOCAL 192.168.0.1 Agora altere o arquivo /etc/pam.d/sshd e insira o seguinte parâmetro: account required /lib/security/pam_access.so Neste exemplo o acesso do root só será possível localmente ou pelo IP 192.168.0.1. d) Existe uma forma para fazer o SSH rodar programas a partir do modo gráfico? R: Sim. Deve se modificar o arquivo /etc/ssh/sshd_config no servidor ssh, e inserir as seguintes linhas, se não houverem: X11Forwarding yes X11DisplayOffset 10 Na máquina cliente, deve-se modificar o arquivo /etc/ssh/ssh_config e inserir a seguinte linha, se não houver: ForwardX11 yes No momento de se logar, deve se usar o parâmetro -X. e) Para que servem os arquivos localizados em ~/.ssh e em suas subpastas? R: Ficam localizados os arquivos de configuração do ssh que dizem respeito somente ao usuário ao qual o diretório ~ pertence, inclusive as chaves SSH pública e privada. d) O que é uma 'chave SSH'? Como gerá-las? R: Uma chave SSH pode ser tanto pública ou privada. A chave SSH é um recurso de criptografia assimétrica que permite que dados sejam trafegados de forma segura. De maneira simples: a chave pública possibilita os dados em questão de serem codificados de determinada forma que, virtualmete, somente a chave privada tenha capacidade de decodificá-los, assim, não há problemas em ter a chave pública interceptada, pois ela apenas codifica e não decodifica, enquanto que a chave privada deve ser mantida restrita e oculta do conhecimento de outros. Assim, mesmo que dados sejam interceptados e o interceptor possua a chave pública, os dados continuarão seguros, pois ele não possuirá a chave privada. Para gerá-las, utiliza-se o programa ssh-keygen e seus respectivos parâmetros. Ex: ssh-keygen -t rsa. As chaves SSH podem ser utilizadas como artifício para autenticação sem senha. A chave pricada é usada para cifrar mensagens, com isso garante-se que apenas o dono da chave privada poderia ter cifrado a mensagem que foi decifrada com a chave pública. Assim, garante-se uma autenticidade segura. Exercício 7 - Geral a) Como verificar quais portas estão escancaradas numa rede de computadores? R: Pode ser utilizado o programa Nmap. b) Para que serve o comando telnet? R: O comando telnet serve de interface com usuário para o protocolo TELNET. O protocolo TELNET oferece login remoto a um computador, que permite trabalhar conectado a distância como se estivesse em frente ao próprio computador. O TELNET tem aplicações próximas do SSH, porém o SSH é considerado muito mais seguro. c) Existe uma forma de eu enviar e-mail a partir de um destinatário falso? Como fazer isso? d) Como fazer para evitar que as pessoas tenham acesso à listagem de arquivos de uma determinada subpasta de sua www? R: Basta remover as permissões de leitura do diretório em questão. Exemplo: chmod go-r ~/www/diretorio Após removidas as permissões de leitura do diretório, não será mais possível às pessoas listarem os arquivos contidos nele. Exercício 8 - HW Suponha que um(a) namorado(a) muito chato que adora encher o saco durante conversas pedindo para que você use câmeras e que você use apenas um notebook - ou seja, a câmera não poderá ser removida trivialmente. a) Como desinstalar a câmera de seu computador de forma a não ser incomodado durante uma sessão de IM com suporte a câmeras? Na realidade, como desinstalar esse tipo de coisa no Linux? R: Deve-se encontrar inicialmente o módulo referenta à câmera, com o comando "lsmod", após encontrado, utiliza se o comando "modprobe -r" para removê-lo. Ex: modprobe -r modulo_da_camera b) Como exibir todos os módulos de dispositivos que estão instalados? R: Pode-se utilizar o comando "lsmod" para listá-los, o comando "modinfo" exibe mais informações de determinado módulo. Exercício 9 - Acesso Remoto 2.0 Armando Naldel orienta você e mais dois estudantes em Computação Quântica, com o final do semestre, ele pediu um relatório técnico acerca do seguinte artigo: http://www.nature.com/nature/journal/v646/n7285/full/nature08812.html. O problema é que você está na praia e não na USP, mas precisa ler tal artigo. Pior! Seu notebook quebrou e o que sobrou foi aquela lan house fuleira que permite fazer download de coisas, porém reseta as configurações quando o computador é bootado. a) Como fazer para acessar o site com o artigo como se você estivesse na USP? (tente abri-lo de lá e entenderá). R: Basta baixar o programa PuTTY e o Filezilla e seguir as instruções da questão abaixo. b) Com a providência divina, você encontrou o Paulo Brdinha que tinha um notebook com Linux. Como fazer esse mesmo acesso a partir do Linux E usando SSH? Note que você não tem tempo, portanto, usar o SSH com X não é a solução adequada. R: Conecte-se à Rede Linux por SSH; use o comando "wget -r -np -k http://www.nature.com/nature/journal/v464/n7285/full/nature 08812.html" , ele salvará a página em uma pasta. Use o sftp (ou o Filezilla, configurando a conexão para SSH pela porta 22) para conectar-se novamente à Rede Linux, e baixe a página salva. Agora a página salva pode ser visualizada no navegador.