【问题标题】:Changing user in bash script在 bash 脚本中更改用户
【发布时间】:2020-05-29 16:49:45
【问题描述】:

我想为我的树莓派创建一个安装脚本,它通过配置/强化 ssh、安装防火墙和 fail2ban 以及最终摆脱 Raspbian 的默认用户来保护默认安装。所有其他部分都可以工作,但最后一部分总是向我显示错误。 新用户被创建并添加到 sudo 组。之后我想删除旧用户'pi'。由于脚本在 'pi' 的用户上下文中使用 sudo 运行,我想我可以通过切换到 '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"

如果我检查“用户”,用户“pi”已经消失,但我仍然可以使用此帐户登录。如何在脚本中解决这个问题?

我尝试了在这里找到的答案:How do I use su to execute the rest of the bash script as that user? 和这里:https://unix.stackexchange.com/questions/361327/how-to-login-as-different-user-inside-shell-script-and-execute-a-set-of-commands,但似乎没有任何效果。我搜索了谷歌,但我找不到任何有效的解决方案。有没有可能是我想要的?

【问题讨论】:

  • users 列出当前登录的用户。它没有说明谁可以登录和不能登录。您确定su -c "deluser -remove-home pi" 成功且没有错误吗?
  • 不,这就是重点。最后一行 su -c "deluser -remove-home pi" 显示错误并且 pi 没有完全删除。只有 /home 目录消失了,但用户仍然可以登录

标签: bash authentication raspberry-pi sudo


【解决方案1】:

我通常在bash 脚本的开头添加set -eux。这允许调试和查找错别字和错误。

尝试在脚本中切换用户

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

【讨论】:

  • 感谢 'set -eux' 提示。如果我使用您的建议,我会收到错误“Bad sbstituton”
【解决方案2】:

我认为我找到了问题的原因。 '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 有没有办法在脚本中停止这个进程?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 2019-02-05
    • 2019-02-02
    • 1970-01-01
    • 2019-07-27
    • 2011-09-06
    相关资源
    最近更新 更多