Como alterar o diretório raiz de um usuário Linux?

0

Para um usuário em um host Linux, preciso deixar tudo inacessível além de seu diretório pessoal.

Ouvi dizer que isso geralmente é feito alterando o diretório raiz do usuário (e configurando-o para o diretório inicial do usuário), mas não consegui encontrar a maneira de fazê-lo.

Eu pensei sobre o comando chroot , mas parece que ele apenas executa o comando especificado, considerando o diretório especificado como o diretório raiz. Então parece chroot não é o que eu preciso.

Então, minha pergunta é: qual é o comando que altera o diretório-raiz do usuário?

    
por Dennis Williamson 05.10.2010 / 22:26

8 respostas

3

Parece que você deseja alterar o diretório HOME, não o diretório raiz. Raiz sempre será / ou / root.

usermod -d /path/to/new/homedir/ username
    
por 05.10.2010 / 22:33
2

Para ter certeza de que "tudo inacessível" por trás deste diretório inicial, eu usaria chroot, mas depois que você não puder fazer nada se não preparar o diretório chrooted, você não terá nenhum binários ou libs disponíveis.

A configuração do servidor FTP pode ser útil para você: link

É um conjunto de configurações chroot completo para restringir os usuários do ftp a este diretório chrooted.

    
por 06.10.2010 / 10:21
2

Eu mantenho esta resposta, e não me importo se eu ganhei um -1 sobre isso. Isso não é algo que o Unix pode fazer por você de qualquer maneira razoável. Você está pedindo por algo que é praticamente impossível.

Mas há uma maneira de conseguir algo parecido com o que você está pedindo, mais ou menos. Use uma máquina virtual. Configure uma instância da máquina virtual para o usuário em questão e forneça apenas direitos de login, não o sistema operacional host.

Aqui está minha resposta original:

Apenas use permissões. É para isso que eles são. Geralmente, um usuário não tem acesso para gravar em nada além de / tmp e em seu diretório inicial. E eles precisam ter acesso de leitura a /bin/ , /usr/bin , /usr/lib e /lib ou não poderão fazer nada.

Se você realmente deseja algo mais estrito do que as permissões, então procure configurar o selinux para restringi-los ainda mais.

Usar chroot não vai dar o que você deseja. É muito complicado de configurar e há maneiras de contornar isso.

    
por 05.10.2010 / 22:33
1

consulte o manual de useradd . Você precisa usar a opção -d .

    
por 05.10.2010 / 22:32
1

Eu acho que se você adicionar

if grep "\<${USER}\>" /etc/jailbirds > /dev/null
then
    echo I am not a crook
else
    exec chroot $CWD
endif

ao final do seu /etc/profile , você pode obter o que está solicitando, mas pode ter alguns efeitos colaterais que eu não conheço (assumir o shell executando /etc/profile pode causar problemas). Nesse caso, você precisaria criar um arquivo /etc/jailbirds , que era uma lista dos usuários para os quais você queria fazer o chroot. Você também precisará ter certeza de que este arquivo existe e decidir o que fazer no caso de erros ao acessá-lo para garantir que outros usuários (especialmente root) não sejam travados pelo chroot

Além disso, isso será difícil. O usuário não poderá acessar /proc , o que fará com que muitos utilitários de shell (como ps , top e muitos outros) não funcionem. O usuário também não poderá acessar /dev/null , o que quebrará muitas coisas.

O usuário também não poderá acessar /dev/tty , que quebrará less e more quando usado com entrada padrão. Os aplicativos do usuário herdarão os descritores de arquivos abertos stdin, stdout e stderr de antes do chroot, mas abrirão menos / dev / tty para que ele possa obter pressionamentos de teclas do usuário para lidar com redirecionamentos stdin de um canal.

Você também não poderá acessar nenhum programa ou biblioteca compartilhada ou muitos arquivos que residam em / etc (como / etc / protocols) usados por muitos programas.

Todas essas são coisas que podem ser resolvidas, mas você acabará precisando fazer muito mais trabalho para tornar o ambiente dos usuários utilizável do que eu acho que você considerou.

Se você tentar a minha sugestão, sugiro que seja muito cuidadoso. Seria fácil errar e bagunçar as coisas. Eu não testei isso, a propósito.

    
por 06.10.2010 / 01:18
0
usermod -d /path/to/new/homedir/ username

Isso responde à sua pergunta, mas não tenho certeza de que é o que você precisa?

    
por 05.10.2010 / 22:33
0

Eu acho que você está um pouco confuso. O diretório / root só será acessível pelo usuário root. Cada usuário geralmente possui seu próprio diretório HOME em / home /, e o usuário root do sistema possuirá / root

Se você quiser alterar o diretório HOME, siga algumas das outras respostas ou edite o arquivo / etc / passwd

    
por 06.10.2010 / 01:18
0

Crie um usuário convidado

useradd -s /bin/sh -m guest

Instale um shell para eles que não dependa de bibliotecas de terceiros

cd /home/guest
apt-get download busybox-static
dpkg -x *.deb .
rm *.deb
cd bin
./busybox --install .

Altere seu diretório raiz para / home / guest e execute como convidado

mkdir /home/guest/etc
grep guest /etc/passwd > /home/guest/etc/passwd
chroot /home/guest /bin/sh
exec env -i login -f guest

Dentro do chroot, você pode instalar e gerar um servidor ssh, para que o usuário possa efetuar o login remotamente; embora você possa ter problemas quando certos aplicativos quiserem acessar o sistema de arquivos / proc e os amigos; Nesse caso, você pode começar a trilhar contêineres lxc, namespaces, máquinas virtuais, etc., onde algo como schroot ou qemu se torna uma opção mais fácil.

Se você mantiver uma solução caseira, poderá ter problemas de segurança se não for cuidadoso (por exemplo, dar acidentalmente a propriedade / home / guest / bin a um convidado, caso em que o convidado poderá ser executado como root ao lado vez que você invoca o chroot).

Eu não tenho idéia se os comandos acima são o que você quer e / ou se eles estão vulneráveis a quaisquer falhas de segurança. Espero que eles ajudem embora.

    
por 24.06.2017 / 00:51