我有一些问题。我正在尝试创建一些 bash 脚本来自动执行某些任务。我需要以普通用户身份执行任务的第一步,然后 su - 以 root 身份完成任务。
我一直在想是否有办法做到这一点?到目前为止,我只能以普通用户身份启动 bash,完成第一步,要求输入 su - 密码,但在以 root 身份连接后,脚本停止。
以 root 身份登录后还能继续使用 bash 吗?
先感谢您。
附言:如果我不够准确,或者您需要一些信息,请随时询问,我会尽力纠正这些错误。
答案1
您是否尝试过使用sudo somecommand
而不是尝试切换用户?您的用户需要属于“wheel”用户组(取决于您的系统)才能执行此操作。
su
改变环境(用户变量等),所以,虽然我还没有测试过,但你可能无法在 shell 脚本中做到这一点。
例如:
你的 shell 脚本是
#Do these commands as a normal user
echo "Hello World"
cat ./somefile
#Do these commands as root
su -
echo "Hello again"
cat /etc/somesystemfile
尝试将其更改为
#Do these commands as a normal user
echo "Hello World"
cat ./somefile
#Do these commands as root
sudo echo "Hello again"
sudo cat /etc/somesystemfile
答案2
以 root 身份启动该进程,然后使用 执行普通用户任务su (-) user -c ..command..
,最后以 root 身份完成。这样它甚至不会要求输入密码。
答案3
如果您希望脚本能够以 root 身份执行特定命令,而当它以 another_user 身份运行时,那么您应该使用 sudo。
配置 sudo 以允许 another_user 执行特定命令,在 sudoers 文件中类似如下内容,
someuser ALL=/path/to/specific_command
然后在 Bash 脚本中使用,
sudo /path/to/specific_command -some -args
如果您希望 bash 脚本以 root 身份运行大量命令,或者运行 mv 或 cp 等常规命令,您可能需要从不同角度来处理这个问题。编写脚本,使其以 root 身份运行(例如在 root 的 crontab 中),并让其使用 'su - 某些用户' 因为 root 无需输入密码即可做到这一点。
答案4
我找到了答案,只需要使用 su - -c "" cmd。
例如:
tar /home/me /dev/null
su - -c "yum update -y"
tar /home/me /dev/null
su - -c "
yum install xterm -y
yum clean-all
yum remove xterm -y
"