当前位置: 首页 > 工具软件 > NSS-MySQL > 使用案例 >

mysql linux 用户,使用MySQL管理Linux用户认证

佟寒
2023-12-01

测试环境:Debian 6.0 (squeeze)

安装mysql、phpmyadmin、libpam-mysql和libnss-mysql

以下对数据库的操作使用phpmyadmin来实现。

创建数据库user_database,用于存放用户数据。

在数据库中创建以下的表

名称

说明

字段数

users

每个记录对应于一个用户

15

groups

每个记录对应于一个群

5

users_groups

一个用户可包含到多个群中

2

需要注意的是,不可使用group作为表名称,因为group是SQL语句中的关键字

users表

字段

说明

类型

长度

默认值

备注

ID

索引编号

INT

自动增长、主键

Account

用户帐户

VARCHAR

64

''

Name

用户姓名

VARCHAR

64

''

Shell

用户Shell

VARCHAR

32

'/bin/bash'

Password

用户密码

VARCHAR

64

''

可以是加密后的

Status

账户状态

CHAR

1

'A'

A表示有效,否则无效

Uid

INT

Gid

INT

Home

用户目录

VARCHAR

64

'/home'

LastChange

最后修改日期(自1970年1月1日起的天数)

VARCHAR

64

''

Min

两次修改口令之间所需的最小天数

INT

0表示无限制

Max

口令保持有效的最大天数

INT

空白表示不限制密码有效期,这将不使用Warning和Inactive特性,但需要修改字段属性为VARCHAR来表示空白。一般用99999表示无限制。

Warning

提前多少天通知密码失效

INT

0表示不警告(这可能需要修改字段属性为VARCHAR),一般为7

Inactive

超过口令必须更改的日期多少天后,系统会自动将这个帐户停止

INT

空白表示不限制

Expire

账户失效日期(自1970年1月1日起的天数)

VARCHAR

64

空白表示不限制

groups表

字段

说明

类型

长度

默认值

备注

ID

索引编号

INT

自动增长、主键

Name

群名称

VARCHAR

64

''

gid

INT

Status

群状态

CHAR

1

'A'

A表示有效,否则无效

Password

群密码

VARCHAR

64

'x'

users_groups群与用户关系表,此表用来表示每个群中的用户

字段

说明

类型

长度

默认值

备注

user_ID

用户在users表中的编号

INT

不是uid

groups_ID

群在groups中的编号

INT

不是gid

建立两个数据库用户PAM_user和PAM_root,其中pam_root有该数据库的全部权限,而PAM_user则仅能对users中部分字段和groups/users_groups全部字段进行查询

PAM_user可查询的字段:

ID

索引编号

Account

用户帐户

Name

用户姓名

Shell

用户Shell

Status

账户状态

uid

gid

Home

用户目录

修改/etc/nsswitch.conf,改为(在以下三行后面添加mysql)

passwd:         compat mysql

group:          compat mysql

shadow:         compat mysql

修改/etc/nss-mysql.conf的以下行,注意密码要设置为PAM_user的密码,若表的名字有改动,要相应修改(例如users改为abc,则users.gid应改为abc.gid)

conf.version = 2;

users.host =inet:localhost:3306;

users.database =user_database;

users.db_user = PAM_user;

users.db_password = PAM_user的密码;

#users.backup_host =inet:backup:3306;

#users.backup_database =nss_mysql_backup;

users.table = users;

users.where_clause =users.Status = 'A';

users.user_column =users.Account;

users.password_column =users.Password;

users.userid_column =users.ID;

users.uid_column = users.uid;

users.gid_column = users.gid;

users.realname_column =users.Name;

users.homedir_column =users.Home;

users.shell_column =users.Shell;

groups.group_info_table =groups;

groups.where_clause =groups.Status = 'A';

groups.group_name_column =groups.Name;

groups.groupid_column =groups.ID;

groups.gid_column =groups.gid;

groups.password_column =groups.Password;

groups.members_table =users_groups;

groups.member_userid_column =users_groups.users_ID;

groups.member_groupid_column =users_groups.groups_ID;

修改/etc/nss-mysql-root.conf的以下行,注意密码要设置为PAM_root的密码,若表的名字有改动,要相应修改(例如users改为abc,则users.gid应改为abc.gid)

conf.version = 2;

shadow.host =inet:localhost:3306;

shadow.database =user_database;

shadow.db_user = PAM_root;

shadow.db_password = PAM_root的密码;

#shadow.backup_host =inet:backup:3306;

#shadow.backup_database =nss_mysql_backup;

shadow.table = users;

shadow.where_clause =users.Status = 'A';

shadow.userid_column =users.ID;

shadow.user_column =users.Account;

shadow.password_column =users.Password;

shadow.lastchange_column =users.LastChange;

shadow.min_column = users.Min;

shadow.max_column = users.Max;

shadow.warn_column =users.Warning;

shadow.inact_column =users.Inactive;

shadow.expire_column =users.Expire;

为了避免其他用户看到PAM_root的密码,/etc/nss-mysql-root.conf应只允许root用户查看:

chown root/etc/nss-mysql-root.conf

chmod 600/etc/nss-mysql-root.conf

修改/etc/pam-mysql.conf的以下行,注意密码要设置为PAM_root的密码,若表的名字有改动,要相应修改(例如users改为abc,则users.gid应改为abc.gid)

users.host              = localhost

users.database          = user_database

users.db_user           = PAM_root

users.db_passwd         = PAM_root的密码

#users.where_clause     = (host)

users.table             = users

#users.update_table     = (update_table)

users.user_column       = Account

users.password_column   = Password

#users.status_column    = (statcolumn)

users.password_crypt    = 1

#users.use_323_password =(use_323_passwd)

users.use_md5           = yes

#users.where_clause     = (where)

#users.disconnect_every_operation       = (disconnect_every_op) *1

#verbose                = (verbose)

#log.enabled            = (sqllog)

#log.table              = (logtable)

#log.message_column     = (logmsgcolumn)

#log.pid_column         = (logpidcolumn)

#log.user_column        = (logusercolumn)

#log.host_column        = (loghostcolumn)

#log.rhost_column       = (logrhostcolumn) *2

#log.time_column        = (logtimecolumn)

为了避免其他用户看到PAM_root的密码,/etc/pam-mysql.conf应只允许root用户查看:

chown root /etc/pam-mysql.conf

chmod 600 /etc/pam-mysql.conf

修改/etc/pam.d/common-account,在pam_unix.so上面添加一行:

account    sufficient                   pam_mysql.so    config_file=/etc/pam-mysql.conf

修改/etc/pam.d/common-auth,在pam_unix.so上面添加一行:

auth    sufficient                      pam_mysql.so    config_file=/etc/pam-mysql.conf

修改/etc/pam.d/common-session,在pam_permit.so上面添加一行:

session    sufficient                   pam_mysql.so    config_file=/etc/pam-mysql.conf

修改/etc/pam.d/common-password,在pam_unix.so上面添加一行:

password    sufficient                   pam_mysql.so    config_file=/etc/pam-mysql.conf

对于新增加的用户,需要使用password来更新用户密码。

已验证,可支持密钥文件不询问密码直接登录。

为了方便使用,还需要实现以下脚本:

add_users.sh

从文本文件批量导入

add_user.sh

添加一个用户(交互式)

delete_user.sh

删除一个用户(按用户名)

add_group.sh

新建一个组

delete_group.sh

删除一个组

 类似资料: