如何实现可变的“用户配置文件”

如何实现可变的“用户配置文件”

我想设置一台 Linux 机器,以便当特定用户(名为学生,注销,他们的 /home 目录被清除并重置。

基本上我想在用户注销时执行以下操作:

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

有没有比删除并重新创建用户更简单的方法?

笔记:这里的目标是清除用户主目录的内容并从 /etc/skel 重新填充用户主目录。我想我只是想解决将 /etc/skel 复制到 /home/student 时出现的文件所有权问题。

编辑:useradd -m我需要做的是模仿将内容从复制/etc/skel/home/student并更改所有者、组和权限的方式。我该如何做useradd -m而不删除然后重新创建用户?

答案1

也许我遗漏了一些东西,但是如果您想要的只是清理主目录,为什么要删除并重新创建用户呢?

你不能做

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

每次用户注销时?

如果还有的话,也许还会终止所有用户进程,但就是这样。

更新:要更改文件的所有者,您只需运行

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

在 rsync 之后。

我怀疑权限必须更改,但如果是这样,你将不得不逐个文件地进行更改,例如

chmod +x /home/student/bin/*

答案2

标记为“bash”,所以我假设你正在查看命令行登录,而不是 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]* .

上面的前三行是标准的(至少在我的 Ubuntu 机器上),其余的尚未测试。此路线的优点是不需要以 root 身份专门执行。

答案3

准备:

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

我不使用 GDM,所以忘记了它使用的格式/usr/share/xsessions/*.desktop,但它们很简单。让你的脚本调用如下脚本

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

这会让新用户在登录时删除旧文件并重新创建主目录的内容。如果您希望旧文件被删除,这不是解决方案担保来自新用户:在这种情况下,您应该创建多个用户 [为什么不呢?],或者建议人们运行您的“clean-logout”脚本,或者 - 如果有人锁定只能使用您的/usr/share/xsessions/*.desktops 登录 - 使用绝对路径重写上述脚本,并且不要将rm.

不要指望用户在注销时清空自己的目录。请参阅:ctrl+alt+backspace、pkill gnome以及可物理访问的计算机的电源。

答案4

Ubuntu 8.10 及更高版本标配“访客会话”选项。这将切换到访客帐户,其中所有常用程序和目录都处于原始状态。访客注销后,访客所做的任何更改都将丢失。您可以随时输入密码切换到正常会话。

相关内容