Como implementar um “perfil de usuário” volátil

3

Eu quero configurar uma máquina Linux de tal forma que quando um usuário particular, chamado estudante , logout, seu diretório / home é limpo e redefinir.

Basicamente, quero realizar essas ações quando o usuário fizer logout:

userdel student
rm -r /home/student
useradd -m student
echo student | passwd --stdin student

Existe uma maneira mais simples do que excluir e recriar o usuário?

Nota: O objetivo aqui é para limpar o conteúdo do diretório home do usuário e repovoar o diretório home do usuário, em / etc / skel. Eu acho que eu estou tentando resolver problemas de propriedade de arquivo que surgem quando copiar / etc / skel sobre / home / aluno.

Editar: O que eu preciso fazer é imitar a maneira que useradd -m copia o material de /etc/skel para /home/student e altera o proprietário, grupo e permissões. Como posso fazer o que useradd -m faz sem ter que excluir e recriar o usuário?

    
por eleven81 26.10.2009 / 16:00

4 respostas

5

Talvez eu esteja sentindo falta de algo, mas por que excluir e recriar o usuário, se tudo que você quer é limpar o diretório inicial?

Você não pode simplesmente fazer um

rsync -a --delete /etc/skel/ /home/student/

sempre que um usuário faz logout?

Talvez também mate todos os processos do usuário, se houver, mas é isso.

UPDATE: Para mudar o dono dos arquivos, você deve simplesmente executar

chown -R student:student /home/student/*

após o rsync.

Eu duvido que as permissões tenham que ser mudadas, mas se assim for, você terá que fazer isso arquivo por arquivo, algo como

chmod +x /home/student/bin/*
    
por 26.10.2009 / 16:35
0

Marcado com "bash", então presumo que você esteja olhando para um login de linha de comando, em vez de uma GUI

student@pc:~$ cat .bash_logout 
if [ "$SHLVL" = 1 ]; then
    [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
fi
cd ~
rm -r ~/* ~/.[a-zA-Z1-9]*
cp -r /etc/skel/* /etc/skel/.[a-zA-Z1-9]* .

As primeiras 3 linhas acima são padrão (pelo menos na minha máquina Ubuntu) e o restante não foi testado. Esta rota tem a vantagem de não precisar ser executada exclusivamente como root.

    
por 26.10.2009 / 16:36
0

Preparação:

sudo mkdir /home/clean-homes/
sudo tar zcvf /home/clean-homes/$user.tar.gz ~user

Eu não uso o GDM e esqueço o formato do /usr/share/xsessions/*.desktop que ele usa, mas eles são simples. Peça para o seu invocar um script como

#! /bin/sh
cd
mkdir .old
mv * .* .old
rm -rf .old &
tar zxpPf /home/clean-homes/$USER.tar.gz
exec gnome-session  # or whatever

Isso faz com que o novo usuário faça todo o trabalho de excluir os arquivos antigos e de recriar o conteúdo do diretório inicial, no login. Isso não é uma solução se você quiser que os arquivos antigos sejam protegidos do novo usuário: nesse caso, você deve criar vários usuários [por que não?] Ou aconselhar as pessoas a executarem seus arquivos. script 'logout limpo' ou - se você tem pessoas bloqueadas para efetuar login com apenas /usr/share/xsessions/*.desktop s - reescreva o script acima com caminhos absolutos e sem usar o rm .

Não confie em usuários esvaziando seus próprios diretórios no logout. Veja: ctrl + alt + backspace, pkill gnome e o poder de um computador fisicamente acessível.

    
por 26.10.2009 / 19:53
0

O Ubuntu 8.10 e posterior vem de fábrica com a opção "Guest session". Isso muda para uma conta de convidado com todos os programas e diretórios usuais em um estado virgem. Quaisquer alterações feitas pelo convidado serão perdidas quando o convidado fizer logout. A qualquer momento você pode mudar para a sessão normal apenas digitando sua senha.

    
por 26.10.2009 / 22:44