Linux用户与组之基本管理


  • 简介Linux用户与组

  • useradd

  • usermod

  • userdel

  • groupadd

  • groupmod

  • groupdel


环境:CentOS 6.8

简介Linux用户与组

Linux系统在静态视角下,无非就是由诸多文件组成的一个“文件系统”;从动态视角来看,无非就是一个在内核支配之下的一个“文件系统”。这两种角度是有些区别的:动态角度下,内核是独立的,内核负责管控文件系统,而在静态角度下,连内核本身也是文件系统下的一个文件而已。故而对Linux系统的管理无非就是对文件的管理!而 Linux系统中的用户与组的概念,本质上也是一个文件而已,这儿没有“虚化”的概念,只有一切皆文件的思想!

Unix, 是一个Multi-tasks, Multi-Users,即多用户多任务的一个操作系统,Linux当然也继承了这一优良的思想,在计算机的世界中,很多现象是可以借助于社会问题而思考的,社会作为人们共同活动的场所,我们需要不断地去获取社会资源,来满足我们的日常生活,但是每一个人获取社会资源的能力与渠道都不同,随着社会生产大分工,人类这个大圈子逐渐有了阶级,每个阶级都有自己的利益代言人,而在中国古代,大概分为士、农、工、商四大阶层,阶层的出现体现在个体身上主要就是身份的不同,身份的不同也意味着其获取社会财富与资源的能力与权限不同,资源通常都是宝贵的,不可能每个人都可以任意的索取与利用,这一现象照样在Linux系统中体现的淋漓尽致,于是,为了更好的分配与利用计算机的能力,我们便有了用户与组的概念。

一山不容二虎,Linux只有一个超级用户,它就是管理员,通常是root(UID=0); 除管理员外,其它用户都称之为普通用户,而普通用户主要分为系统用户与登录用户,登录用户就是我们平常所见的用户,其主要动作是交互式登录从而完成相关工作,而系统用户是对守护进程与后台服务获取资源进行权限分配的用户,它们是背后的英雄,默默地给为计算机的正常运行提供强大的后勤保障。

组,就是多个用户的一个共同集合,不难理解,组的出现就是为了我们更加高效地管理用户,也就是对Linux的用户进行“阶级分化”,对于不同的组,赋予不同的权限。而组的分类对应于用户的分类,有管理员组(GID=0)与普通用户组,而普通用户组又分为系统用户组与登录用户组;除此之外,组的分类又可分为基本组(主组)与附加组;也可分为私有组与公共组;另外,在Linux系统中, 一个帐号定有其主组(primary group).主组有且只有一个。而附加组(secondary group)并不是必须要有的;私有组,组名同用户名,且只包含一个用户;公共组,组内包含了多个用户。

没有规矩,不成方圆。Linux中的用户也必须要遵循一个最基本的守则,这就是安全上下文(security context)与3A认证:

安全上下文:	
进程以其发起者的身份运行;(进程就是运行中的程序)
进程对文件的访问权限,取决于发起引此进程的用户的权限;
每一个进程在访问资源时,一定是代表某个用户在运行,进程所拥有的权限,
实际上是发起此进程用户的权限。3A:Authentication: 认证Authorization: 授权Audition: 审计

在Linux系统中,所有的文件都有其文件描述符fd, 而用户与组作为文件的一种,其亦有自己的标识符,俗称UID与GID,计算机正是通过UID与GID来区分哪类用户与组的,而root用户的默认UID为0,当其UID不为0时,root便不再是“rooter"了!所以,这里面就存在一个名称解析的问题,即将标识符转换为用户名或组名,反之亦然。

小结一下:

Linux用户:Username/UID
管理员:0普通用户:1-65535
	系统用户:1-999(CentOS 7)			 
	         1-499(CentOS 5\6)
	登录用户:1000-60000(CentOS 7)			  
	         500-60000(CentOS 5\6)
			  
Linux组:Groupname/GID
管理员组:0
	普通用户组:1-65535
	系统用户组:1-999(CentOS 7)				
	           1-499(CentOS 5\6)
	登录用户组:1000-60000(CentOS 7)				
	           500-60000(CentOS 5\6)

关于认证:简单的说就是通过比对事先存储的识别信息,在登录时看是否一致

这期间,密码是绕不过的一关,且年密码的使用策略:

1、使用随机密码;
2、最短长度不要低于8位;
3、应用使用大写字母、小写字母、数字和标点符号四类字符中至少三类;
4、定期更换;

密码意味着加密算法,简单了解下加密算法的各类:

加密算法:
	对称加密:加密和解密使用同一个密码;
	非对称加密:加密和解密使用的一对密钥,俗称密钥对;
		密钥对:
			公钥:public key 
			私钥:private key 
	单向加密:只能加密,不能解密;提取数据特征码;
		定长输出
		雪崩效应

加密机制:

加密:明文--> 密文
解密:密文--> 明文

常见的加密算法:

md5: message digest, 128bits
sha1: secure hash algorithm, 160bit
ssha224: 224bits
sha256: 256bits
sha384: 384bits
sha512: 512bits

有了加密的各类,意味的加密的方式是可以更改的:

[root@centos6 ~]# authconfig --passalgo=sha256 --update

密码往往是有期限的, 先上图,后续详解:



最近一次更改密码的日期:密码的最小使用期限:密码的最大使用期限:密码的警告时间段:密码禁用期:帐户的过期日期:保留字段

一下子来了这么多的用户名与组名,还有UID与GID,密码等,总得有个地方待吧:且看Linux系统的用户管理信息库,后续详解:

Linux用户和组的主要配置文件:    
    /etc/passwd:  用户及其属性信息(名称、UID、主组ID等)    
    /etc/group: 组及其属性信息    
    /etc/shadow: 用户密码及其使用信息    
    /etc/gshadow: 组密码及其相关信息

useradd

主要用途

创建用户

useradd - create a new user or update default new user information
useradd [options] LOGIN
useradd -D               # 显示默认设置
useradd -D [options]    # 更改默认设置

useradd命令主要用于创建用户,useradd、usermod、userdel是三种基本的用户管理命令,且称为为”用户管理三剑客“吧!

常用参数

  1. -u: --uid, 指定用户UID, 其中,[UID_MIN, UID_MAX]定义在/etc/login.defs文件中

  2. -o: --non-unique, 配合-u选项,不检查UID的唯一性

  3. -g: --gid,指明用户所属基本组,可为组名,可为GID,必须事先存在

  4. -c: --comment, 用户的注释信息

  5. -d: --home-dir,以指定的路径(不存在)为用户的家目录

  6. -s: --shell, 指明默认的SHELL类型,可用列表在/etc/shells文件中

  7. -G: --groups, 为用户指明附加组,组必须事先存在

  8. -N: --no-user-group,不创建私有组作主组,使用users组做主组

  9. -r: --system, 创建系统用户,CentOS 6: ID<500,CentOS 7: ID<1000

使用示例

  1. 创建一个帐号,指定其uid, 主组,附加组,默认shell,注释信息,家目录

[root@centos6 ~]# groupadd zhizhan  # 主组必须事先存在
[root@centos6 ~]# useradd zhizhan -u 510 -g zhizhan -G liansir -s /bin/csh -c "redhatzhizhan"
 -d /testdir/zhizhan
[root@centos6 ~]# 
[root@centos6 ~]# getent passwd zhizhan  # 从名称服务切换库里面获得所需信息
zhizhan:x:510:502:redhatzhizhan:/testdir/zhizhan:/bin/csh
[root@centos6 ~]# groups zhizhan  # 查看用户所在组
zhizhan : zhizhan liansir
[root@centos6 ~]#
  1. 创建一个系统帐号,并忽略UID的唯一性

[root@centos6 ~]# useradd cent -r -u 455 -o
[root@centos6 ~]# getent passwd cent 
cent:x:455:455::/home/cent:/bin/bash
[root@centos6 ~]#

相关文件:man useradd

FILES
   /etc/passwd       User account information.    # 用户帐号信息

   /etc/shadow
       Secure user account information.    # 安全的用户帐号信息

   /etc/group
       Group account information.     # 组帐号信息

   /etc/gshadow
       Secure group account information.    # 安全的组帐号信息

   /etc/default/useradd
       Default values for account creation.   # 帐号创建的默认值

   /etc/skel/
       Directory containing default files.    # 用户默认文件目录

   /etc/login.defs
       Shadow password suite configuration.  
       # 影子口令配置(邮件、密码日期、UID,系统用户,是否创建家目录,UMASK,加密算法等)

认识/etc/skel与/etc/login.defs

[root@centos6 skel]# ls -a
.  ..  .bash_logout  .bash_profile  .bashrc  .gnome2  .mozilla
[root@centos6 skel]#
[root@centos6 ~]# cat /etc/login.defs  # 只截取了常见的重要信息
MAIL_DIR        
/var/spool/mail

PASS_MAX_DAYS   99999
PASS_MIN_DAYS   0
PASS_MIN_LEN    5
PASS_WARN_AGE   7

UID_MIN                   500
UID_MAX                 60000
GID_MIN                   500
GID_MAX                 60000

CREATE_HOME     yes

UMASK           077

USERGROUPS_ENAB yes      # 开启空组则删除功能ENCRYPT_METHOD SHA512

查看或更改创建用户时的默认信息

[root@centos6 ~]# cat /etc/default/useradd 
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[root@centos6 ~]# 
[root@centos6 ~]# useradd -D -s /bin/csh   # 更改用户相关的默认信息
[root@centos6 ~]# useradd -D              # 查看用户相关的默认信息
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/csh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[root@centos6 ~]# 
[root@centos6 ~]#

usermod

主要用途

用户属性修改

usermod - modify a user account
usermod [options] LOGIN

usermod命令主要用于修改用户的基本属性,但无法修改正在工作的用户的属性。

常用参数

  1. -u UID: 新UID

  2. -s GID: 新的默认SHELL

  3. -g: 新的基本组

  4. -G: 新的附加组,原来的附加组将被覆盖,若要保留,则加-a,--apend.

  5. -a: --append, 追加

  6. -c: 新的注释信息

  7. -d: 新家目录不会自动创建,原家目录中的文件不会同时移动至新家目录里面;若要创建新家目录并要移动原家目录的数据到新家目录中,则加-m选项。

  8. -l: 新的登录名

  9. -L: lock,锁定用户,在/etc/shadow密码栏中增加 !

  10. -U: unlock, 解锁用户,去掉/etc/shadow密码栏中的 !

  11. -e: --expiredate, format YYYY-MM-DD, 指定用户帐号过期日期

  12. -f: --inactive, 设定非活动期限

使用示例

全面修改之前创建的zhizhan用户:

[root@centos6 ~]# groupadd zhizhan
[root@centos6 ~]# useradd zhizhan -u 510 -g zhizhan -G liansir -s /bin/csh -c "redhatzhizhan"
 -d /testdir/zhizhan
[root@centos6 ~]#
[root@centos6 ~]# groupadd caocao     # 修改主组
[root@centos6 ~]# groupadd guanyu     # 追加附加组
[root@centos6 ~]# groupadd zhangfei   # 追加附加组
[root@centos6 ~]# usermod zhizhan -l lian -u 555 -g caocao -aG guanyu,zhangfei 
-s /bin/bash -c "xinsanguo" -d /home/shitou   
[root@centos6 ~]#

 # 查看修改结果
[root@centos6 ~]# getent passwd lian
lian:x:555:503:xinsanguo:/home/shitou:/bin/bash
[root@centos6 ~]# groups lian
lian : caocao liansir guanyu zhangfei
[root@centos6 ~]#

使用户lian在22天之后处于非活动时间

[root@centos6 ~]# usermod lian -f 22
[root@centos6 ~]# getent shadow lian
lian:!!:17015:0:99999:7:22::
[root@centos6 ~]#

设置用户lian的帐号过期时间

[root@centos6 ~]# usermod lian -e 2016-08-08
[root@centos6 ~]# getent shadow lian
lian:!!:17015:0:99999:7:22:17021:
[root@centos6 ~]#

给用户设置密码

[root@centos6 ~]# echo centos | passwd --stdin lian
Changing password for user lian.
passwd: all authentication tokens updated successfully.

锁定用户

[root@centos6 ~]# usermod -L lian


解锁用户

[root@centos6 ~]# usermod -U lian


相关文件

FILES
   /etc/group
       Group account information.   # 组帐号信息

   /etc/gshadow
       Secure group account information.    # 安全组帐号信息

   /etc/login.defs
       Shadow password suite configuration.

   /etc/passwd       User account information.

   /etc/shadow
       Secure user account information.

userdel

主要用途

删除用户

userdel - delete a user account and related files
userdel [options] LOGIN

userdel命令是一个简单粗暴的命令,主要用于删除用户帐号及与其相关的文件,加参数则删除用户的相关文件,不加则只删除帐号。

常用参数

  1. -r: --remove, 删除用户家目录

使用示例

[root@centos6 ~]# userdel -r lian
userdel: lian home directory (/home/shitou) not found
[root@centos6 ~]#

至此,用户管理三剑客的基本情况便介绍完成,接下来是组管理三剑客:groupadd, groupmod, groupdel. 其使用思路是类似的!


groupadd

主要用途

创建组

groupadd - create a new groupgroupadd [options] group

groupadd主要用来创建新的工作组,并将新创建组的信息添加到系统文件中。

常用参数

  1. -g GID: 指明GID号;[GID_MIN, GID_MAX]

  2. -r: 创建系统组;CentOS 6: ID<500,CentOS 7: ID<1000

  3. -K: --key KEY=VALUE, 覆盖配置文件/etc/login.defs

    Example: -K GID_MIN=100 -K GID_MAX=499
  4. -o: 忽略GID

groupmod

主要用途

修改组属性

常用参数

  1. -n group_name: 新组名

  2. -g GID: 新GID

groupdel

主要用途

删除组

groupdel - delete a group
groupdel [options] GROUP

groupdel命令用来删除指定的用户组,该命令要修改的系统文件包括/etc/group与/etc/shadow,若要删除的组中还包括一些用户,则须删除这些用户之后再删除相应的组,换言之,groupdel只能删除空组,不能删除非空组。

使用示例

[root@centos6 ~]# groupadd -g 550 fengcai    # 创建组fengcai
[root@centos6 ~]# useradd feng -g fengcai    # 创建用户并加入组
[root@centos6 ~]# groupdel fengcai           # 删除非空组
groupdel: cannot remove the primary group of user 'feng'
[root@centos6 ~]# userdel feng
[root@centos6 ~]# groupdel fengcai
[root@centos6 ~]#

练习

  1. 创建一个testuser,uid 1234,主组:bin, 辅助组:root,ftp,shell:/bin/csh home:/testdir/testuser

[root@centos6 ~]# useradd testuser -u 1234 -g bin -G root,ftp -s /bin/csh -d /testdir/testuser
[root@centos6 ~]#
[root@centos6 ~]# getent passwd testuser
testuser:x:1234:1::/testdir/testuser:/bin/csh
[root@centos6 ~]# id testuser
uid=1234(testuser) gid=1(bin) groups=1(bin),0(root),50(ftp)
[root@centos6 ~]# groups testuser
testuser : bin root ftp
[root@centos6 ~]#
  1. 修改testuser uid:4321,主组:root,辅助组:nobody,loginname:test,home:/home/test 家目录的数据要迁移

[root@centos6 ~]# usermod testuser -u 4321 -g root -G nobody -l test -d /home/test
[root@centos6 ~]#
[root@centos6 ~]# getent passwd testtest:x:4321:0::/home/test:/bin/csh
[root@centos6 ~]# id test
uid=4321(test) gid=0(root) groups=0(root),99(nobody)
[root@centos6 ~]# groups test
test : root nobody
[root@centos6 ~]#
  1. 批量创建帐号:user1...user10,uid:3000-3009, shell:/bin/csh, home:/testdir/username,要求其密码为passwd:usernamepass格式

1. 复制/etc/skel文件到/home/testdir目录下

[root@centos6 ~]# cp -r /etc/skel/ /home/testdir/
[root@centos6 ~]# cd /home/testdir/
[root@centos6 testdir]# ls -a.  ..  .bash_logout  .bash_profile  .bashrc  .gnome2  .mozilla
[root@centos6 testdir]# 

2. 按照固定格式创建生成用户的文件,如下:

[root@centos6 ~]# cat user.txt 
user1:x:3000:3000::/home/testdir/user1:/bin/csh
user2:x:3001:3001::/home/testdir/user2:/bin/csh
user3:x:3002:3002::/home/testdir/user3:/bin/csh
user4:x:3003:3003::/home/testdir/user4:/bin/csh
user5:x:3004:3004::/home/testdir/user5:/bin/csh
user6:x:3005:3005::/home/testdir/user6:/bin/csh
user7:x:3006:3006::/home/testdir/user7:/bin/csh
user8:x:3007:3007::/home/testdir/user8:/bin/csh
user9:x:3008:3008::/home/testdir/user9:/bin/csh
user10:x:3009:3009::/home/testdir/user10:/bin/csh
[root@centos6 ~]# 

3. 批量创建帐号命令:newusers
[root@centos6 ~]# newusers user.txt 
[root@centos6 ~]#

4. 按照固定格式创建生成密码的文件,如下:

[root@centos6 ~]# cat passwd.txt 
user1:user1
user2:user2
user3:user3
user4:user4
user5:user5
user6:user6
user7:user7
user8:user8
user9:user9
user10:user10
[root@centos6 ~]# 

5. 批量为用户添加密码:cat passwd.txt | chpasswd

[root@centos6 ~]# cat passwd.txt | chpasswd 
[root@centos6 ~]#

检查是否符合要求:

[root@centos6 ~]# tail /etc/passwd
user1:x:3000:3000::/home/testdir/user1:/bin/csh
user2:x:3001:3001::/home/testdir/user2:/bin/csh
user3:x:3002:3002::/home/testdir/user3:/bin/csh
user4:x:3003:3003::/home/testdir/user4:/bin/csh
user5:x:3004:3004::/home/testdir/user5:/bin/csh
user6:x:3005:3005::/home/testdir/user6:/bin/csh
user7:x:3006:3006::/home/testdir/user7:/bin/csh
user8:x:3007:3007::/home/testdir/user8:/bin/csh
user9:x:3008:3008::/home/testdir/user9:/bin/csh
user10:x:3009:3009::/home/testdir/user10:/bin/csh[
root@centos6 ~]#

看是否能够正常登录:


注意点:家目录相关配置,使用户正常登录

止战


2016.8.2