我必须在Ubuntu上编写一个脚本,一些命令需要root权限。 该脚本充满了普通的linux命令。 是否可以编写一个开关用户(su)脚本来自动执行密码提示,而无需用户干预? 需要帮忙…
我忘了告诉你,我被要求禁止所有用户的sudo访问,我做到了。 备用选项?
谢谢!
你应该使用sudo 。 在文件/etc/sudoers您可以configuration应该以root权限运行的命令以及是否需要密码。
尝试“bash -p”,如果-p没有给出,bash将保持原来的uid / gid,即使suid。
正如你所说,你无法使用sudo,你可能会想到另一种方式。 您是否能够以root身份运行该脚本,并且以不需要以root身份运行的部分的权限较低的用户可以su?
正如已经说过的,sudo正是你需要和最好的解决scheme(你知道,你可以限制sudo访问每个命令分开?)
看看sudo 。 有了这个,你可以用root权限运行特定的命令,不pipe有没有要求input密码。
它应该已经安装在你的Ubuntu系统上
编辑
Sudo被devise为以安全,可控和可审计的方式完成您想要的任务。 最安全的做法是允许用户通过sudo运行脚本。 这不允许用户访问单个命令。
与政策制定者的讨论应该随之而来。
编辑2
您必须授予用户许可,才能成功运行sudo -s,然后通过sudo运行特定的shell。 只要授予用户运行脚本的权限,就不会授予运行sudo -s的权限。
您所描述的方法将要求任何可以运行该脚本的人都能够读取该脚本 – 因此也就是root密码。
我被要求禁用所有用户的sudo访问权限
! 你被要求禁用一些非常聪明的人专门devise的子系统来为指定用户提供有限的root访问权限,现在你需要使用你自己的家庭解决scheme为指定的用户提供root权限(并提议解决问题的一个非常糟糕的方法)。
你可以在文件权限上设置粘性位,但是要花费很长时间去考虑这个问题 – 看起来你和要求你禁用sudo的人都不能真正理解Unix权限模型。
为什么不只是失去伪装,给用户root密码呢?
做你自己的包装:
/* mywrapper.c */ #include <unistd.h> extern char **environ; main() { environ=NULL; /* clear environment variables for sanity */ setuid(0); return execl("/usr/local/bin/script.sh", "script.sh", NULL); }
然后gcc -o mywrapper mywrapper.c ; chown root mywrapper; chmod u+s mywrapper gcc -o mywrapper mywrapper.c ; chown root mywrapper; chmod u+s mywrapper gcc -o mywrapper mywrapper.c ; chown root mywrapper; chmod u+s mywrapper ,你准备好了。