• 締切済み
  • 暇なときにでも

ユーザ追加のスクリプト作成について教えてください

Linuxでスクリプトを作りたいのですが初めてでしてアドバイスいただきたいのですが。「ユーザを加え、パスワードの設定。その後確認画面として/etc/passwordと/etc/shadowにて新規に作成したユーザとパスワード”のみ”表示される」とゆうのが条件です。更にwhileを使ったユーザを作成したのちのy/nの応答でnを入力するまでは繰り返しユーザの追加が行えるようにしたいのですが。 途中まで教科書片手に作りましたが行き詰まってしまいました。 Variableに混乱しています。 CONTINUE=y while [ "$CONTINUE" != "n" ] do echo "adding a user" useradd -d /etc/shadow "$USERNAME" echo -e "type a user name" /c read USERNAME passwd "$PASSWORD" echo -e "type a password" /c read PASSWORD

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数252
  • ありがとう数0

みんなの回答

  • 回答No.2

私もNo1さんに賛成だなぁ。なんか既にめちゃくちゃだもの。useraddのオプションもヘンだし。 スクリプトを作る意義は聞かないことにして(勉強のためだと理解するとして)、このような処理をするときは、すべての変数を取得してから目的のコマンド(useradd)を動かすのが普通です。 また、取得したパスワードの変数を表示するのは可能ですが、/etc/shadow からパスワードを導き出すのは不可能です(パスワードフィールドは不可逆に暗号化されてます)。 とりあえず足し算のループあたりから作るのが安全は無いでしょうか。

共感・感謝の気持ちを伝えよう!

質問者からの補足

色々なことをいっぺんにやろうとしすぎてました、知識が無いにも関わらず。まずuseraddからしっかりと理解してみます。あと環境変数はまだ不明なのですがファイルの頭に記述すればよいのでしょうか。 最初のCONTINUE=yのように ループのほうはなんとかできました。 後半はこうなりました。 ehco "do you want to repear (y/n):" read CONTINUE done ehco end run

  • 回答No.1
  • Tacosan
  • ベストアンサー率23% (3656/15482)

とりあえずスクリプトで自動化する前に, 「1人追加するために全てコマンドラインから入力する」ことを考えて, どのようなコマンドを入力しているかを確認した方がいいような気がするなぁ. その上で, 複数人を追加するときに「どこがどのように変わるのか」を調べる, と.

共感・感謝の気持ちを伝えよう!

質問者からの補足

友達の力を借りつつなんとか出来ました CONTINUE=y while [ "$CONTINUE" != "n" ] do echo -e "enter new user name>>>\c" read USERNAME useradd -d /home/$USERNAME $USERNAME passwd $USERNAME echo grep $USERNAME /etc/passws echo grep $USERNAME /etc/shadow echo echo -e "would you like to add another user(y/n):\c" read CONTINUE done echo "action completed" 今回特に苦しんだのがreadコマンドでユーザ名入力するのが一番頭にこなければいけないことでした。 しかしここでまだひとつ疑問が沸いたのですが環境変数はいつも=で先に定義しなくてもよいのでしょうか? このスクリプトを見るとUSERNAMEはreadコマンドで先に出てきてる意外は=で定義されていません。こうゆう定義の仕方もあるとゆうことでしょうか。

関連するQ&A

  • Linuxでの新規ユーザー追加について

    マイクロソフトのVirtual PC 2007 で Vine linux 4.2 (server仕様)で、実際にサーバーを導入するときのために実験をしています。 某サイトを見ているとセキュリティ上、rootの他に新規にユーザーを作成したほうがよいということがわかりました。 そのサイトの通りに、ユーザーを追加することはできたのですが、新しく追加したユーザーにパスワードを設定ために (1)# passwd ○○○ ← パスワード設定 (2)Changing password for user ○○○. (3)New password: ← ○○○のパスワード応答 (4)Retype new password: ← ○○○のパスワード応答(確認) (3)のNew password: とはでてくるのですが、いざパスワードを入力しようとしても入力できません。 rootにはちゃんとパスワードを設定することが出来ました。 また、どのユーザーでもパスワードを入力することができません。 ちなみにrootでログインしています。 どうすれば、新しいユーザーにパスワードを作成することができますか?教えてください。よろしくお願いします。

  • 管理者ユーザを作ったつもりなのですが

    管理者グループに、新規testユーザを作成しました。 そのtestユーザでshadowファイルを確認しようとしたところ 権限がないと表示されました。 その理由が分からないのです。 [root@host ~]#useradd -g root test [root@host ~]#su test [test@host root]$ cat /etc/shadow cat: /etc/shadow: 許可がありません [test@host root]$ ls -l /etc/shadow ---------- 1 root root 734 1月 19 17:36 2013 /etc/shadow rootグループにtestユーザを割り当てたので、 testユーザでshadowファイルを見れると思っていのですが見れないのです。 理由がわからないのです。 /etc/shadowファイル所有者がrootだからでしょうか? rootグループにtestを参加させているだけではだめなのでしょうか? ご教授お願いします。

  • Linuxユーザのパスワードを空に

    する(useradd直後の状態)にはどうしたらいいのでしょうか? 空のパスワードを入れるために単にリターンだけすると 以下のようになりできません。 #passwd passuser↓ Changing password for user passuser. 新しいUNIX パスワード:↓ よくないパスワード: あまりにも短かすぎます 新しいUNIX パスワードを再入力してください:↓ パスワードが与えられていません パスワードが与えられていません パスワードが与えられていません passwd: 認証トークン操作エラー # どうすればパスワードが空のユーザに出きるでしょうか? userdelした後useraddするしかないのでしょうか?

  • CentOSでユーザー追加は必要ですか?

    いつも教えて頂きありがとうございます。 標記の件。 先ほどの質問と同じく http://centos.server-manual.com/centos5_setup.html に沿って初期設定を行っています。 ユーザー追加とありますが、これはサーバを構築しようと 思っているのは私だけです。 だからユーザー追加しなくてもいいのでは・・・? と思っています。 それとも、今ユーザーが0人だから1人にするために この作業が必要なのでしょうか? それとも、ユーザーとは数年後に完成したサーバにアクセス する方々のことを指しているのでしょうか? よく「hoge」という固有名詞?が出てきます。 この「hoge」は何の意味なのでしょうか? manコマンドで解かるかも知れません。 下記の説明があります。        記 ユーザー追加 [root@centos ~]# mkdir /etc/skel/public_html [root@centos ~]# useradd hoge [root@centos ~]# passwd hoge Changing password for user hoge. New UNIX password:hoge12345 ←パスワード入力 Retype new UNIX password:hoge12345 ←パスワード再入力 passwd: all authentication tokens updated successfully. [root@centos ~]# chmod 701 /home/hoge この説明をご覧になって私の状況の場合、 この作業は必要なのでしょうか? 度々申し訳ございません。 ご回答の程、宜しくお願い申し上げます。

  • 簡単なif文でちゃんと分岐しません

    今参考書を見ながらやっていますがうまくいきません。 postからusernameとpasswordの値を受け取って処理する スクリプトなんですが、うまく作動してくれません。 ■問題点 分岐点が4箇所ありますが、 パスワードだけ間違っても、すべて■1■ ログイン処理状態になります。 どうしてもパスワード再設定の画面に切り替わりません。 入力されたデータはデータベースにきちんと入ります。 3日間これで悩んでいて、ついに投稿してみました。 こんなこともわからない私ですが なんとかお願い致します。 ----ここから---- <?php session_start(); $username = $_POST["username"]; $sql = "SELECT * FROM `art_users` WHERE `user_name` = '%{$username}%'"; $query = mysql_query($sql) or die("データ追加エラー" . mysql_error()); $record = mysql_fetch_array($query, MYSQL_ASSOC); if ( $_POST["mode"] == "login" && mysql_num_rows($query) > 0 && $_POST["password"] == $record["user_password"] ) { $_SESSION["userid"] = $record["user_id"]; header("Location: kaukau_top.php"); } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>ログイン処理</title> </head> <body> <?php // ■1■ ログイン処理状態 if ( $_POST["mode"] == "login" ) { // 新規登録:クエリ実行結果が0行=既存ユーザー名と一致しない if ( mysql_num_rows($query) == 0 ) { echo '新規ユーザー登録<br>'; echo '<form action="kaukau_login.php" method="POST">'; echo '<input type="hidden" name="mode" value="register">'; echo '<input type="submit" value="登録">'; echo '</form>'; } // パスワードミス:クエリ実行結果のパスワードと入力されたパスワードが一致しない elseif ( $_POST["password"] != $record["user_password"] ) { echo 'パスワードが違います。<br>'; echo 'ひみつの質問に答えると、パスワードを変更できます。<br>'; echo '<form action="kaukau_login.php" method="POST">'; echo '<input type="hidden" name="username" value="' . $username . '">'; echo '<input type="hidden" name="mode" value="resetpassword">'; echo '<input type="submit" value="送信">'; echo '</form>'; } } // ■2■ パスワード再設定状態 elseif ( $_POST["mode"] == "resetpassword" ) { if( $record["user_answer"] == $_POST["answer"] ) { echo 'パスワード再設定<br>'; echo '<form action="kaukau_login.php" method="POST">'; echo '<input type="hidden" name="username" value="' . $username . '">'; echo '<input type="hidden" name="mode" value="modifypassword">'; echo '<input type="submit" value="登録">'; echo '</form>'; } else{ echo "ひみつの答えが違います"; } } // ■3■ 新規ユーザー登録状態 elseif ( $_POST["mode"] == "register" ) { if( $_POST["password"] == $_POST["confirm"] ) { $sql = "INSERT INTO users (user_name, user_password, user_question, user_answer) VALUES ("; $sql .= " '" . $_POST["username"] ."',"; $sql .= " '" . $_POST["password"] ."',"; $sql .= " '" . $_POST["question"] ."',"; $sql .= " '" . $_POST["answer"] ."')"; $result = mysql_query($sql); echo '登録しました。'; } else { echo 'パスワードを再確認してください。'; } } // ■4■ パスワード変更状態 elseif ( $_POST["mode"] == "modifypassword" ) { if ( $_POST["password"] == $_POST["confirm"] ) { $sql = "UPDATE users"; $sql .= " SET user_password = '" . $_POST["password"] . "'"; $sql .= " WHERE user_name = '" . $_POST["username"] . "'"; mysql_query( $db, $sql ); echo '登録しました。'; } else { echo 'パスワードを再確認してください。'; } } ?> </body> </html>

    • 締切済み
    • PHP
  • ユーザーへのディレクトリ権限付与について

    WindowsXPのOracle9i環境にて、 まず、以下のようにしてユーザ「username」を作成しました。 create user username identified by Password default tablespace tab_space temporary tablespacetemp; grant dba,resource,connect to username; 次にsysユーザにて、CREATE DIRECTORY FILE_PATH as 'd:\temp'; ディレクトリを作成しました。 そして、そのディレクトリに対して、以下のように権限付与しようとすると、「ユーザ"username"が存在しません。」エラーが発生します。 grant READ,WRITE ON directory dir to username; また、grant READ,WRITE ON directory dir to public; とすると、権限付与は成功しますが、ユーザusernameにはディレクトリ参照権限は与えられていませんでした。 何か間違っておりますでしょうか? それとも何か手順で足らないものがあるのでしょうか? ご教示いただければと思います。

  • CENTOSでadduserで作成したユーザでログインできない

    *環境 CENTOS4 GNOME bash *症状 [root@myhost ~]# su - hoge su: パスワードが違います ・ルートユーザにもかかわらず一般ユーザにログインできない ・CENTOSのグラフィックログインで一般ユーザで入れない(rootのみ入れる) *ためしたこと root でGUIログインののち、 ユーザ追加 #adduser hoge # id hoge uid=508(hoge) gid=508(hoge) 所属グループ=508(hoge) パスワード設定 # passwd hoge Changing password for user hoge. New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully. shadow確認 # cat /etc/shadow | grep hoge hoge:$1$XkexNO3i$HRO.MkHbbZPn2sImrUJ9O/:13650:0:99999:7::: passwd確認 # cat /etc/passwd | grep hoge hoge:x:508:508::/home/hoge:/bin/bash homeディレクトリ確認 # ls -la /home/ | grep hoge drwx------ 3 hoge hoge 4096 5月 18 01:12 hoge 上記設定のあと、 # su hoge su: パスワードが違います となってしまいます。 初歩的な質問ですが困り果てております よろしくおねがいします。 ちなみにnologinは作成されていません。 # ls /etc/nologin ls: /etc/nologin: そのようなファイルやディレクトリはありません

  • ユーザー作成/削除をするシェルスクリプト

    とある理由によってWeb上からLinuxユーザーやMySQLデータベースなどを追加できるようにしたいのですが、 PHPなどの言語からシェルスクリプトを呼び出す方法は知っています。 ユーザー作成をするシェルスクリプトは、 普通にuseraddや、userdelでよろしいのでしょうか? あとuseraddでユーザー名を入力し、パスワードを聞かれずに 一発でユーザーが作成できるオプションがあれば教えてください。 userdelやcreate databaseも同じです。

  • ユーザ追加して、パスワード無しでもログインできてしまう。

    はじめまして、ronron77と言います。 環境:fedora4+MySQL4.1.16 mysql>grant all on *.* to user1 identified by 'user1' with grant option; でユーザ追加後、 > mysql -u user1 -p >Enter password:user1 mysql> でログインできますが、 > mysql -u user1 mysql> でもログインできてしまいます。 ちなみに、rootでログインすると、 mysql> select host,user,password from mysql.user; host user password localhost root ******* | % user1 ******* | で、パスワードはちゃんと設定されています。 > mysql -u user1 では、ログインできないようにするにはどうしたらよいのでしょうか?

    • ベストアンサー
    • MySQL
  • mysqlのユーザパスワードについて

    mysqlのユーザパスワードについて こんばんわ。mysql初心者です。 現在、サーバ(Linux Fedora11)でyumコマンドからmysql(Server version: 5.1.45 Source distribution) をダウンロードしてインストールしています。 新しいユーザーを作って接続を試みたのですが出来ません。 原因を調査した結果、パスワードが設定出来ていないようです。 一連の作業を例として下記の通りです。 例)------------------------------------------------------------------------------- [root@fedora user]# mysql -u root mysql> grant all privileges on *.* to user@"%" identified by 'user' with grant option; mysql> grant all privileges on *.* to user@localhost identified by 'user' with grant option; mysql> select user,host,password from mysql.user; +----+-----------------+-----------------+ | user | host           | password        | +----+-----------------+-----------------+ | root | localhost        |             | | root | fedora.fedorasrv.com |             | | root | 127.0.0.1        |             | | user | localhost        | 1a486e7929011a28 | | user | #             | 1a486e7929011a28 | +----+-----------------+-----------------+ mysql> exit; [root@fedora user]# mysql -u user -p 1a486e7929011a28 Enter password: ERROR 1045 (28000): Access denied for user 'user'@'localhost' (using password: NO) [root@fedora user]# mysql -u user ERROR 1045 (28000): Access denied for user 'user'@'localhost' (using password: NO) [root@fedora user]# mysql -u user -p user Enter password: ERROR 1045 (28000): Access denied for user 'user'@'localhost' (using password: NO) ---------------------------------------------------------------------------------- userユーザのパスワードが保護(?)なのか設定した内容と違います。 保護されたパスワードで打ってもノーパスワードで打っても設定したパスワードでも接続出来ません。 ちなみに他のユーザで作成しても保護されたパスワードです。 どのようにしたら設定した通りのパスワードが作成されるかご教授願います。

    • ベストアンサー
    • MySQL