User Only possui acesso a um arquivo

0

Estou trabalhando em um dispositivo que possui uma GUI baseada na web para configurar a rede em um sistema sem cabeça do Ubuntu. Inicialmente o sistema será configurado para DHCP, mas uma das configurações iniciais será aplicar um endereço IP estático a ele, usando a GUI.

Tenho certeza de que acontecerá que, se eles enviarem inadvertidamente configurações TCP / IP incorretas por meio da GUI, o dispositivo reinicializará ou reiniciará os serviços de rede, mas agora o usuário sem acesso à GUI por meio de um navegador.

Estou pensando em configurar um usuário do "Network Disaster" do Ubuntu cujas credenciais são conhecidas pelo usuário final, o que permitiria que elas acessassem o sistema apenas por meio de uma sessão de terminal (teclado e monitor conectados ao dispositivo).

No entanto, eu só quero que eles tenham acesso a / etc / network / interfaces depois de logados. O ideal é que eles estejam bloqueados em sua pasta pessoal (ou talvez / etc / network esteja configurado para ser sua pasta pessoal ) e não pode navegar em nenhum outro lugar no sistema de arquivos. O único arquivo em que eles têm acesso de leitura / gravação é o arquivo de interfaces.

Isso é possível? Eu li um monte de posts sobre como configurar usuários SSH etc etc, mas eu não vi nada sobre a restrição de um usuário para apenas a sua pasta pessoal e é isso ...?

    
por bnoeafk 27.08.2014 / 18:41

3 respostas

0

Você não menciona se deseja impedi-los de visualizar outros arquivos, então isso pode funcionar para você.

O Sudo permite que você defina uma entrada no arquivo sudoers que permitirá que um usuário não privilegiado específico emita um comando específico com argumentos específicos com privilégios elevados.

Dos exemplos de suoders

# joe may su only to operator
joe     ALL = /usr/bin/su operator

Parece que algo assim serviria para você;

joe     ALL = /bin/vi /etc/network/interfaces

ou melhor ainda

joe     ALL = /bin/vi /etc/network/interfaces.d/eth0.cfg
    
por CAB 27.08.2014 / 19:45
0

Se você quiser que apenas um usuário possa ver, ter acesso e alterar um único arquivo, o vi não é realmente uma opção. A razão é que qualquer um que usa o vi pode imediatamente baixar para um shell dentro do vi e executar os comandos que quiser, especialmente se estiverem no vi como root, o que certamente seria o caso se eles estivessem editando /etc/network/interfaces . De fato, permitir que eles façam login e obtenham um shell de qualquer tipo, falhará imediatamente em seu objetivo.

Aqui está uma solução de duas partes que proponho que você tente:

Resumo:

  1. Permitir que um usuário transfira apenas um arquivo específico para apenas um local específico sem poder obter nenhum outro tipo de shell.
  2. Criar e agendar a tarefa que verifica automaticamente as alterações e copia condicionalmente um "novo" arquivo de interfaces e reinicia a rede.

Guia:

  1. Configure um usuário que possa usar apenas o protocolo ssh para aplicativos sftp. A resposta aceita no post seguinte funcionou muito bem para mim:

    link

    Notas:

    • Por uma questão de conveniência, você também pode usar o nome de acesso para o usuário, já que o grupo sftponly será gerado automaticamente
    • Usar /home/sftponly como o diretório inicial dos usuários é perfeitamente aceitável. É assim que meu usuário se parece em / etc / passwd:

      mgodby@mg-ws1:~$ grep sftponly /etc/passwd
      sftponly:x:1002:1002::/home/sftponly:/bin/false
      
    • Crie manualmente o diretório /home/sftponly como root e atribua a propriedade e as permissões para ficar assim:

      mgodby@mg-ws1:/etc$ ls -l /home | grep sftponly
      drwxr-xr-x  2 root   root    4096 Aug 27 16:07 sftponly
      
    • pré-crie o arquivo de interfaces em /home/sftponly e altere as permissões para ficar assim:

      mgodby@mg-ws1:~$ ls -l /home/sftponly
      total 4
      -rw-rw-r-- 1 sftponly sftponly 95 Aug 27 16:14 interfaces
      


  2. Agora que criamos um usuário cuja única capacidade é colocar um arquivo chamado "interfaces" em um diretório específico via sftp, precisamos de uma tarefa cron que coloque automaticamente o novo arquivo interfaces em vigor.

    • Crie um script em algum lugar ( /root é bastante seguro para isso), torne-o executável e cole nele os conteúdos encontrados aqui: newnet.sh
    • Crie um cron job que execute o script a cada minuto. Aqui está como seria a entrada do crontab se eu nomeasse meu script newnet.sh e o colocasse no diretório /root :

      * * * * * /root/newnet.sh
      
    • Isso gerará uma tarefa cron que verifica automaticamente /home/sftponly/interfaces a cada 1 minuto em busca de diferenças com /etc/network/interfaces . Se alguma diferença for encontrada, ela copiará o novo arquivo interfaces no local e reiniciará todas as interfaces de rede gerenciadas.

Deixe-me saber se esta solução é aceitável para você.

    
por MGodby 27.08.2014 / 23:51
0

Limite seu login aos TTYs usando /etc/security/access.conf :

-:poor_user:ALL EXCEPT tty1 tty2 # Other ttys if needed.

Escreva um shell personalizado que apenas abra o editor (e um editor fraco):

//file: poor_shell.c
#include <unistd.h>
int main(void)
{
    execl("/usr/bin/nano", "nano", "/etc/network/interfaces", NULL);
}

Compilar, torná-lo setuid root (ou tornar /etc/network/interfaces group writable e definir seu grupo para o grupo poor_user ):

gcc -o poor_shell poor_shell.c
chown root:root poor_shell
cp poor_shell /bin
# Either
chmod u+s /bin/poor_shell
# Or:
chown root:poor_user /etc/network/interfaces
chmod g+w /etc/network/interfaces

E defina o shell desse usuário como /bin/poor_shell :

chsh poor_user /bin/poor_shell
    
por muru 28.08.2014 / 00:06