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


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 definindo-o para o diretório inicial do usuário), mas não consegui encontrar o caminho para isso.

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

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


0


origem


linuxquestions.org/questions/linux-general-1/… - Incognito
@ user257493 Como eu entendi, pelo /etc/security/chroot.conf Eu tenho adicionar linhas como: user1 /home/user1e /home/user1 será a raiz do usuário1, certo? Devo reiniciar algo para fazer as modificações em /etc/security/chroot.conf para fazer efeito?
Eu acho que esta pergunta precisa de esclarecimento ... - JT.WK
Se você tornar tudo inacessível, exceto o diretório home, o usuário não poderá nem executar comandos, pois esses comandos não estão em seu diretório base. - nos
Eu te dei uma nova resposta para sua pergunta. Eu não acho que você vai gostar disso. - Omnifarious


Respostas:


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

3



Eu preciso mudar a raiz não a casa.


Para ter certeza de que "tudo inacessível" por trás deste diretório home, eu usaria o chroot, mas depois que você não puder fazer nada se você 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ê: http://tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/chap29sec296.html

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


2





Eu mantenho esta resposta, e eu não me importo se eu tenho 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á a 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 têm que ter acesso de leitura a /bin/, /usr/bin, /usr/libe /lib ou eles não serão capazes de fazer nada.

Se você realmente quer algo mais estrito do que as permissões lhe dão, em seguida, olhando para a criação de selinux para que você possa restringi-los ainda mais.

Usando chroot só não vai te dar o que você quer. É muito complicado de configurar, e existem maneiras de contornar isso.


2



@Omnifarious Eu preciso que o user1 não seja capaz de ver o resto do mundo. Resolver esse problema com permissões significa modificar o resto do mundo, em vez de modificar user1. Eu preciso de uma solução que resolva o problema, modificando user1, não o resto do mundo. Sim, se o diretório raiz do user1 for seu endereço, ele não terá acesso direto a diretórios como /bin, mas eu posso criar um link simbólico para /bin no diretório home do user1, decidindo o que ele pode ver e o que ele não pode.
@ Vahagn: links simbólicos vão deixar o usuário acessar as coisas fora de sua cadeia chroot. Links rígidos serão, mas eles não podem abranger sistemas de arquivos. cd /home/new_guy ; ln -s /bin ./bin ; chroot . ls bin


veja o manual de useradd. Você tem que usar o -d interruptor.


1



Eu preciso mudar a raiz não a casa.


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

até o final do seu /etc/profile você pode obter o que está pedindo, 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 que você queria fazer chroot. Você também precisará certificar-se de que este arquivo existe e decidir o que fazer no caso de erros ao acessá-lo para garantir que outros usuários (especialmente o root) não sejam travados pelo chroot

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

O usuário também não poderá acessar /dev/tty que vai 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 tecla do usuário para lidar com a reinicialização de 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) que muitos programas usam.

Todas estas são coisas que você pode contornar, mas você vai 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.


1





usermod -d /path/to/new/homedir/ username

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


0



Eu preciso mudar a raiz não a casa.


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


0



usuário root é deus; pode ver e fazer qualquer coisa em qualquer lugar. O usuário insignificante só pode ver e fazer seu próprio domínio; resto do muliverse é negado. - bbaja42


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 pisar em 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á encontrar problemas de segurança se não for cuidadoso (por exemplo, conceder acidentalmente a propriedade / home / guest / bin para o convidado, caso em que o convidado poderá ser executado como root na próxima vez que invocar 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.


0