我想设置一台 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/*.desktop
s 登录 - 使用绝对路径重写上述脚本,并且不要将rm
.
不要指望用户在注销时清空自己的目录。请参阅:ctrl+alt+backspace、pkill gnome
以及可物理访问的计算机的电源。
答案4
Ubuntu 8.10 及更高版本标配“访客会话”选项。这将切换到访客帐户,其中所有常用程序和目录都处于原始状态。访客注销后,访客所做的任何更改都将丢失。您可以随时输入密码切换到正常会话。