![不使用 sudo 模拟用户初始登录](https://linux22.com/image/58459/%E4%B8%8D%E4%BD%BF%E7%94%A8%20sudo%20%E6%A8%A1%E6%8B%9F%E7%94%A8%E6%88%B7%E5%88%9D%E5%A7%8B%E7%99%BB%E5%BD%95.png)
我正在编写一个脚本来连接 2 个第三方程序。 (Datadog 和 AWS)
数据挖掘脚本用于sudo -u
运行我的脚本。
如果未模拟初始登录,我需要从中检索数据的脚本将出现段错误。
数据挖掘脚本没有权限sudo
。
我可以像这样重现错误:
[me] ~$ sudo -u dd-agent aws
[me] ~$ echo $?
139
当然,如果我执行sudo -iu
并运行该命令,它就可以正常工作。
是否可以模拟初始登录而不通过sudo
?
答案1
对于登录模拟(无需通过“sudo -i”),您必须使用“su”命令。
检查手册页中的参数“-”:
-, -l, --login
Starts the shell as login shell with an environment similar to a real login:
o clears all environment variables except for TERM
o initializes the environment variables HOME, SHELL, USER, LOGNAME, PATH
o changes to the target user's home directory
o sets argv[0] of the shell to '-' in order to make the shell a login shell
另外,你必须使用这里-文档。
例如,您可以使用“id”命令检查此打印登录用户的 ID:
#\bin\bash
id
su - user <<EOF
userPassword
id
#here you can execute your script
EOF
id
另外,如果您的程序出现分段错误......它会尝试访问不属于该程序的另一个内存段。