Fragen
- Gibt es eine sicherere / bessere Möglichkeit, das Kennwort eines Benutzers nicht interaktiv über ein Python-Skript festzulegen? Meine aktuelle Lösung verwendet
chpasswd
ein Fabric- Skript. Eine andere Möglichkeit wäre, Pexpect aus dem Fabric- Skript heraus zu verwenden. - Ist meine derzeitige Methode zum Festlegen des Kennworts ein Sicherheitsrisiko? Das potenzielle Sicherheitsrisiko, das ich sehe, besteht darin, dass das Kennwort auf meinem lokalen Terminal wie folgt als Klartext angezeigt wird :
[xxx.xx.xx.xxx] run: echo "johnsmith:supersecretpassw0rd" | chpasswd
.
Da ich das Fabric- Skript nur von meinem Laptop aus ausführe , denke ich nicht, dass dies ein Sicherheitsproblem ist, aber ich bin an den Eingaben anderer interessiert.
Hintergrund
Ich habe ein Python-Skript mit Fabric erstellt , um ein frisch erstelltes Slicehost Ubuntu-Slice zu konfigurieren . Falls Sie mit Fabric nicht vertraut sind, verwendet es Paramiko , einen Python SSH2-Client, um den Remotezugriff "für Anwendungsbereitstellungs- oder Systemverwaltungsaufgaben " bereitzustellen.
Eines der ersten Dinge, die ich mit dem Fabric- Skript tun muss, ist, einen neuen Administrator zu erstellen und sein Kennwort festzulegen. Im Gegensatz zu Pexpect kann Fabric keine interaktiven Befehle auf dem Remote-System verarbeiten. Daher muss das Kennwort des Benutzers nicht interaktiv festgelegt werden. Derzeit verwende ich den chpasswd
Befehl, der den Benutzernamen und das Passwort als Klartext liest.
Aktueller Code
# Fabric imports and host configuration excluded for brevity
root_password = getpass.getpass("Root's password given by SliceManager: ")
admin_username = prompt("Enter a username for the admin user to create: ")
admin_password = getpass.getpass("Enter a password for the admin user: ")
env.user = 'root'
env.password = root_password
# Create the admin group and add it to the sudoers file
admin_group = 'admin'
run('addgroup {group}'.format(group=admin_group))
run('echo "%{group} ALL=(ALL) ALL" >> /etc/sudoers'.format(
group=admin_group)
)
# Create the new admin user (default group=username); add to admin group
run('adduser {username} --disabled-password --gecos ""'.format(
username=admin_username)
)
run('adduser {username} {group}'.format(
username=admin_username,
group=admin_group)
)
# Set the password for the new admin user
run('echo "{username}:{password}" | chpasswd'.format(
username=admin_username,
password=admin_password)
)
E / A des lokalen Systemterminals
$ fab config_rebuilt_slice
Root's password given by SliceManager:
Enter a username for the admin user to create: johnsmith
Enter a password for the admin user:
[xxx.xx.xx.xxx] run: addgroup admin
[xxx.xx.xx.xxx] out: Adding group `admin' (GID 1000) ...
[xxx.xx.xx.xxx] out: Done.
[xxx.xx.xx.xxx] run: echo "%admin ALL=(ALL) ALL" >> /etc/sudoers
[xxx.xx.xx.xxx] run: adduser johnsmith --disabled-password --gecos ""
[xxx.xx.xx.xxx] out: Adding user `johnsmith' ...
[xxx.xx.xx.xxx] out: Adding new group `johnsmith' (1001) ...
[xxx.xx.xx.xxx] out: Adding new user `johnsmith' (1000) with group `johnsmith' ...
[xxx.xx.xx.xxx] out: Creating home directory `/home/johnsmith' ...
[xxx.xx.xx.xxx] out: Copying files from `/etc/skel' ...
[xxx.xx.xx.xxx] run: adduser johnsmith admin
[xxx.xx.xx.xxx] out: Adding user `johnsmith' to group `admin' ...
[xxx.xx.xx.xxx] out: Adding user johnsmith to group admin
[xxx.xx.xx.xxx] out: Done.
[xxx.xx.xx.xxx] run: echo "johnsmith:supersecretpassw0rd" | chpasswd
[xxx.xx.xx.xxx] run: passwd --lock root
[xxx.xx.xx.xxx] out: passwd: password expiry information changed.
Done.
Disconnecting from root@xxx.xx.xx.xxx... done.
grub-crypt
. Jemand anderes erwähntopenssl passwd
. Der Unterschied zwischen beiden besteht darin, dassopenssl passwd
Kennwörter nur mit herkömmlichem Unixcrypt
oder MD5 verschlüsselt werden können undgrub-crypt
sha-256 und sha-512 unterstützt werden.