linux - 对 sudo 与 su 和运行脚本感到困惑

标签 linux shell sudo su

当我执行 sudo su - john 时,我将成为用户 john 而无需 要求输入密码。
但是当我这样做时:sudo su - john/usr/share/script_to_run.pl 我被要求输入密码。 sudo -u john/usr/share/script_to_run.pl

也一样

为什么?我在这里做错了什么?

最佳答案

现在,首先,- 表示您需要一个登录 shell。第一条语句意味着您想要以 root 身份(因此是 sudo)使它在您以 john 身份登录时显示。在某处配置为您当前登录的用户有权在不使用密码的情况下执行 sudo。

第一种情况是您执行一个命令 su - john(意思是“以 john 身份登录),然后您以 root 用户身份执行此操作(因为你把 sudo 放在第一位。你当前的用户有 sudo-without-password-rights,root 有权成为任何用户。

第二次尝试是错误的。您不能使用 su 以这种方式执行命令,当您希望 su 执行单个命令时,我认为没有理由将其设置为登录 shell。

在第三个选项中,您(作为当前登录的用户)想要“成为”john 执行一个命令。为此,您需要 john 的密码。 (但是,当您以 root 身份执行此操作时,您不需要密码。)

要让它工作,你可能会尝试

sudo su --command="/usr/share/script_to_run.pl" john

或者甚至是更具异国情调的外观

sudo sudo -u john /usr/share/script_to_run.pl

关于linux - 对 sudo 与 su 和运行脚本感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18141762/

相关文章:

c - 在 Linux 下使用信号量和共享内存

Dockerfile : bind9: unrecognized service

linux - 比较一个文件中的数字,并在该数字出现在 shell 脚本中的字符串内时将其与文件中的数字进行匹配

bash - 如何在 bash 脚本中使用 ssh 在计算机上执行 sudo

linux - 如何从 UTF-8 文件中删除 BOM?

python - 如何在 Linux 上的 Python 中对该表进行排序

c++ - 访问类的 std::string 时崩溃

linux - 在行的中间添加文本

linux - 如何使用 sudo 权限从 Jenkins 运行远程 ssh session ?

linux - sudo ./jetty 停止或启动失败