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是三种基本的用户管理命令,且称为为”用户管理三剑客“吧!
常用参数
-u: --uid, 指定用户UID, 其中,[UID_MIN, UID_MAX]定义在/etc/login.defs文件中
-o: --non-unique, 配合-u选项,不检查UID的唯一性
-g: --gid,指明用户所属基本组,可为组名,可为GID,必须事先存在
-c: --comment, 用户的注释信息
-d: --home-dir,以指定的路径(不存在)为用户的家目录
-s: --shell, 指明默认的SHELL类型,可用列表在/etc/shells文件中
-G: --groups, 为用户指明附加组,组必须事先存在
-N: --no-user-group,不创建私有组作主组,使用users组做主组
-r: --system, 创建系统用户,CentOS 6: ID<500,CentOS 7: ID<1000
使用示例
创建一个帐号,指定其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 ~]#
创建一个系统帐号,并忽略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命令主要用于修改用户的基本属性,但无法修改正在工作的用户的属性。
常用参数
-u UID: 新UID
-s GID: 新的默认SHELL
-g: 新的基本组
-G: 新的附加组,原来的附加组将被覆盖,若要保留,则加-a,--apend.
-a: --append, 追加
-c: 新的注释信息
-d: 新家目录不会自动创建,原家目录中的文件不会同时移动至新家目录里面;若要创建新家目录并要移动原家目录的数据到新家目录中,则加-m选项。
-l: 新的登录名
-L: lock,锁定用户,在/etc/shadow密码栏中增加 !
-U: unlock, 解锁用户,去掉/etc/shadow密码栏中的 !
-e: --expiredate, format YYYY-MM-DD, 指定用户帐号过期日期
-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命令是一个简单粗暴的命令,主要用于删除用户帐号及与其相关的文件,加参数则删除用户的相关文件,不加则只删除帐号。
常用参数
-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主要用来创建新的工作组,并将新创建组的信息添加到系统文件中。
常用参数
-g GID: 指明GID号;[GID_MIN, GID_MAX]
-r: 创建系统组;CentOS 6: ID<500,CentOS 7: ID<1000
-K: --key KEY=VALUE, 覆盖配置文件/etc/login.defs
Example: -K GID_MIN=100 -K GID_MAX=499
-o: 忽略GID
groupmod
主要用途
修改组属性
常用参数
-n group_name: 新组名
-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 ~]#
练习
创建一个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 ~]#
修改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 ~]#
批量创建帐号: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