Как передать sudo без пароля с помощью автоматического скрипта

Любой, кто использовал Multipass или AWS, знаком с пользователем ubuntu , имеющим беспарольный доступ к sudo. Я запускаю несколько виртуальных машин через многопроходный , каждая со многими пользователями, и я хочу использовать sudo без пароля для их учетных записей по двум причинам

  1. Они могут входить в систему только со своими общедоступными / частными, а не с именем пользователя / паролем, чтобы они могли 'Не вводите пароль для sudo , если у них его нет
  2. Разработчики должны иметь возможность вызывать sudo apt-get

Я знаю, что могу выполнить команду sudo visudo и вносят некоторые изменения для обеспечения sudo без пароля, однако это требует вмешательства человека. Я пробовал взломать это с помощью sed ( sudo sed -i "s /% admin \ s * ALL = (ALL) \ s * ALL /% admin ALL = (ALL) NOPASSWD: ALL / g" / etc / sudoers ), но что-то ломается, и я не могу попасть в / etc / sudoers , даже с пользователем ubuntu .

Наконец, я попытался посмотреть на группы, в которые входит ubuntu , и заметил, что он является членом adm , который, как я полагаю, является администратором, и [вслепую] добавил все учетные записи пользователей в этой группе, но это тоже не сработало.

У меня два вопроса, которые на самом деле являются одним и тем же вопросом.

  1. Каким образом Ubuntu может вызывать sudo без пароля и где это указано?
  2. Как я могу предоставить эту же привилегию другим пользователям, но в автоматическая мода?
0
задан 3 May 2021 в 21:12

1 ответ

multipass поддерживает cloud-init, и с его помощью вы можете делать все эти вещи автоматически без какого-либо скрипта.

multipass launch --cloud-init <файл> ...

А в файле cloud-init вы можете указать всех пользователей, которые будут созданы, и дать им беспарольный sudo.

Это будет выглядеть примерно так

package_update: true
package_upgrade: true
packages:
  - ...
users:
  - name: ubuntu
    sudo: ALL=(ALL) NOPASSWD:ALL
    home: /home/ubuntu
    shell: /bin/bash
    groups: [adm, audio, cdrom, dialout, floppy, video, plugdev, dip, netdev, libvirtd]
    lock_passwd: True
    gecos: Ubuntu

Посмотрите в документации по cloudinit для подробностей.

[Редактировать - добавить проверенный пример]

package_update: true
package_upgrade: true
packages:
users:
  - name: user1
    shell: /bin/bash
    sudo: ALL=(ALL) NOPASSWD:ALL
    ssh_authorized_keys:
      - ssh-rsa ...
  - name: user2
    shell: /bin/bash
    sudo: ALL=(ALL) NOPASSWD:ALL
    ssh_authorized_keys:
      - ssh-rsa ...
$ multipass launch --cloud-init cloudinit.yaml 
Launched: great-dalmatian
$ ssh user1@10.88.17.191
...
user1@great-dalmatian:~$ id
uid=1000(user1) gid=1000(user1) groups=1000(user1)
user1@great-dalmatian:~$ sudo id
uid=0(root) gid=0(root) groups=0(root)
$ ssh user2@10.88.17.191 "id; sudo id"
uid=1001(user2) gid=1001(user2) groups=1001(user2)
uid=0(root) gid=0(root) groups=0(root)
0
ответ дан 7 May 2021 в 17:40

Другие вопросы по тегам:

Похожие вопросы: