-1

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

但我需要能够以非 root 用户 joshmoe 的身份使用 virtualenv。(并以其他用户身份启动/停止 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 文件来指定该文件的来源——我似乎成功地访问了该“激活”文件,但没有访问内置的源函数。以下任何一行都会在 sudoers 中给出语法错误:

joshmoe ALL=NOPASSWD: source 

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

我发现了很多不寒而栗的例子。但我无法弄清楚使这项工作有效的语法。我希望一旦我得到这个,我将能够访问诸如“服务 postgresql 状态”之类的语句。

4

2 回答 2

0

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

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 内置函数、函数或别名,这就是你得到那个错误的原因。

于 2013-09-29T17:10:44.937 回答
0

你不能运行sourcesudo source; 它是 bash 的内置命令,而不是程序。您在这里想要做的可能是以超级用户身份使用sudo -s.

于 2013-09-29T17:11:42.517 回答