一、首先我们来了解下用户管理和权限管理的机制

A:认证机制

identity(username/password)  用户名/密码

A:permission   权限

mode   模式

ownership   所有权

二、Linux下的用户和组的介绍

    用户:USERNAME/password

     用户的UID(user identity)从:0-65535

       用户分为:管理员、普通用户>系统用户、登录用户。

       管理员UID为:0

       普通用户UID为:1-60000

   

    组:GROUPNAME/GID

      管理员组:0

普通组:

1-499, 1-999

500+, 1000+

用户的基本组:

用户的私有组;

用户的附加组


三、Linux用户和组的相关的配置文件:

/etc/passwd:用户名、UID、基本组等信息

/etc/group:组名、GID、组内包含的用户;

/etc/shadow:用户密码及相关属性;

/etc/gshadow:组的密码及相关属性;


四、用户和组管理的相关命令

    

useradd、usermod、passwd、userdel

groupadd、groupmod、gpasswd、groupdel

chage, chsh, chfn

id, w, who, whoami

su

首先来看useradd:创建用户

     

useradd [options] LOGIN

useradd -D [options]

-r: 创建系统用户

-u UID: 指定UID;

-g GID: 指定用户所属基本组,此组必须事先存在

-c 'COMMENT':

-d /PATH/TO/SOMEWHERE:指定用户的主目录路径;此位置不能事先存在,否则,其用户相关配置文件将被复制;/etc/skel

-s SHELL:设定用户的默认shell;

cat /etc/shells

-G GID,...:指定所属的附加组;

-M: 不给用户创建家目录;


usermod:用户属性修改

usermod [OPTION]... LOGIN

-u UID

-g GID

-G GID[,GID,...]:修改用户所属的附加组;同时使用-a选项;

-s SHELL

-c 'COMMENT'

-d HOME: 修改用户的家目录为新位置时,用户原来的文件是不会被移动至新家;-m选项可实现同时将其迁至新的家目录;

-l LOGIN:

-L:lock user

-U: unlock user


passwd:给用户添加密码

passwd [OPTION] [UserName]

-l: lock user

-u: unlock user

-n mindays: 最短使用期限;

-x maxdays:默认为99999天;

-w warndays:

-i inactivedays:

--stdin:从标准输出接收用户密码;

echo 'centos' | passwd --stdin centos


userdel:删除用户

userdel [-r] USERNAME

-r:删除用户的同时删除其家目录;

我们来做个举例:

[root@localhost ~]# useradd -u 100 centos -r   //创建centos用户为系统用户,并制定UID为100.

[root@localhost ~]# usermod -u 200 centos    //修改centos用户UID为200,并查看修改是否成功

usermod: warning: /var/spool/mail/centos not owned by centos

[root@localhost ~]# id centos

uid=200(centos) gid=493(centos) groups=493(centos)

[root@localhost ~]# usermod -G sql centos  //为用户添加database和sql两个附加组

[root@localhost ~]# usermod -G database -a centos  //注意:如果不加-a的话原附加组将被覆盖,而达不到同时添加两个附加组的效果。

[root@localhost ~]# id centos    //查看用户centos属性。

uid=200(centos) gid=493(centos) groups=493(centos),501(database),502(sql)

[root@localhost ~]# mkdir /home/database    //创建home下一个目录,并将centos用户家目录更

[root@localhost ~]# usermod -d /home/database centos    换为/home/database

[root@localhost ~]# passwd -n 30 centos  //为用户设置密码最短使用期限:

Adjusting aging data for user centos.

passwd: Success

[root@localhost ~]# echo 'centos' |   //从标准输出接收用户密码的使用方法;

> echo 'centos' | passwd --stdin centos

Changing password for user centos.

passwd: all authentication tokens updated successfully.



ok,以上是我们useradd的基本简单的用法,下面我们继续来看组的建立与组命令的用法:

groupmod: 组属性修改

groupmod [OPTION] GROUPNAME

-n GROUP_NAME

-g GID

gpasswd:设定组密码

newgrp:切换基本组为指定的组

groupdel:删除组

我们来试运行这些命令:

首先我们来创建一个组,并对这个组做属性修改、设定密码、切换组、删除组等操作:

[root@localhost ~]# groupadd schneider

[root@localhost ~]# groupmod -g 503 schneider

[root@localhost ~]# gpasswd schneider

Changing the password for group schneider

New Password: ******

Re-enter new password: ******

[root@localhost ~]# su -l base

说明下:su base  只是临时切换到用户下面,我们可以用echo $PATH查看下linux变量,会发现:

[root@localhost ~]# su base

bash-4.1$ echo $PATH

/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

但是如果我们exit退出,使用su - base登录,会是这样:

[root@localhost ~]# su - base

-bash-4.1$ echo - base

- base

linux环境变量不一样,su - USERNAME是完全切换到该用户下面,请区分。

我们再来看切换组:

bash-4.1$ newgrp schneider

Password: 

bash-4.1$ groups 

schneider sql    //我们临时添加了schneider组到base用户中,注意,newgrp不是永久性的添加用               户到组中,只是使用户临时拥有这个组的权限。

那么删除组我们就不做操作了,很简单,groupdel直接删除就好,但是要注意,如果组内有用户,那么是删除不了的,所以在做删除组操作前,我们需要查看并转移组内用户!


chage:修改用户账号及密码的属性

chage [OPTION]... LOGIN

-l:列出用户的以及密码的有效期限
-m:修改密码的最小天数
-M:修改密码的最大天数
-I:密码过期后,锁定帐号的天数
-d:指定密码最后修改的日期
-E:有效期,0表示立即过期,-1表示永不过期
-W:密码过期前,开始警告天数

我们做个简单的操作示例:

[root@localhost ~]# chage -l base    //查看用户的密码信息有效天数等。

Last password change : Jan 31, 56704

Password expires : never

Password inactive : never

Account expires : never

Minimum number of days between password change : -1

Maximum number of days between password change : -1

Number of days of warning before password expires : -1

其它命令:chfn, chsh, finger, whoami, who, w

我们可以使用chfn为用户添加用户信息:

[root@localhost ~]# chfn base

Changing finger information for base.

Name []: basee

Office []: shanghai

Office Phone []: 119

Home Phone []: 120


Finger information changed.

当添加完用户信息后,我们可通过cat /etc/passwd命令来查看用户改变的信息。




那么以上就是我们关于用户管理各命令的使用及示例,如果有什么不足的或者忽略的地方,欢迎大家指正!谢谢!