2013-07-17 108 views
-3

我犯了一个剧本,我的开发人员内部/root/prepare_server.sh如何以root身份在bash中运行命令?

#!/bin/bash 

FILES="/var/www/html/crm/cicrm/cache/ 
/var/www/html/crm/cicrm/data/ 
/var/www/html/crm/cicrm/logs/ 
/var/www/html/crmtest/cicrm/cache/ 
/var/www/html/crmtest/cicrm/data/ 
/var/www/html/crmtest/cicrm/logs/" 

for f in $FILES 
do 
echo "processing $f" 1>&2 
if [[ ! -e $f ]]; then 
    mkdir $dir 
elif [[ ! -d $f ]]; then 
    echo "$f already exists but is not a directory" 1>&2 
fi 
done 

chown -R manager:phpdev /var/www/html/crm/ 
chown -R manager:phpdev /var/www/html/crmtest/ 
chown -R manager:phpdev /var/redmine/crmGit/ 
chown -R manager:phpdev /var/redmine/owncloudGit/ 
chmod -R 770 /var/redmine/crmGit/ 
chmod -R 770 /var/redmine/owncloudGit/ 
chmod -R 770 /var/www/html/crm/ 
chmod -R 777 /var/www/html/crm/cicrm/cache/ 
chmod -R 777 /var/www/html/crm/cicrm/data/ 
chmod -R 777 /var/www/html/crm/cicrm/logs/ 
chmod -R 770 /var/www/html/crmtest/ 
chmod -R 777 /var/www/html/crmtest/cicrm/cache/ 
chmod -R 777 /var/www/html/crmtest/cicrm/data/ 
chmod -R 777 /var/www/html/crmtest/cicrm/logs/ 

,整个迪尔斯只能由我所拥有: 经理:phpdev

通常当我更新的开发人员使用Git的所有文件,该权限正在改变为开发人员:开发人员,

我的用户(开发人员:开发人员)如何运行我的脚本?

+0

'男人sudo' - 你可以给开发者运行一个脚本的能力。警告:脚本文件是非常不安全的 - 如果有人想要做一些破坏,他们可以。 –

回答

0

使用sudo,您可以在/etc/sudoers文件编写规则,比如像:

# format: user host = (run as) NOPASSWD: path 
developer ALL=(root) NOPASSWD: /root/prepare_server.sh 

man sudoers了解更多详情。

或者您可以使用SUID来运行脚本根:

chown root /root/prepare_server.sh 
chmod u+s /root/prepare_server.sh 

https://en.wikipedia.org/wiki/Setuid

+0

像我想要的那样工作得很好,我总是在使用sudo之前得到错误,因为困难在那里抽样。 – kreamik

0

在机器上安装软件包sudo,该软件包允许您授予非root用户以root身份运行特定命令的权限。

然后,授予您的开发人员运行该特定脚本的权限。

+0

可以sudo只给chown和chmod而不是关闭所有文件夹的文件夹,我的意思是开发人员只能chown和chmod只为/ var/www/html但不能在我的/ home/manager中执行? – kreamik

+0

这种类型的控制在SELinux的范围内比'sudo'多。但是,您可以使用已经编写好的'prepare_server'脚本,将它放在适当的位置(想到'/ usr/local/sbin'),并授予开发人员访问权限以运行*该脚本和仅具有root权限的脚本*使用'sudo'。 –

+0

当我给开发者sudo chmod和sudo chown作为根的功能时,他们只能在特定文件夹中使用它并阻止它到其他文件夹吗? – kreamik

0

sudo

设置您的sudoers文件根据自己的喜好。您可以对其进行设置,以便它们只能运行某些命令,并且无需密码即可完成。

+0

可以sudo只给chown和chmod而不是关闭所有文件夹的文件夹,我的意思是开发人员只能chown和chmod只能为/ var/www/html但不能在我的/ home/manager中执行? – kreamik

+0

@ kreamik Sudo本身无法做到这一点,但一个好的Unix管理员可以安排任何数量的解决方案。如果是linux,那么selinux策略可能就足够了。如果这是为了挑选一个订单,你可能会为应用设置一个chroot监狱。这可能是一个更好的问题[服务器故障](http://serverfault.com/) –

+1

@ kreamik老实说,如果你担心他们会用他们的根权力做什么,那么给他们运行*任何东西*作为根是一个坏主意。 –

相关问题