下記のようなシェルスクリプトを使ってユーザーを一括登録しました。
ユーザーのフォルダが作成されました。/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:::
No.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 …
ありがとうございました。できました。
シェルスクリプトを以下に書き換え、ご指摘のあったように、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
No.2
- 回答日時:
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の記述と一緒ではあるのですが…。
No.1
- 回答日時:
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とするべきかと思いますけど。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ubuntu(linux)のシャットダウン...
-
Linux用のインストーラー(USB...
-
ubuntuで デイスク/deb/loopと...
-
2TBのUSBメモリを2000円ほどで...
-
Ubuntu20.04からUbuntu22.04に...
-
[Linux Mint] インストールした...
-
WineのRufusでデバイスを検知す...
-
bashでシングルクォート内の変...
-
raspberrypi に bluealsaを入れ...
-
AppImageがインストールできな...
-
linuxのIMEの件
-
Ububtuでファイル共有できない...
-
2TBのUSBメモリを入手したので...
-
LinuxMintが突然フリーズする
-
ubuntuのシャットダウンが進ま...
-
Ubuntu でinvalid filenameとな...
-
Linuxミントで困っています。 s...
-
Windowsのローカルディレクトリ...
-
Linuxへの移行 来年でWindows10...
-
ログにserver reached MaxReque...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ubuntu(linux)のシャットダウン...
-
bashでシングルクォート内の変...
-
Linuxへの移行 来年でWindows10...
-
ubuntuで デイスク/deb/loopと...
-
Linux Mint 日本語入力できなく...
-
AWSでSSH接続をしたいのですが...
-
shellscript内のコマンドを、su...
-
ubuntuのシャットダウンが進ま...
-
ログにserver reached MaxReque...
-
LinuxMintが突然フリーズする
-
linuxサーバーのキャッシュをク...
-
Lubuntuのデスクトップのアイコ...
-
Windowsのローカルディレクトリ...
-
Ubuntu on Xorgのログインについて
-
Linux のシェルスクリプトの強...
-
ssl_request_logの必要性について
-
2TBのUSBメモリを2000円ほどで...
-
tarで纏める際に、複数場外した...
-
[Linux Mint] インストールした...
-
LinuxのノートパソコンでDVDコ...
おすすめ情報
使用したテキストは下記のものです。
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
スクリプトを書き換えました。
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
実行結果は
ユーザー 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
フォルダができました。パーミッションも変わっています。
しかし、ログイン時にパスワード認証で蹴られてしまいます。
suコマンドでユーザーを切り替えると
[root@mailsv02 ~]# su t-hayashi3109
: そのようなファイルやディレクトリはありません
となります。
なお、書き替えたところは、for line in `cat $FILE_U` 以下です。
newusers $FILE_U でユーザー登録できることを教えていただいたので。