操作系统: Arch Linux
Linux版本: 4.16.11
须藤版本: 1.8.23
我需要什么:
any executable与sudo使用密码提示/home/username/script.sh没有密码提示的情况下执行一个可执行文件。当我这样配置时
username ALL=(ALL) NOPASSWD: /home/username/script.sh
Run Code Online (Sandbox Code Playgroud)
我对 有想要的效果script.sh,但我不能executable用sudo.
例子
$ 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)
看来这是替换的结果ALL有NOPASSWD,看来我需要两者。如果sudoers文件已ALL供用户使用,我可以使用密码提示执行任何我想要的操作
username ALL=(ALL) ALL
Run Code Online (Sandbox Code Playgroud)
我试图结合 ALL 和 NOPASSWD 但没有结果
username ALL=(ALL) …Run Code Online (Sandbox Code Playgroud) 我在终端中犯了一个错误,现在每次使用 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。任何帮助将不胜感激。
谢谢
我对不得不在我的 Ubuntu 机器上使用 sudo 感到恼火。以下是一些原因:
我想改变这种情况,让它更像 Windows XP(现在就像 Windows Vista UAC 废话),我基本上可以用我的机器做任何我想做的事情。是的,是的,我意识到即使在 Windows XP 上也存在某些您无法修改的重要系统文件,但它仍然比 Ubuntu 情况好得多。是的,我意识到它更不安全,但坦率地说,我不在乎(我已经成年了,可以为我的选择负责,应该是众所周知的粉丝)。
我已经尝试过的事情(或其他成员建议的):
我有一些想法,但不知道它们是否会起作用或如何使它们起作用:
有人能帮我吗?
[更新]
添加别名虽然有点烦人,但似乎是最有前途的方式。不幸的是,突出的问题是:
很多人对我的要求表示不同意,并拒绝了我的问题,大概是因为他们认为降低系统的“安全性”是一个可怕的想法。我会恭敬地不同意,因为我认为这是一种非常狭隘的观点。安全措施不是凭空存在的——它也必须可用才能有效。如果它变得繁琐和烦人,那么人们会尽其所能来规避它。
我将采用技术含量更高的路线来绕过它,但是当普通用户选择短密码时,或者当他们被迫选择极其复杂的密码时写下他们的密码时,您就会看到它。评论中的共识是这是用户的错,或者用户应该忍受设计得很糟糕的安全措施,而我真的觉得这是设计师/程序员的错。应该有更高的门槛。最让我生气的是系统可以帮助你但没有。操作系统/程序显然知道我什么时候没有权限做某事——为什么不直接问我提升我的权限级别?为什么它让我重做一切,除了这次使用 sudo?
那些说它可以防止你不小心搞砸你的系统的人
我修改了 /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) $ 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)
也工作正常。
我在 Debian Squeeze 上使用 Bash。我刚刚阅读了这个主题:将 crontab 的默认文本编辑器更改为 vim
我已经为普通用户和 root导出了变量VISUAL和EDITORvim。这是有效的 - 当我crontab -e以普通用户或 root 身份输入时,crontab 运行 vim 进行编辑。
但是运行sudo crontab -e打开nano。
运行sudo echo $EDITOR(或$VISUAL)给出了vimint 输出。
我想杀死进程名称中包含 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) 阅读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 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 并不能解决问题。
sudo ×10
linux ×4
permissions ×2
awk ×1
bash ×1
command-line ×1
crontab ×1
curl ×1
gnu ×1
macos ×1
nano ×1
networking ×1
proxy ×1
python ×1
redirection ×1
ssh ×1
su ×1
sudoers ×1
terminal ×1
text-editors ×1
ubuntu ×1
vim ×1
xargs ×1