プロが教えるわが家の防犯対策術!

下記のようなシェルスクリプトを使ってユーザーを一括登録しました。
ユーザーのフォルダが作成されました。/etc/passwdと/etc/shadowには追加されています。
しかし、作成したユーザーでログインしようとすると、「パスワードが違います。」とメッセージが出てログインできません。
下のスクリプトのパスワード作成の方法が違っていて、予想もしないようなパスワードが作成されてしまっているのでしょうか。
それとも、パスワードを有効にする処理を追加しなければいけないのでしょうか。
もし、パスワードを有効にする処理が必要なら、どのようにしたらいいのでしょうか。
どなたか、お知恵を拝借できないでしょうか。お願いします。

シェルスクリプトの内容
#!/bin/bash

FILE_U="/home/samba/mail_add.txt"
FILE_P="/etc/passwd"

newusers $FILE_U

for line in `cat $FILE_U`
do
user_name=`echo $line | cut -d ':' -f 1`
pass=`echo $line | cut -d ':' -f 2`
txt=`cat $FILE_P | grep -e "^$user_name:"`
user_id=`echo $txt | cut -d ':' -f 3`
group_id=`echo $txt | cut -d ':' -f 4`
home_dir=`echo $txt | cut -d ':' -f 6`
##パスワード生成
PASSWORD=`perl -e "print(crypt('${pass}', 'a5'));"`
useradd -u ${user_id} -g ${group_id} -d ${home_dir} -m -p ${PASSWORD} ${user_id}
cp -rf /etc/skel/* $home_dir/
chown -R $user_id $home_dir
chmod 711 $user_id $home_dir
chgrp -R $group_id $home_dir
done

/etc/passwdの内容
t-hayashi3109:x:1002:1002:t-hayashi3109:/home/t-hayashi3109:/bin/bash
t-fujihara3114:x:1003:1003:t-fujihara3114:/home/t-fujihara3114:/bin/bash
t-takejima423:x:1004:1004:t-takejima423:/home/t-takejima423:/bin/bash
n-kishita999:x:1005:1005:n-kishita999:/home/n-kishita999:/bin/bash
y-kawase270:x:1006:1006:y-kawase270:/home/y-kawase270:/bin/bash

/etc/shadowの内容
t-hayashi3109:$6$IMrX/4SsD4$J0MTnXOhBR3HWfmtdptRkue/wmaWNrnx4lsahchwxBZIVDJvew3XHYXzi89o/ds18AmiTi9WRg4TJhXH66LMG1:17218:0:99999:7:::
t-fujihara3114:$6$cF90/Zk/sE43sq$I/c5IJWdIleNCjQp13uLyn/eHWxQMfZNjyLE7bjfkGswdb.q46VvqV8uAXzIZUdhc8zJW9BSnhrMc.eBIvdyP0:17218:0:99999:7:::
t-takejima423:$6$b0I4T4EbexUig2$0ouOYWtnPAZMz1YKNLrOsyG1RYkJhSS1OnSvkdIR97Cr0d5JOpM3Dg9F.MfVF957QPmuFgmE8N9avPx2XChB31:17218:0:99999:7:::
n-kishita999:$6$eAlJ9dMM$Mt2tL.TqJ/A0cXk3eAs/5ids.6iDtcy339YNRacEZZcfaMUIEcUkRcXoD..vw0quA1ezQlQbhxL5sXmmGTGYc.:17218:0:99999:7:::
y-kawase270:$6$hw44olqmQE/u2$2j9Sit5Bgr3XgYcVETyG4ahzEYQ5WHJgN9PrYoNYqieFbyMmt1qCuSunuZ8Mwo35rln7nTY3U7j8PGXyD33XJ/:17218:0:99999:7:::

質問者からの補足コメント

  • うーん・・・

    使用したテキストは下記のものです。
    t-hayashi3109:hayashi3109L:::t-hayashi3109:/home/t-hayashi3109:/bin/bash
    t-fujihara3114:fujihara3114:::t-fujihara3114:/home/t-fujihara3114:/bin/bash
    t-takejima423:takejima423h:::t-takejima423:/home/t-takejima423:/bin/bash
    n-kishita999:kishita999h2:::n-kishita999:/home/n-kishita999:/bin/bash
    y-kawase270:kawase270G4U:::y-kawase270:/home/y-kawase270:/bin/bash

      補足日時:2017/02/21 13:58
  • うーん・・・

    スクリプトを書き換えました。

    for line in `cat $FILE_U`
    do
    user_name=`echo $line | cut -d ':' -f 1`
    pass=`echo $line | cut -d ':' -f 2`
    ##指定されたパスワードを渡す
    echo $pass | passwd --stdin $user_name
    cp -rf /etc/skel/* '/home/'$user_name'/'
    chown -R $user_name '/home/'$user_name'/'
    chmod 711 $user_name '/home/'$user_name'/'
    chgrp -R $user_name '/home/'$user_name'/'
    done

    No.2の回答に寄せられた補足コメントです。 補足日時:2017/02/21 16:03
  • うーん・・・

    実行結果は
    ユーザー t-hayashi3109 のパスワードを変更。
    passwd: すべての認証トークンが正しく更新できました。
    chmod: `t-hayashi3109' にアクセスできません: そのようなファイルやディレクトリはありません
    shadow
    t-hayashi3109:$6$4KgZMdJY$/hyF0NzKIN9EXsX6qjdV0Jr.zPbGOK2i7GOd2xoxJdp2kHdKi7wy6vkNRpHVpHeo6d6S6KCSw1iCimx6.1cLz.:17218:0:99999:7:::
    passwd
    t-fujihara3114:x:1003:1003:t-fujihara3114:/home/t-fujihara3114:/bin/bash
    フォルダができました。パーミッションも変わっています。
    しかし、ログイン時にパスワード認証で蹴られてしまいます。

      補足日時:2017/02/21 16:11
  • うーん・・・

    suコマンドでユーザーを切り替えると

    [root@mailsv02 ~]# su t-hayashi3109
    : そのようなファイルやディレクトリはありません

    となります。

    なお、書き替えたところは、for line in `cat $FILE_U` 以下です。
    newusers $FILE_U でユーザー登録できることを教えていただいたので。

      補足日時:2017/02/21 16:36

A 回答 (3件)

>chmod: `t-hayashi3109' にアクセスできません: そのようなファイルやディレクトリはありません



に関しては、
>chmod 711 $user_name '/home/'$user_name'/'
が誤りです。
最初の$user_nameは不要です。

>pass=`echo $line | cut -d ':' -f 2`
>##指定されたパスワードを渡す
>echo $pass | passwd --stdin $user_name

恐らく不要です。
/etc/login.defsで
ENCRYPT_METHOD SHA512
になっていれば、newusersコマンドで作成されるパスワードハッシュはSHA512になっていると思われます。
# /etc/shadowの第2フィールドが$6$になっているかと。

>[root@mailsv02 ~]# su t-hayashi3109
>: そのようなファイルやディレクトリはありません

rootからのsuだとパスワードなしでも通るので、確認には不向き…かと思われます。

1つ前の質問で改行コードについて確認しましたけど…その辺りどうです?
ちなみに、それぞれ改行コードを変えているとfileコマンドで下記の様な結果になります。
[user@localhost ~]$ file mail_add_CRLF.txt
mail_add_CRLF.txt: ASCII text, with CRLF line terminators
[user@localhost ~]$ file mail_add_LF.txt
mail_add_LF.txt: ASCII text

CRLFがWindowsで標準に使われる改行コード、LFがLinuxで標準に使う改行コードです。
/home/samba
ということなので、mail_add.txtはWindowsで編集してsambaで転送したのではありませんか?
そうすると、ユーザのシェル指定が"/bin/bash"ではなく"/bin/bash\r"(\rはCR)になります。
# FTPのASCIIモード以外では変換してくれませんので、Windowsのエディタで改行コードをLFに指定するか、Linuxに移した後で改行コードの変換が必要です。
で、シェルが"/bin/bash\r"の場合に…
>[user@localhost ~]$ su - t-hayashi3109
>パスワード:
>: そのようなファイルやディレクトリはありません
となりました。

[root@localhost ~]# file /etc/passwd
/etc/passwd: ASCII text, with CRLF, LF line terminators
ということで、/etc/passwdがCRLF混じりのファイルになっているかと。

trコマンドで改行コード中のCRは削除できるので、それで置き換える…という方法で回避できるかと思われます。
[root@localhost ~]# tr -d \\r < /etc/passwd > /etc/passwd1
[root@localhost ~]# cp /etc/passwd1 /etc/passwd
cp: `/etc/passwd' を上書きしますか? y
のように一時ファイルに書き出してから更新する…とか。
# リダイレクトでやる場合は『入力ファイル』と『出力ファイル』を同じにすると問題が発生する場合があるのでご注意を。
http://osksn2.hep.sci.osaka-u.ac.jp/~taku/osx/cr …
    • good
    • 0
この回答へのお礼

ありがとうございました。できました。
シェルスクリプトを以下に書き換え、ご指摘のあったように、mail_add.txtはWindowsで作成したものだったので、TeraPadで改行コードを変換してから取り込みました。
Centos7では、最終行の改行コードを削除しておけばよかったのですが、RedHatではその辺りが厳格なのですね。
また、お世話になると思いますが、その節もよろしくお願いします。
本当にありがとうございました。

#!/bin/bash

FILE_U="/home/samba/mail_add.txt"
FILE_P="/etc/passwd"

newusers $FILE_U

for line in `cat $FILE_U`
do
user_name=`echo $line | cut -d ':' -f 1`
txt=`cat $FILE_P | grep -e "^$user_name:"`
user_id=`echo $txt | cut -d ':' -f 3`
group_id=`echo $txt | cut -d ':' -f 4`
home_dir=`echo $txt | cut -d ':' -f 6`
cp -rf /etc/skel/* $home_dir/
chown -R $user_name $home_dir
chmod 711 $home_dir
chgrp -R $user_name $home_dir
done

お礼日時:2017/02/21 18:15

CentOS7で実験ですが…(仕事しろ)



掲示されたスクリプトのうち、mil_add.txtをカレントパスから読み込むように変更&mail_dd.txtは最初の1行だけで実行

[root@localhost ~]# ./qa9644747
useradd: ユーザ ID 1001 は重複しています
cp: `/etc/skel/*' を stat できません: そのようなファイルやディレクトリはありません
chmod: `1001' にアクセスできません: そのようなファイルやディレクトリはありません
[root@localhost ~]#

となりました。
newusersが成功していれば、t-hayashi3109は作成済みとなるわけで、
そのユーザIDでuseraddすれば、「useradd: ユーザ ID 1001 は重複しています」ですよねぇ……
# ちなみにskelのコピーはありませんでした。
で、mail_add.txtの第2フィールドのパスワードで普通にsuできました。
# 一般ユーザでsu - t-hayashi3109 で実施。

ということで……
実行結果どうなっているんです?


掲示されているshadowの内容をコピペして、t-hayashi3109のパスワードに「a5.rlYCZ1vdr6」(perl -e "print(crypt('hayashi3109L', 'a5'));"で生成)を指定してみましたが…
「su: 認証失敗」でした。
useraddでパスワードが設定されたわけではない…んでしょうかね。

http://hitsumabushi-pc.blogspot.jp/2011/12/etcsh …
で、$6$なのでSHA-512で/etc/login.defsの記述と一緒ではあるのですが…。
この回答への補足あり
    • good
    • 0

mail_add.txtは


https://oshiete.goo.ne.jp/qa/9642988.html
にあったものでいいんですね?
で、t-aaaaaでログインする時、パスワードはなんと入力しています?

「t-aaaaa3109L」ではパスワードエラーになるかと思われますけども。
「a57LhL9gt1d5.」が正しい…かな。
# perl -e "print(crypt('t-aaaaa3109L', 'a5'));" の出力結果です。

>PASSWORD=`perl -e "print(crypt('${pass}', 'a5'));"`
で生成して、
>useradd -u ${user_id} -g ${group_id} -d ${home_dir} -m -p ${PASSWORD} ${user_id}
でパスワードとして登録していますから。

というか、newusersで作成したユーザにuseradd出来るんですか?
usermodとするべきかと思いますけど。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!