3

Я хочу настроить машину Linux таким образом, чтобы при выходе из системы определенного пользователя с именем student их /home каталог очищался и сбрасывался.

В основном я хочу выполнить эти действия, когда пользователь выходит из системы:

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

Есть ли более простой способ, чем удаление и воссоздание пользователя?

Примечание: цель здесь - стереть содержимое домашнего каталога пользователя и заново заполнить домашний каталог пользователя из /etc /skel. Я думаю, я просто пытаюсь обойти проблемы с владением файлами, которые возникают при копировании /etc /skel over /home /student.

Редактировать: мне нужно подражать тому, как useradd -m копирует материал из /etc/skel в /home/student и меняет владельца, группу и права доступа. Как я могу сделать то, что делает useradd -m без необходимости удалять, а затем заново создавать пользователя?

4 ответа4

5

Может быть, я что-то упускаю, но зачем вообще удалять и заново создавать пользователя, если все, что вам нужно, это очистить домашний каталог?

Вы не можете просто сделать

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

каждый раз, когда пользователь выходит из системы?

Может быть, также убить все пользовательские процессы, если таковые остались, но это все.

ОБНОВЛЕНИЕ: чтобы изменить владельца файлов, вам нужно просто запустить

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

после rsync.

Я сомневаюсь, что разрешения должны быть изменены, но если это так, вам придется делать это для каждого файла, что-то вроде

chmod +x /home/student/bin/*
0

Приготовление:

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

При этом новый пользователь выполняет всю работу по удалению старых файлов и воссозданию содержимого домашнего каталога при входе в систему. Это не решение проблемы, если вы хотите, чтобы старые файлы были защищены от нового пользователя: в этом случае вам следует создать несколько пользователей [почему бы и нет?] Или посоветовать людям запускать ваш сценарий «чистого выхода», или - если у вас есть люди, заблокированные для входа в систему только с вашими /usr/share/xsessions/*.desktop s - перепишите вышеупомянутый сценарий с абсолютными путями и без фоновой rm .

Не полагайтесь на пользователей, очищающих свои собственные каталоги при выходе из системы. Смотрите: ctrl+alt+backspace , pkill gnome и физически доступный компьютер.

0

Ubuntu 8.10 и более поздние версии стандартно поставляются с опцией "Гостевая сессия". Это переключается на гостевую учетную запись со всеми обычными программами и каталогами в нетронутом состоянии. Любые изменения, сделанные гостем, теряются, когда гость выходит из системы. В любой момент вы можете переключиться на обычный сеанс, просто введя свой пароль.

0

Тег с "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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .