如何以 root (sudo) 身份运行 shell 脚本?

问题描述 投票:0回答:6

我有一个在存储库用户下运行的 SVN 存储库服务器。我想在每次提交后操作后运行脚本。我编写了一个 shell 脚本,每次提交后都会从钩子运行。它需要以 root 身份运行。这就是为什么我在脚本中使用了 sudo,但它不起作用。 有什么方法可以以 root 身份运行脚本吗?

sudo su
echo "password"
svn export --force file:///home/repository/trunk/ /home/memarexweb/public_html/devel/
chmod -R 777 /home/memarexweb/public_html/devel/
svn shell sudo
6个回答
14
投票

我四处寻找,发现了这个有用的解决方案:

编辑您的

sudoers
文件以允许在没有密码的情况下运行某些命令。

最好将您的

post-commit
脚本分成两部分,其中一部分将通过
sudo
运行。

  • 进入

    /etc/sudoers

    loqman    ALL=(root) NOPASSWD: /usr/local/bin/svn-postcommit-export
    
  • 您的提交后挂钩:

    #!/bin/sh
    sudo /usr/local/bin/svn-postcommit-export
    
  • 脚本

    /usr/local/bin/svn-postcommit-export

    #!/bin/sh
    svn export --force file:///home/repository/trunk/ /home/memarexweb/public_html/devel/
    chmod -R 777 /home/memarexweb/public_html/devel/
    

    (您可以选择任何名称并将脚本放在任何位置;我只是建议

    svn-postcommit-export
    作为示例,并将
    /usr/local/bin
    作为常用位置。)


7
投票
sudo su

启动一个新进程,由 root 用户拥有。该进程终止或停止后,下一行将再次以执行脚本的用户身份执行。

一个可能的解决方案是使用 sudo 运行整个脚本,并授予其使用 sudo 的权限来执行脚本。为此,您需要使用

/etc/sudoers
命令编辑
visudo
文件。


5
投票

以 root 身份运行脚本:

sudo sh your-script.sh

1
投票

在脚本的最后一行,您将

/home/memarexweb/public_html/devel/
的模式更改为 777,因此用户“存储库”应该能够将文件复制到该目录,而无需 root 权限。在这种情况下,您不需要使用 sudo 或 su。

但是,将目录的权限更改为 777 是危险的,因为它允许任何人写入该目录以及创建或删除文件。最好将目录的所有权更改为用户“repository”并将模式更改为 755。如果这不可行,您可以添加 POSIX ACL 允许“repository”写入该目录。您可以通过 Google“POSIX ACL”获取更多信息,或者阅读

getfacl
setfacl
的手册页。


0
投票

这是行不通的,最好的办法是只将需要的命令放入 shell 脚本中。然后setuid脚本本身,像这样(使用root):

chmod u+s myscript.sh

这样,执行这个脚本就会获得该脚本的所有者(root)的权限。

编辑:正如评论中提到的,shell 脚本不允许使用 Stuid。该解决方案仅适用于可执行文件。


0
投票

Google 刚刚为我从 Geeks for Geeks 中吐出了这个好消息:

    #!/usr/bin/sudo bash
    
    echo "Do your sudo script stuff here"
© www.soinside.com 2019 - 2024. All rights reserved.