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
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?
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
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.
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.
consulte o manual de useradd
. Você precisa usar a opção -d
.
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.
usermod -d /path/to/new/homedir/ username
Isso responde à sua pergunta, mas não tenho certeza de que é o que você precisa?
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
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.