Смена пользователя в скрипте bash - PullRequest
0 голосов
/ 14 февраля 2020

Я хотел создать сценарий установки для моего raspberry pi, который обеспечивает установку по умолчанию путем настройки / усиления s sh, установки брандмауэра и fail2ban и, наконец, избавления от пользователя Raspbian по умолчанию. Все остальные части работают, но последняя часть всегда показывает мне ошибку. Новый пользователь создан и добавлен в группу sudo. После этого я хочу удалить старого пользователя 'pi'. Поскольку скрипт запускается с sudo в пользовательском контексте 'pi', я подумал, что смогу решить эту проблему, переключившись на 'su', но я просто получаю сообщение об ошибке, что пользователь не может быть удален, поскольку он используется процессом:

echo "Enter the new user name? Only lower case letters allowed!" 
read user
sudo adduser $user && adduser $user sudo
echo "default user 'pi' will now be deleted"
su -c "deluser -remove-home pi"

Если я проверю «пользователи», пользователь «пи» пропадет, но я все равно смогу войти в систему с этой учетной записью. Как я могу решить эту проблему внутри скрипта?

Я попробовал ответы, которые нашел здесь: Как мне использовать su для выполнения остальной части скрипта bash от имени этого пользователя? и здесь: https://unix.stackexchange.com/questions/361327/how-to-login-as-different-user-inside-shell-script-and-execute-a-set-of-commands но, похоже, ничего не работает. Я искал Google, но не могу найти решение, которое работает. Возможно ли то, что я пытаюсь сделать?

Ответы [ 2 ]

0 голосов
/ 15 февраля 2020

Думаю, я нашел причину проблемы. 'set -eux' очень помог:

deluser pi
 Removing user `pi' ...
 Warning: group `pi' has no more members.
 userdel: user pi is currently used by process 445
 /usr/sbin/deluser: `/usr/sbin/userdel pi' returned error code 8. Exiting.

Я попытался ps -fu pi, чтобы найти процесс, вызывающий проблему: это /lib/systemd/systemd --user Есть ли способ остановить этот процесс внутри скрипта?

0 голосов
/ 14 февраля 2020

Я обычно добавляю set -eux в начале сценария bash. Это позволяет отлаживать и находить опечатки и ошибки.

Попробуйте переключить пользователя внутри скрипта с помощью

sudo -i -u ${user} $(command to delete pi here)
...