在python中更改用户

set*_*thu 5 python linux hadoop os.system

我正在写一个简单的脚本,重启一个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')
Run Code Online (Sandbox Code Playgroud)

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

os.system('bin/hadoop-daemon.sh stop tasktracker')
Run Code Online (Sandbox Code Playgroud)

我这里有三个问题,

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

  2. 我可以通过上面的命令从root用户更改为用户hadoop但我无法更改为root用户(我可以理解,如果他们允许这样做会有安全问题,我想知道有没有可能做到这一点,至少通过密码)?

  3. os.setuid()有用吗?whoami打印用户hadoop,但进程"tasktracker"没有停止使用这些命令,但如果我手动执行相同的命令它工作正常(我手动尝试时使用"su hadoop"而不是setuid).

感谢你的帮助.

  • Sethu

Mik*_*ike 7

你可以使用:

os.system('sudo -u hadoop bin/hadoop-daemon.sh stop tasktracker')
Run Code Online (Sandbox Code Playgroud)

或者如果你没有sudo,但有su

os.system('su hadoop -c "bin/hadoop-daemon.sh stop tasktracker"')
Run Code Online (Sandbox Code Playgroud)