标签: sudo

Sudoers NOPASSWD 用于单个可执行文件但允许其他可执行文件

操作系统: Arch Linux

Linux版本: 4.16.11

须藤版本: 1.8.23

我需要什么

  • 能够执行any executablesudo使用密码提示
  • 能够在/home/username/script.sh没有密码提示的情况下执行一个可执行文件。

当我这样配置时

username ALL=(ALL) NOPASSWD: /home/username/script.sh
Run Code Online (Sandbox Code Playgroud)

我对 有想要的效果script.sh,但我不能executablesudo.

例子

$ sudo ./script.sh # runs fine!
Run Code Online (Sandbox Code Playgroud)

尝试别的

$ sudo nano /etc/sudoers
[sudo] password for username: 
Sorry, user username is not allowed to execute '/usr/bin/nano 
/etc/sudoers' as root on hostname.
Run Code Online (Sandbox Code Playgroud)

看来这是替换的结果ALLNOPASSWD,看来我需要两者。如果sudoers文件已ALL供用户使用,我可以使用密码提示执行任何我想要的操作

username ALL=(ALL) ALL
Run Code Online (Sandbox Code Playgroud)

我试图结合 ALL 和 NOPASSWD 但没有结果

username ALL=(ALL) …
Run Code Online (Sandbox Code Playgroud)

linux sudo gnu permissions sudoers

7
推荐指数
1
解决办法
7990
查看次数

不小心在 Mac 上的 sudo 文件中的注释之外添加了一个字符,sudo 不再起作用

我在终端中犯了一个错误,现在每次使用 sudo 时,都会收到错误消息: sudo: unable to initialize PAM: Invalid argument

我知道我搞砸了什么,即在以下文件中的注释之外添加一个字符:/etc/pam.d/sudo

内容如下:

x# sudo: auth account password session
auth       sufficient     pam_tid.so
auth       sufficient     pam_smartcard.so
auth       required       pam_opendirectory.so
account    required       pam_permit.so
password   required       pam_deny.so
session    required       pam_permit.so
Run Code Online (Sandbox Code Playgroud)

发生的事情是我正在使用 nano 编辑此文件以添加pam_tid.so到此文件,以便我可以使用 touch id 绕过 sudo。然后我按 Ctr+x 退出,但错过了 Ctr 并且没有看到评论之外的 x。因此,当我尝试使用 sudo 时,出现错误。最糟糕的是,要编辑此文件,我需要 sudo。任何帮助将不胜感激。

谢谢

terminal sudo nano macos

7
推荐指数
1
解决办法
1238
查看次数

让普通用户在 Ubuntu 上自动 Root(即,让 Ubuntu 表现得像 Windows XP)

我对不得不在我的 Ubuntu 机器上使用 sudo 感到恼火。以下是一些原因:

  1. 我打开了一些 root 拥有的文件,但我忘记用 sudo 打开它。现在,我对文件进行了大量更改,但最后当我尝试保存它时才意识到我不能。现在我必须用 sudo 重新打开文件,并重新应用我的所有更改。
  2. 我想通过 nautilus 移动一些文件,但我没有意识到它们归 root 所有。会弹出一个错误对话框,再次,我必须用 gksudo 重新打开 nautilus。这通常适用于所有 GUI 应用程序。
  3. 假设我安装了 MySQL,我想查看它的一些配置文件。由于文件权限,我无法查看文件,有时甚至无法进入目录,除非我成为 MySQL 用户或 root(执行诸如“sudo cd [path]”之类的操作不起作用)。

我想改变这种情况,让它更像 Windows XP(现在就像 Windows Vista UAC 废话),我基本上可以用我的机器做任何我想做的事情。是的,是的,我意识到即使在 Windows XP 上也存在某些您无法修改的重要系统文件,但它仍然比 Ubuntu 情况好得多。是的,我意识到它更不安全,但坦率地说,我不在乎(我已经成年了,可以为我的选择负责,应该是众所周知的粉丝)。

我已经尝试过的事情(或其他成员建议的):

  1. 删除 sudo 密码:还不错,但我仍然要记住在命令前加上 sudo
  2. 使超时时间很长:同上
  3. 别名命令:现在我不必记得经常给 sudo 添加前缀,但是必须不断地为新命令添加别名会让人厌烦
  4. 把自己加到合适的组里——好主意,自己没想到;然而,必须不断地将自己添加到新组中会让人厌烦

我有一些想法,但不知道它们是否会起作用或如何使它们起作用:

  • 使用 sudo 启动原始 gnome-session(即“sudo gnome-session”),并将其与上面的第 1 点和第 2 点结合起来。由于启动的所有其他进程将是原始 gnome-session 的子进程,因此这应该可以解决大多数问题。

有人能帮我吗?

[更新]
添加别名虽然有点烦人,但似乎是最有前途的方式。不幸的是,突出的问题是:

  1. 文件系统操作:我不想总是在前面有 sudo 因为如果文件不存在,那么它会被创建为由 root 拥有,这会带来很大的麻烦。我能想到的唯一方法(但它太危险了)是在文件系统命令周围编写一个包装器以添加 sudo 如果事实证明我正在修改一个根拥有的文件)。
  2. GUI 应用程序:同上。

很多人对我的要求表示不同意,并拒绝了我的问题,大概是因为他们认为降低系统的“安全性”是一个可怕的想法。我会恭敬地不同意,因为我认为这是一种非常狭隘的观点。安全措施不是凭空存在的——它也必须可用才能有效。如果它变得繁琐和烦人,那么人们会尽其所能来规避它。

我将采用技术含量更高的路线来绕过它,但是当普通用户选择短密码时,或者当他们被迫选择极其复杂的密码时写下他们的密码时,您就会看到它。评论中的共识是这是用户的错,或者用户应该忍受设计得很糟糕的安全措施,而我真的觉得这是设计师/程序员的错。应该有更高的门槛。最让我生气的是系统可以帮助你但没有。操作系统/程序显然知道我什么时候没有权限做某事——为什么不直接问我提升我的权限级别?为什么它让我重做一切,除了这次使用 sudo?

那些说它可以防止你不小心搞砸你的系统的人

sudo ubuntu

6
推荐指数
1
解决办法
9659
查看次数

自动化“sudo su - user”命令

我想自动化

sudo su - user 
Run Code Online (Sandbox Code Playgroud)

从一个脚本。然后它应该要求输入密码。

linux sudo su

6
推荐指数
2
解决办法
5万
查看次数

sudo 不保留 PYTHONPATH

我修改了 /etc/sudoers(使用 visudo)以保留环境变量:

Defaults        !env_reset

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

#includedir /etc/sudoers.d
www ALL = NOPASSWD: /usr/bin/env
Run Code Online (Sandbox Code Playgroud)

这几乎工作得很好:保留所有环境变量,除了 PYTHONPATH !

www@myhost:~$ env | grep PYTHON
PYTHONPATH=/home/www/python_commons:/home/www/python_commons/django_commons/apps:/home/www
www@myhost:~$ sudo env | grep PYTHON
www@myhost:~$
Run Code Online (Sandbox Code Playgroud)

我试图在 sudoers 中添加:

Defaults        env_keep += "PYTHONPATH" …
Run Code Online (Sandbox Code Playgroud)

sudo python

6
推荐指数
1
解决办法
6672
查看次数

为什么 sudo curl 忽略代理设置?

$ echo $http_proxy
http://my.proxy.com

$ curl -v http://files.com/a.txt
* About to connect() to proxy my.proxy.com
# Correct downloading

$ sudo echo $http_proxy
http://my.proxy.com

$sudo curl -v http://files.com/a.txt
# Hanging.
Run Code Online (Sandbox Code Playgroud)

最后一个命令不使用代理。为什么?

$su
$curl -v http://files.com/a.txt
Run Code Online (Sandbox Code Playgroud)

也工作正常。

networking sudo proxy curl

6
推荐指数
1
解决办法
7129
查看次数

为使用 sudo 调用的 crontab -e 设置默认编辑器

我在 Debian Squeeze 上使用 Bash。我刚刚阅读了这个主题:将 crontab 的默认文本编辑器更改为 vim

我已经为普通用户和 root导出了变量VISUALEDITORvim。这是有效的 - 当我crontab -e以普通用户或 root 身份输入时,crontab 运行 vim 进行编辑。

但是运行sudo crontab -e打开nano。

运行sudo echo $EDITOR(或$VISUAL)给出了vimint 输出。

linux sudo vim text-editors crontab

6
推荐指数
1
解决办法
4068
查看次数

sudo 杀死 ps、awk、xargs 的输出

我想杀死进程名称中包含 foo 的 root 拥有的进程

sudo sh -c "ps aux | grep [f]oo  | awk '{print $2}' | xargs kill -15"
Run Code Online (Sandbox Code Playgroud)

此命令失败,因为 awk 和 xargs 被忽略。

sudo sh -c "ps aux | grep [f]oo  | awk '{print $2}' | xargs kill -15"
Run Code Online (Sandbox Code Playgroud)

所以 kill 收到错误的参数

kill pid ...              Send SIGTERM to every process listed.
  kill signal pid ...       Send a signal to every process listed.
  kill -s signal pid ...    Send a signal to every process listed.
  kill -l                   List …
Run Code Online (Sandbox Code Playgroud)

sudo awk command-line xargs

6
推荐指数
1
解决办法
5605
查看次数

sudo -E 不传递所有变量

阅读man pages我希望sudo -E将所有环境变量传递给子shell,但我没有得到预期的结果。

正如预期的那样,很棒:

$ export LD_LIBRARY_PATH=/home/mmendez/toolchains/x86-destdir/usr/lib/
$ env | grep LD
LD_LIBRARY_PATH=/home/mmendez/toolchains/x86-destdir/usr/lib/
Run Code Online (Sandbox Code Playgroud)

更多精彩:

$ env -i LD_LIBRARY_PATH=/tmp/no/where env | grep LD
LD_LIBRARY_PATH=/tmp/no/where
Run Code Online (Sandbox Code Playgroud)

不是预期的:

$ env -i LD_LIBRARY_PATH=$LD_LIBRARY_PATH sudo -E /usr/bin/env | grep LD
$
$ env -i LD_LIBRARY_PATH=/tmp/no/where sudo -E /usr/bin/env | grep LD
$
Run Code Online (Sandbox Code Playgroud)

所以,我怎么能得到sudo -E通过LD_LIBRARY_PATH而无需编辑/etc/sudoers

编辑

根据 如何使 sudo 保留我的环境变量?OP 表明外壳可能与!env_reset. 我正在运行Arch Linux,默认 shell 是BASH. 再次,我不 …

sudo bash environment-variables

6
推荐指数
1
解决办法
2655
查看次数

为什么在通过 ssh、sudo 和 sh 时重定向失败?

阅读完这个问题后,我知道我必须这样做

sudo sh -c 'ls -hal /root/ > /root/test.out'
Run Code Online (Sandbox Code Playgroud)

以避免“权限被拒绝”错误。

但是当我这样做时

ssh hostname sudo sh -c 'ls -hal /root/ > /root/test.out'
Run Code Online (Sandbox Code Playgroud)

从另一台机器,我得到

bash: /root/test.out: Permission denied
Run Code Online (Sandbox Code Playgroud)

为什么?我怎样才能让它发挥作用?

编辑:有这条线

Defaults:<username>    !requiretty
Run Code Online (Sandbox Code Playgroud)

<username> ALL= NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)

/etc/sudoers

我可以

ssh remote-machine 'sudo ls /'
Run Code Online (Sandbox Code Playgroud)

没有任何问题。所以我不认为这是一个 tty 问题。添加 -t 并不能解决问题。

linux ssh sudo redirection permissions

6
推荐指数
1
解决办法
2210
查看次数