Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux shell脚本:导航到根目录_Linux_Shell_Scripting_Debian - Fatal编程技术网

Linux shell脚本:导航到根目录

Linux shell脚本:导航到根目录,linux,shell,scripting,debian,Linux,Shell,Scripting,Debian,我正在编写一个简单的shell脚本,它需要root权限。使用终端如果您键入sudo su并输入密码,它肯定会工作。 我想将密码传递到脚本文件,然后将其传递到系统以成为root ex: pass= $1 navigateToRoot($pass) 更好的办法是: chmod +s yourfile chown root yourfile 通过设置setuid位,文件将作为root所有者执行,而无需存储或传递root密码 确保没有其他人可以修改脚本 chmod o-w yourfile 见评论

我正在编写一个简单的shell脚本,它需要root权限。使用终端如果您键入sudo su并输入密码,它肯定会工作。 我想将密码传递到脚本文件,然后将其传递到系统以成为root ex:

pass= $1
navigateToRoot($pass)

更好的办法是:

chmod +s yourfile
chown root yourfile
通过设置setuid位,文件将作为root所有者执行,而无需存储或传递root密码

确保没有其他人可以修改脚本

chmod o-w yourfile
见评论:


SETUID不适用于Shell脚本,因此此答案无效。

根据您对该问题的评论,我假设您确实希望以某种替代方式向用户询问密码,而不是将密码以明文形式保存在文件中

您可以使用-A标志来表示sudo。来自man sudo:

通常,如果sudo需要密码,它将从当前终端读取密码。如果指定了-A askpass选项,则可能 执行图形助手程序来读取用户的密码和密码 将密码输出到标准输出。如果SUDO_ASKPASS 如果设置了环境变量,它将指定辅助对象的路径 程序否则,由中的askpass选项指定的值 使用sudoers5


如果你想从脚本发送密码,你需要一种能够在-s上做奇怪事情的脚本语言,比如说,它基于一种我非常不喜欢的脚本语言


但是一个配置良好的sudo,或者使用较少的命令,或者可能是一个在C中非常谨慎地编码的二进制可执行文件,它是setuid并调用一些其他脚本,应该足够了…

你不能。如果你可以的话,那将是一件可怕的事情。假设我想从另一个程序中读取它。从某个应用程序中获取文本框并将其传递给系统如果需要root访问权限,则说明您做得不对。您是对的,LINUX会忽略任何已解释的语言,因此这在shell脚本上不起作用。我今天学到了一些东西!setuid不能在shell脚本上工作,因为如果它能工作,会带来可怕的安全隐患。