在脚本中自动切换用户密码

在脚本中自动切换用户密码

我必须编写一个脚本,它需要 root 权限才能执行一些 linux 命令并停止和启动一些服务。我被要求完全禁用所有用户的 sudo 访问权限(因为普通用户可以使用命令“sudo -s”访问 root),我做到了。所以我正在寻找一个脚本来自动切换用户密码(su),而不需要用户干预。

编辑:1

经过进一步研究,我得到了我需要的以下脚本:

#!/usr/bin/python
import pexpect
import os
passwd = "my-root-password-here"
child = pexpect.spawn('su root')
child.expect('Password:')
child.sendline(passwd)
child.expect('$')
child.interact()

我检查了此脚本是否以普通用户身份手动登录,并且切换到 root 没有任何问题。但是当我输入exit/ctrl+d以切换回普通用户时,我收到以下错误:

Traceback (most recent call last):
 File "./su3.py", line 9, in <module>
  child.interact()
File "/usr/lib/python2.6/dist-packages/pexpect.py", line 1492, in interact
  self.__interact_copy(escape_character, input_filter, output_filter)
File "/usr/lib/python2.6/dist-packages/pexpect.py", line 1520, in __interact_copy
  data = self.__interact_read(self.child_fd)
File "/usr/lib/python2.6/dist-packages/pexpect.py", line 1510, in __interact_read
  return os.read(fd, 1000)
OSError: [Errno 5] Input/output error

有什么帮助吗……

答案1

sudo -s如果用户没有权限运行该 SHELL,他们就无法运行。

你想要的是让你的用户告诉你确切地他们希望能够运行哪些命令。要特别注意的是,他们想要运行的任何命令都是由 root 拥有所以他们以后无法用可以提升他们特权的东西来代替它们。

ifconfig比如,如果他们想竞选,

%netadmins ALL=(ALL) NOPASSWD: /sbin/ifconfig

尝试一下,您会发现 netadmins 组只能/sbin/ifconfig以 root 身份运行而无需输入密码。

答案2

如果您需要以非 root 用户身份运行该脚本,则应配置sudo为允许这样做。您可以为每个用户或组配置 sudo 以允许所有或仅允许某些命令,无论是否使用密码。完全禁用所有用户的 sudo 可能不是您想要的...

答案3

您可以在该脚本上设置执行粘性位,以便它始终以脚本所有者的身份执行。例如chmod 4750 script_name

预计可用于在脚本中自动响应。使用其中任何一种方式时都要小心,因为它们可能会带来安全风险,尤其是在向普通用户授予高级权限时。

正如 JanC 所说,正确配置 sudo(而不是完全禁用它)可能是最好的解决方案。

相关内容