小编典典

在python中更改用户

linux

我正在编写一个简单的脚本,该脚本可以重新启动hadoop从属服务器。在脚本中,我必须以root用户身份进行一些初始更改。之后,我必须更改为用户“
hadoop”并执行命令集。我使用os.system运行命令,但是我怀疑它是否运行良好。例如:

uid=pwd.getpwnam('hadoop')[2]
os.setuid(uid)
os.system('whoami')
os.chdir('/home/hadoop/hadoop/')
os.system('bin/hadoop-daemon.sh stop tasktracker')

再一次,我必须以root用户身份执行一些命令,然后再次成为用户“ hadoop”并执行:

os.system('bin/hadoop-daemon.sh stop tasktracker')

我在这里有三个问题,

  1. os.system是我可以用来发出linux命令的最佳命令吗?

  2. 我可以通过上面的命令从root用户更改为hadoop用户,但无法更改为root用户(我知道如果他们允许的话,将会出现安全问题,我想知道这样做是否有可能,至少要通过密码)?

  3. os.setuid()是否起作用?whoami打印用户hadoop,但使用这些命令不会停止进程“ tasktracker”,但是,如果我手动执行相同的命令,它将运行良好(我在手动尝试时使用“ su hadoop”而不是setuid)。

感谢你的帮助。

  • 濑户

阅读 509

收藏
2020-06-03

共1个答案

小编典典

您可以使用:

os.system('sudo -u hadoop bin/hadoop-daemon.sh stop tasktracker')

或者如果您没有sudo但有su

os.system('su hadoop -c "bin/hadoop-daemon.sh stop tasktracker"')
2020-06-03