gpt4 book ai didi

linux - 在用户登录时从脚本调用 sudo

转载 作者:太空狗 更新时间:2023-10-29 12:04:27 31 4
gpt4 key购买 nike

场景:

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

示例:

这是一个简单脚本的示例,假设我保存到 /home/ / 目录中的 luks.sh。要使用可视化组件从脚本中获取密码,我使用 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"

问题:

登录后我想要上面的脚本。我尝试了几种选择:

  • 在我的 */home/ /.bash_profile* 的末尾添加 bash luks.sh
  • 在我的 */home/ /.bash_profile* 的末尾添加 bash luks.sh &
  • 在我的 */home/ /.bash_profile* 的末尾添加 sleep 30 && bash luks.sh &
  • 与上述相同,并尝试在 30 秒的循环中检查 sudo。
  • 将以上所有内容添加到System/Preferences/Startup Appliacations

每次我得到一个错误:sudo: 抱歉,你必须有一个 tty 才能运行 sudo。出于某种原因,无论我把这个脚本的执行放在哪里,它都没有 tty。一种解决方案是修改 /etc/sudoers 中的requiretty 选项。但这是一种安全威胁,我不能这样做(请参阅下面的动机部分)。

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

动机:

我需要在启动后解锁并挂载分区,这样我还可以执行局域网唤醒和远程 ssh 访问(当启动卡在等待 LUKS 密码时我不能这样做)。每次登录时手动解锁分区不够舒服,我想将其简化为 Boot -> Login -> Get asked for root and LUKS password自动 -> 解锁并挂载 LUKS 分区。我不能降低安全限制,因为我需要为多台工作计算机使用它。它必须在拥有密码的用户下运行,并且始终需要密码。

最佳答案

看起来你不会通过简单地尝试覆盖 'requiretty' 选项而不先禁用它来解决这个问题。当然完全禁用它不是一个好主意,因此您必须为特定实体有选择地禁用它。例如,您可以创建一个特定的组,然后在/etc/sudoers 中的一般默认设置下添加一个异常(exception):

Defaults requiretty
Defaults:%notty !requiretty

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

关于linux - 在用户登录时从脚本调用 sudo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20181312/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com