![设置 ubuntu 用户以进行 ssh 连接](https://linux22.com/image/123089/%E8%AE%BE%E7%BD%AE%20ubuntu%20%E7%94%A8%E6%88%B7%E4%BB%A5%E8%BF%9B%E8%A1%8C%20ssh%20%E8%BF%9E%E6%8E%A5.png)
我创建了一个新的 Ubuntu 服务器,并在 root 用户中创建了一个新用户。我遵循的步骤:
sudo adduser tom
sudo su - tom
mkdir .ssh
chmod 700 .ssh
touch .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
nano .ssh/authorized_keys // paste public key
看起来没问题,我可以登录[email protected]
。但是,当我以 Tom 身份登录时,它会请求许可,当我执行 sudo 操作时,它会要求输入密码,而我没有他的密码,因此我使用我的 root 密码,因此它会发出警告:
[sudo] tom 的密码:tom 不在 sudoers 文件中。此事件将被报告。
从我的根用户中,我尝试将汤姆添加visudo
为
root ALL=(ALL:ALL) ALL
tom ALL=(ALL:ALL) ALL
但这并没有改变任何事情。
这种设置的正确方法是什么,以便 Tom 有权运行东西,并且向他询问的唯一密码是他的 ssh 密码? Tom 应该使用他的 ssh 密码运行类似sudo npm install
或 之类的东西sudo composer install
,也许他甚至不应该知道 root 密码
我在这里缺少什么?
答案1
编辑:
根据第二次阅读,如果您仍然希望提示 Tom 使用 sudo 的密码,您需要:
tom ALL = ALL: ALL
如果您希望 Tom 能够在没有密码的情况下运行 sudo,请使用以下答案。
我相信你会希望该行是:
tom ALL = NOPASSWD: ALL
解释:
tom
是此行适用的用户,第一个ALL
是此行适用的主机,NOPASSWD
是指定不需要密码的标签,最后一个ALL
指定 tom 可以通过 sudo 运行哪些命令。
请注意,如果您想限制哪些命令(甚至命令和参数的组合),您可以将第二个ALL
.例如:
tom ALL = NOPASSWD: /bin/kill, /usr/bin/lprm
请参阅Sudoers 手册页和替代手册页页面下方大约 80% 处还有其他示例。
答案2
您可以从 root 或sudo
主用户执行以下操作:
usermod -aG sudo tom
这会将您的用户 tom 添加到“sudo”组,这就是所需的全部内容。由于这使得/etc/sudoers
无需对文件进行更改,因此您可以在其中恢复更改,除非您想删除要求输入命令密码的安全层sudo
。如果您想要这个,您应该使用该行(如@杰森拉什在他的回答中)在你的/etc/sudoers
文件中:
tom ALL = NOPASSWD: ALL
但是,如果您想要使用命令密码请求的常用方式,sudo
您应该保留该/etc/sudoers
文件,只需将用户添加到“sudo”组即可。然后你只需要做/etc/ssh/sshd_config
相应的更改,不允许密码登录。
通常 Ubuntu 的设置方式是让普通用户属于一些重要的组。您可以通过groups
在终端中输入来检查您的主要用户所在的组。
这是它向我显示的内容,但您的输出可能与此不同:
$ groups
<users-own-group> adm cdrom sudo dip plugdev lpadmin sambashare
不应具有广泛权限的普通用户至少应位于cdrom, plugdev, lpadmin
.但由于您正在创建 sudo 用户(至少在我看来您希望如此),您应该相应地将您的用户添加到组中。您可以在上述命令中使用 来连接组,
。但是sambashare
,如果您没有安装 samba,则可能不需要这样的组。
usermod -aG <group1>, <group2> <username>