パスワードを忘れた? アカウント作成
13431226 journal
日記

tuneoの日記: Python力を高める:初期パスワードを指定して多数のユーザを一括作成

日記 by tuneo

/etc/passwdにエントリ追記すればいいじゃーん、と軽く考えてコーディングを始めた。まずは一番面倒くさい暗号化済みパスワードの作り方だが、これはPython3だとcryptモジュールですべて事足りるから恐ろしい。

import crypt
plain_password="foobarbaz"
print(crypt.crypt(plain_password, crypt.mksalt()))

はいおしまい。Python2の場合は自前でsaltをこしらえないといけないのだが、これもrandom.sample()とか使えばいいと思う。

import string
import random
import crypt
 
salt_letters = string.ascii_letters + string.ascii_digits + './'
 
def mksalt(method = 6, length = 8):
  return "$%d$%s" % (method, "".join(random.sample(salt_letters, length)))
 
plain_password="foobarbaz"
 
print crypt.crypt(plain_password, mksalt())

あとは/etc/の下のpasswdとかshadowとかいじくればいいわけで、これも自前でやるのはかったるいからcsvモジュールを使った(そしてドはまりした)。何がハマったって、何度やってもログインできないのだ。生成したパスワードをコピペしてエントリを手で書けばログインできるのに!

……ということでdiffを取ってみたら「手書き」とcsvモジュールで書いたエントリは同じ内容に見えるのだが「違う」らしい。

# cat -A /etc/passwd | grep newuser1
newuser1:x:10001:10001:New User 1:/home/newuser1:/bin/bash^M$

はい、キャリッジリターン先生っすね。csvモジュールのヘルプ見直したら「デフォルトの行区切りはWindows」って書いてあったのに華麗に見落としてましたとさ。ちゃんちゃん。

この議論は、tuneo (2938)によって テキとトモのテキ禁止として作成されたが、今となっては 新たにコメントを付けることはできません。
typodupeerror

あつくて寝られない時はhackしろ! 386BSD(98)はそうやってつくられましたよ? -- あるハッカー

読み込み中...