我不明白为什么每次我想运行systemctl
命令时都会弹出此错误。我知道我必须使用 来运行它sudo
,它运行得很好,但我很好奇,为什么会发生这种情况?以前没有发生过这种情况,除了配置我的/etc/ssh/sshd_config
文件之外,我没有做任何特别的事情。
在此之前,如果我运行systemctl
不带 的命令sudo
,则会显示一条文本响应,请求我的用户的密码
但现在,这个要求不再出现了!这是为什么?
user@machine:~$ systemctl restart sshd
Failed to restart sshd.service: Interactive authentication required.
See system logs and 'systemctl status sshd.service' for details.
当我运行systemctl status sshd
命令时,我收到此错误:Couldn't open /etc/securetty: No such file or directory
。这是关于什么的?顺便说一句,我的机器上有 Ubuntu 20.04 LTS。
user@machine:~$ systemctl status sshd
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2021-05-21 19:47:32 UTC; 2h 51min ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 14021 (sshd)
Tasks: 5 (limit: 38329)
Memory: 1.7G
CGroup: /system.slice/ssh.service
├─14021 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
├─20182 ssh-server new -c 256 -s -l LANG=en_US.UTF-8
├─20183 -bash
├─46248 systemctl status sshd
└─46249 pager
May 21 20:58:15 machine sshd[19925]: Disconnected from user user 217.138.209.001 port 2222
May 21 21:13:40 machine sudo[20203]: pam_unix(sudo:auth): Couldn't open /etc/securetty: No such file or directory
May 21 21:13:49 machine sudo[20203]: pam_unix(sudo:auth): Couldn't open /etc/securetty: No such file or directory
May 21 21:13:49 machine sudo[20203]: pam_unix(sudo:auth): authentication failure; logname=user uid=1000 euid=0 tty=/dev/pts/1 ruser=user rhost= use>
May 21 21:13:51 machine sudo[20203]: pam_unix(sudo:auth): Couldn't open /etc/securetty: No such file or directory
May 21 21:13:55 machine sudo[20203]: pam_unix(sudo:auth): Couldn't open /etc/securetty: No such file or directory
May 21 21:38:02 machine su[34300]: pam_unix(su:auth): Couldn't open /etc/securetty: No such file or directory
May 21 21:38:05 machine su[34300]: pam_unix(su:auth): Couldn't open /etc/securetty: No such file or directory
May 21 21:38:05 machine su[34300]: (to root) robin on pts/1
May 21 21:38:05 machine su[34300]: pam_unix(su:session): session opened for user by user(uid=1000)
答案1
当您使用时sudo systemctl
,您正在将 systemd 作业安排为root
。 root
总是允许安排 systemd 作业,因此这将始终有效。
但是,当您在systemctl
没有 sudo 的情况下运行时,您将以systemd
当前用户的身份安排作业。 systemd
询问polkit
您是否可以这样做。 polkit
将检查其策略配置并将:
- 批准您(无需密码)
- 需要作为您的用户进行身份验证(确认是人在发出请求,并且此人坐在终端前)。
- 需要以其他人的身份进行身份验证...可能
root
:(不允许用户运行该作业,因此它会要求您提供管理员密码)。
两者都polkit
尽力sudo
阻止验证脚本。这就是为什么没有--password
选择sudo
并且sudo
不接受的原因echo 'password' | sudo ls
。 polkit
类似,但更复杂,更难理解。这种对脚本身份验证的厌恶是因为特权作业应该由用户或其他特权进程明确命令。我们通常不希望非特权进程/脚本指挥特权工作。
当polkit
尝试对您进行身份验证时,它将通过polkit-agent
.如果您看到身份验证窗口占据您的屏幕,这通常是polkit-agent
您的桌面环境提供的。但要连接到适当的polkit-agent
,它需要了解一些有关您的信息$DISPLAY
,$XAUTHORITY
以便提示出现在正确的会话中。
就您而言,您已ssh
进入机器,因此没有显示。在这种情况下,它“回退”到文本代理上,但似乎存在一个问题,即您的代理正在对您进行用户身份验证,而不是 root,或者它正在对您进行身份验证,但后来意识到您没有安排工作的权限systemd
。该securetty
消息表明它实际上没有一个干净的环境来对您进行身份验证(例如,另一个进程可能会拦截您的标准输入,或者它无法验证您是真人而不是脚本)。
不管是什么原因,根本原因是您ssh
进入了该机器并且没有安排 systemd 作业的权限。
您有两个选择:
使用
sudo systemctl
。这是最简单的解决方案,但如果出于某种原因这是不可接受的(即您正在编写systemd
作业脚本并且不想添加:NOPASSWD
到/etc/sudoers
),那么请务必提及它。创建
polkit
规则以允许您运行systemd
规则以允许您以用户身份作业。有一个很好的答案描述了如何做到这一点这里。