自动化“sudo su - user”命令


5

我想自动化

sudo su - user 

从脚本。然后它应该要求输入密码。


1
不要sudo su - usersudo -iu user改为使用。(sudoers顺便说一下,更容易管理。)
grawity 2011年

你怎么能跑sudo su不跑sudo visudo
Hello71 2011年

Answers:


8

我会试着猜猜你问的是什么。

如果你想在sudo su - user没有密码的情况下使用,你应该(如果你有权限)在你的sudoers文件上执行以下操作:

<youuser>  ALL = NOPASSWD: /bin/su - <otheruser>

哪里:

  • <yourusername> 你是用户名:D(saumun89,ie)
  • <otheruser> 是您要更改为的用户

然后放入脚本:

sudo /bin/su - <otheruser>

这样做,不会让后续命令运行<otheruser>,它会产生一个新的shell。如果要在脚本中以其他用户身份运行另一个命令,则应使用以下命令:

 sudo -u <otheruser> <command>

并在sudoers文件中:

<yourusername>  ALL = (<otheruser>) NOPASSWD: <command>

显然,更通用的行如:

<yourusername> ALL = (ALL) NOPASSWD: ALL

将事情完成,但会授予任何人做任何事情的许可。


当sudo su - user命令被执行时,它会要求输入密码。我想要一个解决方案,其中脚本automaticaaly从某处读取密码。我没有许可去做你之前说的话。
sam

我有权将密码存储在文件中。该脚本应该从该文件读取密码
sam

3

你可以使用命令

 echo "your_password" | sudo -S [rest of your parameters for sudo]

(当然没有[和])

请注意,您应该保护您的脚本免受未经授权用户的读取访问。如果要从单独的文件中读取密码,可以使用

  sudo -S [rest of your parameters for sudo] < /etc/sudo_password_file

(或者密码文件的名称,包含密码和单行中断。)

来自sudo手册页:

   -S          The -S (stdin) option causes sudo to read the password from
               the standard input instead of the terminal device.  The
               password must be followed by a newline character.

这实际上适合我。
AlexandruC

这是辉煌的
奥斯卡佛利

1

最简单的方法是使用户根本不必输入密码。

你可以通过运行visudo,然后改变看起来像这样的行来做到这一点:

someuser  ALL=(ALL) ALL

someuser  ALL=(ALL) NOPASSWD: ALL

但是,如果它仅用于一个脚本,那么将无密码访问限制为仅该脚本并删除它会更安全(ALL),因此它们只能以root用户身份运行,而不能以任何用户身份运行,例如

Cmnd_Alias THESCRIPT = /usr/local/bin/scriptname

someuser  ALL=NOPASSWD: THESCRIPT

运行man 5 sudoers以查看sudoers手册页中的所有详细信息。


我没有权限编辑sudoers文件..任何其他,以便它应该从某处读取密码,以便可以自动完成此操作。
sam

你运气不好......你可以这样做,expect但是可以说,但这会让你的用户的密码硬编码到某个地方,人们可以看到它(授予你以正确的方式设置权限,它仍然可以被root读取)。
Torian

尝试使用expectman expect详情。
米克尔

当sudo su - user命令被执行时,它会要求输入密码。我想要一个解决方案,其中脚本automaticaaly从某处读取密码。我没有权限编辑sudoers file.i有权将密码存储在一个文件中
sam
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.