Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.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 在用户登录时从脚本调用sudo 脚本:_Linux_Bash_Shell_Sudo - Fatal编程技术网

Linux 在用户登录时从脚本调用sudo 脚本:

Linux 在用户登录时从脚本调用sudo 脚本:,linux,bash,shell,sudo,Linux,Bash,Shell,Sudo,在基于Linux的操作系统中通过标准图形登录屏幕登录时,我想自动运行一个脚本。此脚本进行一些需要root权限的系统调用。更具体地说,在我的Fedora19框中,我想运行一个脚本,在我登录后,它会要求我输入根密码以运行cryptsetup,并装载实用程序以解锁和装载LUKS加密分区(以及LUKS密码) 例子: 下面是一个简单脚本的示例,假设luks.sh保存到/home//目录中。要使用可视组件从脚本获取密码,我使用yad #!/bin/bash STYLE="--text-align=cente

在基于Linux的操作系统中通过标准图形登录屏幕登录时,我想自动运行一个脚本。此脚本进行一些需要root权限的系统调用。更具体地说,在我的Fedora19框中,我想运行一个脚本,在我登录后,它会要求我输入根密码以运行cryptsetup,并装载实用程序以解锁和装载LUKS加密分区(以及LUKS密码)

例子: 下面是一个简单脚本的示例,假设luks.sh保存到/home//目录中。要使用可视组件从脚本获取密码,我使用
yad

#!/bin/bash
STYLE="--text-align=center --borders=15 --center --sticky --on-top --width=400"
TITLE="Input root password"
password=$(yad $STYLE --entry --title="$TITLE" --text="$TITLE." --hide-text)

# Make a call to test "sudo". If it is sucessful, subsequent sudo calls won't
# require a password anymore):

err=$(echo $password | sudo -S -- echo "" 2>&1)
yad --notebook $STYLE --title="Sudo output" --text "Exit code: $?, Msg: $err"
问题: 我想上面的脚本后登录。我尝试了几种选择:

  • 在my*/home/.bash_配置文件末尾添加
    bash luks.sh
    *
  • 在我的*/home/.bash\u配置文件末尾添加
    bash luks.sh&
    *
  • 在我的*/home/.bash\u配置文件末尾添加
    sleep 30&&bash luks.sh&
    *
  • 如上所述,尝试在循环中检查sudo 30秒
  • 将以上所有内容添加到系统/首选项/启动应用程序中
每次出现错误时:
sudo:对不起,您必须有一个tty才能运行sudo
。出于某种原因,无论我将此脚本的执行放在何处,它都没有tty。一种解决方案是修改/etc/sudoers中的requirety选项。但这是一种安全威胁,我不能走这条路(见下文动机部分)

所以我的问题是:有没有办法在登录后用sudo运行脚本,而不需要降低安全限制?

动机:
我需要在引导后解锁并挂载分区,这样我还可以执行lan唤醒和远程ssh访问(当引导在等待LUKS密码时卡住时,我无法执行)。每次登录时手动解锁分区是不够舒适的,我想将其简化为引导->登录->自动请求root和LUKS密码->解锁并装载LUKS分区。我不能降低安全性限制,因为我需要在多台工作计算机上使用它。它必须在有密码的用户下运行,并且总是必需的。

您可以尝试gksudo。我不知道gksudo是否需要终端,但使用gksudo比通过yad获取输入并手动将其输入到sudo更干净。它还应该采用相同的命令行参数。如果不先禁用“requiretty”选项,那么简单地尝试覆盖它似乎无法解决此问题。当然,完全禁用它不是一个很好的主意,因此您必须针对特定实体选择性地禁用它。例如,您可以创建特定组,然后在常规默认设置下的/etc/sudoers中添加异常:

Defaults requiretty
Defaults:%notty !requiretty

这将删除“notty”组的“Requiredty”限制。

谢谢您的提示。Fedora中没有
gksudo
。但是,有
beesu
,它适用于上面的脚本!我现在没有带原始脚本来尝试,但到目前为止,似乎您解决了我的问题:-)。这里“ssh-t”就足够了吗?