arinux

Linux サーバー設定備忘録
<< MySQL (1) - レプリケーション | main | MySQL (3) - passwd 管理 (2) >>
MySQL (2) - passwd 管理


MySQL を利用して、/etc/passwd, /etc/group, /etc/shadow の管理を DB で行う設定を説明します
(以下の操作は、全てマスターで実施します)。



メモ サーバー構築環境


機種NEC Express5800, IBM x336(OS 変更)
OSVine 4.2CentOS 5.2
kernel2.6.16-76.39vl42.6.18-92.1.18.el5
glibcglibc-2.3.4-2vl3.3glibc-2.5-24
mysqlmysql-5.0.67-linux-i686-glibc23.tar.gzmysql-5.0.67-linux-i686.tar.gz
nss-mysql1.01.0



メモ MySQL インストール


MySQL (1) - レプリケーション を参考に、MySQL をインストールして、mysqld を起動します。



メモ DB 作成


  1. mysql に root でログインします。
    [master]# mysql -u root -p
    Enter password:
    


  2. 新規 DB を作成します。
    mysql> CREATE DATABASE usersdb;
    Query OK, 1 row affected (0.00 sec)
    


  3. DB が作成されたことを確認します。
    mysql> SHOW DATABASES;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | usersdb            |
    | mysql              |
    | repldb             |
    | test               |
    +--------------------+
    5 rows in set (0.00 sec)
    


  4. ローカルから DB へ接続するためのユーザーを作成します。このユーザーには、全ての権限を与えます。
    mysql> GRANT ALL PRIVILEGES ON usersdb.* TO  myadmin@localhost IDENTIFIED BY 'p-yw1naYO4he';
    Query OK, 0 rows affected (0.00 sec)
    


  5. クライアントから DB へ接続するためのユーザーを作成します。このユーザーには、SELECT 権限のみ与えます。
    mysql> GRANT SELECT ON usersdb.* TO  cwuser@'test15.arinux.net' IDENTIFIED BY 'n,V0dX6kjgcd';
    Query OK, 0 rows affected (0.00 sec)
    


  6. ユーザ情報を反映します。
    mysql> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0.00 sec)
    


  7. ユーザーが作成されたことを確認します。
    mysql> SELECT * FROM mysql.db ¥G
    (以下、省略)
    mysql> SELECT * FROM mysql.user ¥G
    (以下、省略)
    mysql> SHOW GRANTS for cwuser@'test15.arinux.net';
    +----------------------------------------------------------------------------------+
    | Grants for cwuser@test15.arinux.net                                              |
    +----------------------------------------------------------------------------------+
    | GRANT USAGE ON *.* TO 'cwuser'@'test15.arinux.net' IDENTIFIED BY PASSWORD
     '*69B3D5081425557A449413DD0FBD59FBE30CC1FF'                                       |
    | GRANT SELECT ON `usersdb`.* TO 'cwuser'@'test15.arinux.net'                     |
    +----------------------------------------------------------------------------------+
    2 rows in set (0.00 sec)
    


  8. ログアウトします。
    mysql> ¥q
    Bye
    
    [master]#
    



メモ groups テーブル作成


このテーブルは、/etc/group の情報を格納します。


  1. DB 接続ユーザーでログインします。
    [master]# mysql -u myadmin -p usersdb
    Enter password: p-yw1naYO4he
    mysql>
    


  2. groups テーブルを作成します。
    青い旗 以下をコピーして、mysql> プロンプトで貼り付ければ入力できます。
    CREATE TABLE groups (
      group_id int(11) NOT NULL auto_increment primary key,
      group_name varchar(30) DEFAULT '' NOT NULL,
      status        char(1) DEFAULT 'A',
      group_password varchar(64) DEFAULT 'x' NOT NULL,
      gid int(11) NOT NULL
    );
    
    ※ /usr/local/src/nss-mysql-1.0/sample.sql を参考にしています。
    mysql> CREATE TABLE groups (
        -> group_id int(11) NOT NULL auto_increment primary key,
        -> group_name varchar(30) DEFAULT '' NOT NULL,
        -> status        char(1) DEFAULT 'A',
        -> group_password varchar(64) DEFAULT 'x' NOT NULL,
        -> gid int(11) NOT NULL
        -> );
    Query OK, 0 rows affected (0.00 sec)
    


  3. groups テーブルが作成されたことを確認します。
    mysql> show tables;
    +--------------------+
    | Tables_in_usersdb  |
    +--------------------+
    | groups             |
    +--------------------+
    1 row in set (0.00 sec)
    
    mysql> show fields from groups;
    +----------------+-------------+------+-----+---------+----------------+
    | Field          | Type        | Null | Key | Default | Extra          |
    +----------------+-------------+------+-----+---------+----------------+
    | group_id       | int(11)     | NO   | PRI | NULL    | auto_increment |
    | group_name     | varchar(30) | NO   |     |         |                |
    | status         | char(1)     | YES  |     | A       |                |
    | group_password | varchar(64) | NO   |     | x       |                |
    | gid            | int(11)     | NO   |     | NULL    |                |
    +----------------+-------------+------+-----+---------+----------------+
    5 rows in set (0.00 sec)
    


  4. groups テーブルにデータを追加します。
    mysql> INSERT INTO groups VALUES (1,'system','A','x',511);
    Query OK, 1 row affected (0.00 sec)
    
    mysql> INSERT INTO groups VALUES (2,'sales','A','x',512);
    Query OK, 1 row affected (0.00 sec)
    


  5. 追加されたことを確認します。
    mysql> select * from groups;
    +----------+------------+--------+----------------+-----+
    | group_id | group_name | status | group_password | gid |
    +----------+------------+--------+----------------+-----+
    |        1 | system     | A      | x              | 511 |
    |        2 | sales      | A      | x              | 512 |
    +----------+------------+--------+----------------+-----+
    2 rows in set (0.00 sec)
    



メモ user テーブル作成


このテーブルは、/etc/passwd と /etc/shadow の情報を格納します。


  1. user テーブルを作成します。
    青い旗 以下をコピーして、mysql> プロンプトで貼り付ければ入力できます。
    CREATE TABLE user (
      user_id int(11) NOT NULL auto_increment primary key,
      user_name varchar(50) DEFAULT '' NOT NULL,
      realname varchar(32) DEFAULT '' NOT NULL,
      shell varchar(20) DEFAULT '/sbin/nologin' NOT NULL,
      password varchar(40) DEFAULT '' NOT NULL,
      status char(1) DEFAULT 'N' NOT NULL,
      uid int(11) NOT NULL,
      gid int(11) DEFAULT '511' NOT NULL,
      homedir varchar(32) DEFAULT '/home/nologin' NOT NULL,
      lastchange varchar(50) NOT NULL default '',
      min int(11) NOT NULL default '0',
      max int(11) NOT NULL default '0',
      warn int(11) NOT NULL default '7',
      inact int(11) NOT NULL default '-1',
      expire int(11) NOT NULL default '-1',
      shost varchar(50) default NULL
     );
    
    ※ /usr/local/src/nss-mysql-1.0/sample.sql を参考にしています。
    mysql> CREATE TABLE user (
        ->   user_id int(11) NOT NULL auto_increment primary key,
        ->   user_name varchar(50) DEFAULT '' NOT NULL,
        ->   realname varchar(32) DEFAULT '' NOT NULL,
        ->   shell varchar(20) DEFAULT '/sbin/nologin' NOT NULL,
        ->   password varchar(40) DEFAULT '' NOT NULL,
        ->   status char(1) DEFAULT 'N' NOT NULL,
        ->   uid int(11) NOT NULL,
        ->   gid int(11) DEFAULT '511' NOT NULL,
        ->   homedir varchar(32) DEFAULT '/home/nologin' NOT NULL,
        ->   lastchange varchar(50) NOT NULL default '',
        ->   min int(11) NOT NULL default '0',
        ->   max int(11) NOT NULL default '0',
        ->   warn int(11) NOT NULL default '7',
        ->   inact int(11) NOT NULL default '-1',
        ->   expire int(11) NOT NULL default '-1',
        ->   shost varchar(50) DEFAULT '' NOT NULL
        ->  );
    Query OK, 0 rows affected (0.02 sec)
    


  2. user テーブルが作成されたことを確認します。
    mysql> show tables;
    +--------------------+
    | Tables_in_usersdb  |
    +--------------------+
    | groups             |
    | user               |
    +--------------------+
    2 rows in set (0.00 sec)
    
    mysql> show fields from user;
    +------------+-------------+------+-----+---------------+----------------+
    | Field      | Type        | Null | Key | Default       | Extra          |
    +------------+-------------+------+-----+---------------+----------------+
    | user_id    | int(11)     | NO   | PRI | NULL          | auto_increment |
    | user_name  | varchar(50) | NO   |     |               |                |
    | realname   | varchar(32) | NO   |     |               |                |
    | shell      | varchar(20) | NO   |     | /sbin/nologin |                |
    | password   | varchar(40) | NO   |     |               |                |
    | status     | char(1)     | NO   |     | N             |                |
    | uid        | int(11)     | NO   |     | NULL          |                |
    | gid        | int(11)     | NO   |     | 511           |                |
    | homedir    | varchar(32) | NO   |     | /home/nologin |                |
    | lastchange | varchar(50) | NO   |     |               |                |
    | min        | int(11)     | NO   |     | 0             |                |
    | max        | int(11)     | NO   |     | 0             |                |
    | warn       | int(11)     | NO   |     | 7             |                |
    | inact      | int(11)     | NO   |     | -1            |                |
    | expire     | int(11)     | NO   |     | -1            |                |
    | shost      | varchar(50) | NO   |     |               |                |
    +------------+-------------+------+-----+---------------+----------------+
    16 rows in set (0.00 sec)
    
    青い旗] shost


    「shost」 は、接続元のホスト名を入れて、接続元の制限をするために使用します。


  3. 一度 MySQL を抜けて、ログインパスワードを生成します。ここでは openssl を使用して MD5 パスワードを作成します。
    mysql> ¥q
    Bye
    
    [master]# openssl passwd -1
    Password:
    Verifying - Password:
    $1$ZNI4FxIL$AfwYl6rpSg03tvmJnoGFW/
    


  4. MySQL にログインします。
    [master]# mysql -u myadmin -p usersdb
    Enter password: 
    


  5. user テーブルにデータを追加します。
    INSERT INTO user VALUES (1,'ari','Arinux','/bin/bash','$1$ZNI4FxIL$AfwYl6rpSg03tvmJnoGFW/',
    'A',1001,511,'/home/ari', '14194', '0', '0', '7', '-1', '-1', 'test15.arinux.net');
    Query OK, 1 row affected (0.00 sec)
    


  6. 追加されたことを確認します。
    mysql> select * from user¥G
    *************************** 1. row ***************************
       user_id: 1
     user_name: ari
      realname: Arinux
         shell: /bin/bash
      password: $1$ZNI4FxIL$AfwYl6rpSg03tvmJnoGFW/
        status: A
           uid: 1001
           gid: 511
       homedir: /home/ari
    lastchange: 14194
           min: 0
           max: 0
          warn: 7
         inact: -1
        expire: -1
         shost: test15.arinux.net
    1 row in set (0.00 sec)
    



メモ user_group テーブル作成


このテーブルは、補助グループの情報を格納します。


  1. user_group テーブルを作成します。
    青い旗 以下をコピーして、mysql> プロンプトで貼り付ければ入力できます。
    CREATE TABLE user_group (
      user_id int(11) DEFAULT '0' NOT NULL,
      group_id int(11) DEFAULT '0' NOT NULL
      );
    
    mysql> CREATE TABLE user_group (
        ->   user_id int(11) DEFAULT '0' NOT NULL,
        ->   group_id int(11) DEFAULT '0' NOT NULL
        ->   );
    Query OK, 0 rows affected (0.01 sec)
    
    ※ /usr/local/src/nss-mysql-1.0/sample.sql を参考にしています。


  2. user_group テーブルが作成されたことを確認します。
    mysql> show tables;
    +--------------------+
    | Tables_in_usersdb  |
    +--------------------+
    | groups             |
    | user               |
    | user_group         |
    +--------------------+
    3 rows in set (0.00 sec)
    
    mysql> show fields from user_group;
    +----------+---------+------+-----+---------+-------+
    | Field    | Type    | Null | Key | Default | Extra |
    +----------+---------+------+-----+---------+-------+
    | user_id  | int(11) | NO   |     | 0       |       |
    | group_id | int(11) | NO   |     | 0       |       |
    +----------+---------+------+-----+---------+-------+
    2 rows in set (0.00 sec)
    



つづく

| arinux | MySQL | 13:56 | comments(0) | trackbacks(0) | pookmark |









http://www.arinux.net/trackback/88
   1234
567891011
12131415161718
19202122232425
2627282930  
<< November 2017 >>
+ SELECTED ENTRIES
+ RECENT COMMENTS
+ RECENT TRACKBACK
+ CATEGORIES
+ ARCHIVES
+ 掲載予定のタイトル
  • Wordpress
  • Pukiwiki
  • SMTPs/POPs/IMAPs
  • fml
  • Tips
+ CSS Nite
+ MOBILE
qrcode
+ LINKS
+ RECOMMEND
+ PROFILE