用于源virtualenv激活文件的Sudoer语句语法

时间:2013-09-29 16:56:55

标签: python linux postgresql virtualenv sudoers

我使用的是64位Centos 5 Linux。这附带Python2.4,但我需要2.6或更高才能获得psycopg2。我安装了一个虚拟环境来运行Python2.7.3(基于这个http://toomuchdata.com/2012/06/25/how-to-install-python-2-7-3-on-centos-6-2/)现在,当我以root用户身份登录时似乎运行良好。

但我需要能够将virtualenv用作非root用户joshmoe。 (并以其他用户身份启动/停止postgresql)

进入virtualenv的命令是:

source /root/Python-2.7.3/projectdir/bin/activate

可以理解的是,当我以joshmoe的身份运行此命令时,我收到了一条权限被拒绝的消息:

-bash: /root/Python-2.7.3/projectdir/bin/activate: Permission denied

为了让这个命令对joshmoe可用,我编辑了/ etc / sudoers以包含以下行:

joshmoe ALL=NOPASSWD: /root/Python-2.7.3/projectdir/bin/activate

现在从joshmoe登录,当我跑:

sudo source /root/Python-2.7.3/projectdir/bin/activate

我得到以下内容:

sudo: source: command not found

我似乎很清楚我没有正确使用sudoers文件来指定源文件 - 我似乎成功地访问了'activate'文件,但没有使用内置的源函数。以下任一行都会在sudoers中出现语法错误:

joshmoe ALL=NOPASSWD: source 

joshmoe ALL=NOPASSWD: source /root/Python-2.7.3/projectdir/bin/activate

我发现了许多颤抖声明的例子。但是,我无法弄清楚将使这项工作的语法。我希望一旦我得到这个,我将能够访问诸如'service postgresql status'等语句。

2 个答案:

答案 0 :(得分:0)

您的问题是您的用户没有root访问您的virutalenv目录。您需要授予用户访问权限,例如使用:

sudo chmod o+x /root                     # grant access to root directory
sudo chmod o+rX /root/Python-2.7.3 -R    # recursively grant access to everything in Python-2.7.3

source不是程序,它是一个shell butiltin,它导致脚本在当前shell中获取。 sudo只能执行程序,而不是shell内置函数,函数或别名,这就是你得到错误的原因。

答案 1 :(得分:0)

您无法像source一样运行sudo source;它是bash的内置命令,而不是程序。你想在这里做的可能是使用sudo -s作为超级用户启动一个新的shell。