M20 – 1- 第三周博客(1):Linux用户、组

Linux是个多用户多任务的分时操作系统,因此要使用系统资源的用户都必须先向系统管理员申请一个账号,然后以这个账号的身份进入系统。用户的账号一方面能帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问与限制,并为用户提供安全性保护。每个用户账号都拥有一个惟一的用户名(UID)和用户口令(PASSWD)。用户在登录时键入正确的用户名和口令后,才能进入系统和自己的主目录。

实现用户账号的管理,要完成的工作主要有如下几个方面:

  1. 用户账户的添加、删除、管理

  2. 用户口令的管理

  3. 用户以及组的管理

一、Linux用户的添加、删除、管理

1、Linux用户的添加

Linux如何添加用户呢,添加用户后如何认证呢

Linux添加用户自带着两个命令useradd和adduser,接下来将的是如何使用命令创建用户

useradd 命令

简介:
useradd - create a new user or update default new user information
格式:
useradd [options] LOGIN
useradd -D
useradd -D [options]
选项:
-c"COMMENT":用户的注释信息,例如用户的家庭地址、电话、公司地址等
-d HOME_DIR:指定的用户的家目录,必须事先不存在
-g GID:指明用户所属基本组,可为命名为组名或GID
-G GROUP1[,GROUP2,...]:为用户指明附加组,组必须事先存在
-N:不创建私用组做主组,使用users组做主组
-u uid:设置用户的ID值。必须为唯一的ID值,除非用-o选项。数字不可为负值。预设为最小不得小于99而逐次增加。0~99传统上是保留给系统帐号使用
-o:配合-u 选项,不检查UID的唯一性
-r: 创建系统用户(CentOS 6: ID<500,CentOS 7: ID<1000)
-s SHELL:指明用户的默认使用的shell程序;可用列表在/etc/shells文件
实例1:
[root@centos7 ~]# useradd -c "new" -d /home/gentoo -u 1055 -s /bin/sh gentoo  #创建普通用户gentoo,设置uid号为1055,并且设置注释为“new”,并指定家目录为路径为/home/gentoo,使用shell类型为/bin/sh
[root@centos7 ~]# id gentoo
uid=1055(gentoo) gid=1055(gentoo) groups=1055(gentoo)
实例2:
[root@centos7 ~]# useradd -c "system" -r -s /bin/bash -d /home/nginx nginx  #创建系统用户nginx,并设置注释为“system”,并指定家目录为路径为/home/nginx,使用shell类型为/bin/bash
[root@centos7 ~]# id nginx
uid=991(nginx) gid=986(nginx) groups=986(nginx)
实例3
[root@localhost ~]# id gentoo
uid=1055(gentoo) gid=1055(gentoo) groups=1055(gentoo)
[root@localhost ~]# useradd -G gentoo hardoop    #创建普通用户hardoop,并将gentoo组作为hardoop的附加组
[root@localhost ~]# id hardoop
uid=1056(hardoop) gid=1056(hardoop) groups=1056(hardoop),1055(gentoo)

adduser命令实际是一个软链接,引用useradd创建用户

[root@localhost ~]# whereis adduser
adduser: /usr/sbin/adduser /usr/share/man/man8/adduser.8.gz
[root@localhost ~]# ls -ld /usr/sbin/adduser 
lrwxrwxrwx. 1 root root 7 Aug  3  2016 /usr/sbin/adduser -> useradd
[root@localhost ~]#

从上面的讲解是否已经对创建用户得心应手了呢,接下来讲的是介绍安全3A,为什么要讲3A呢,因为并不是创建用户后就能使用系统的资源,那又跟3A有什么关系呢,接下来就是了解3A:

安全3A

Authentication(认证):对用户的身份进行验证

Authorization(授权):用户认证后,可以系统上使用那些权限

Accouting|Audition(审计):用户权限后做了哪些操作,都是有监控和记录的

为了更方便理解3A的概念,接下来讲个例子:假设你在某国企上班,你上班需要进入办公室,这时就需要出示你的工牌,这就是认证(Authentication),当你认证后进入办公室后,并登录你
的办公电脑系统后,系统会识别该用户对该系统有哪些资源可以使用,那些是不能使用,这就是授权(Authorization),接下来是你在使用资源后,系统会每时每刻监控你的操作记录,这就是
审计(Accouting|Audition)。

2、用户的删除

当有些员工辞职后,会留下用户的一些信息,而这些信息对公司有着一些至关重要的机密,因此需要将用户的信息删除,如何删除用户的信息,接下来将的就是删除用户信息的命令:

userdel 命令

简介:
userdel - delete a user account and related files
格式:
userdel [options] LOGIN
选项:
-r:删除用户家目录
实例1:
[root@localhost ~]# man userdel
[root@localhost ~]# id gentoo
uid=1055(gentoo) gid=1055(gentoo) groups=1055(gentoo)
[root@localhost ~]# userdel gentoo
userdel: group gentoo not removed because it has other members.  #因为没有使用-r选项,导致没有删除用户的家目录,以及mail邮箱目录
[root@localhost ~]# id gentoo                                    #但是用户确实已经删除了
id: gentoo: no such user
[root@localhost ~]# ls -ld /home/gentoo
drwx------ 3 1055 gentoo 74 Aug  3 20:00 /home/gentoo
[root@localhost ~]# ls -l /var/spool/mail/gentoo 
-rw-rw---- 1 1055 mail 0 Aug  3 20:00 /var/spool/mail/gentoo
实例2:
[root@localhost ~]# 
[root@localhost ~]# id centos
uid=1001(centos) gid=1001(centos) groups=1001(centos),1003(admin)
[root@localhost ~]# userdel -r centos             #直接使用-r选项即可删除用户的家目录和和mail邮箱目录,建议删除用户使用-r选项
[root@localhost ~]# id centos
id: centos: no such user
[root@localhost ~]# ls -l /home/
total 0
drwx------  5 a       a       121 Aug  3 16:35 a
drwx------  5 b       a       121 Aug  3 16:35 b
drwx------  3    1055 gentoo   74 Aug  3 20:00 gentoo
drwx------  3 hardoop hardoop  74 Aug  3 20:10 hardoop
drwx------. 3 mageedu mageedu  74 Aug  3  2016 mageedu
[root@localhost ~]# ls -l /var/spool/
total 4
drwxr-x--x.  2 root   abrt      6 Dec  1  2015 abrt
drwx------.  2 abrt   abrt      6 Dec  1  2015 abrt-upload
drwxr-xr-x.  2 root   root     60 Aug  3  2016 anacron
drwx------.  3 daemon daemon   29 Aug  3  2016 at
drwx------.  2 root   root      6 Jul 27  2015 cron
drwx--x---.  3 root   lp       16 Aug  3  2016 cups
drwxr-xr-x.  2 root   root      6 Aug 12  2015 lpd
drwxrwxr-x.  2 root   mail     73 Aug  3 21:00 mail
drwxr-xr-x.  2 root   root      6 Nov 20  2015 plymouth
drwxr-xr-x. 16 root   root   4096 Aug  3  2016 postfix

是不是觉得删除用户特简单呢

3、用户账户的管理

是否觉得在创建用户的时候,创建用户的信息以及密码还有一起创建出来的组信息等都放置在那个目录呢,接下来将的就是用户的管理信息:

当管理员在创建用户的时候,用户的信息以及密码实际存放在passwd命令的配置文件中,配置文件为"/etc/passwd"和"/etc/share"下,下面是讲的是两个配置文件的详解:

/etc/passwd里面的格式为:(直接man 5 passwd 即可查看格式)

以冒号为分隔符

name:password:UID:GID:GECOS:directory:shell
用户名:密码:用户的uid:用户的基本组id:用户的注释信息:用户的家目录:用户使用的shell

/etc/share里面的格式为:(直接man 5 shadow 即可查看格式)

以root为样板

root:$6$4w4LEKnT$zOs9se3YgGE.5mPA4u.pTR9/Wl7mItDe8gYKUG7zIWdpHshP6wCvvHQkWgzevTYGqNc2KP7TyvqyZIiYDxGNs.:17016:0:99999:7:::
用户名:加密了的密码:最近一次更改密码的日期:密码的最小使用期限:最大密码使用期限:密码警告时间段:密码禁用期:账户过期日期:保留字段

4、用户的密码以及其它属性更改

用户平常会有丢失密码的情况,这时可以用超级管理员更改用户的密码即可再次登陆,如何更改用户的密码呢,接下来讲的是更改用户的密码以及用户的属性

passwd 命令

简介:
passwd - update user's authentication tokens
格式:
passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
选项:
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码
-n mindays:指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-iinactivedays:非活动期限
--stdin:从标准输入接收用户密码;echo "PASSWORD" | passwd--stdinUSERNAME
实例1:
[root@localhost ~]# id centos
uid=1057(centos) gid=1057(centos) groups=1057(centos)
[root@localhost ~]# passwd centos       #更改用户centos密码(只有root才能更改别人用的密码)
Changing password for user centos.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.   #提示更改成功
实例2
[root@localhost ~]# echo "1234567" | passwd --stdin "centos"   #此种方式也能更改用户的密码,这种方式容易暴露密码(在实际生产环境中,建议不适用此种方法改密)
Changing password for user centos.
passwd: all authentication tokens updated successfully.
[root@localhost ~]#

usermod 命令

简介:
usermod - modify a user account
格式:
usermod [options] LOGIN
选项:
-u UID:更改uid号
-g GID:更改用户的基本组
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项,表示append
-s SHELL:更改用户的默认SHELL
-c 'COMMENT':更改用户的注释信息
-d HOME:新家目录不会自动创建,原家目录中的文件不会同时移动至新的家目录;若要创建新家目录并移动原家数据,同时使用-m选项
-l login_name:更改用户的名称
-L:lock指定用户,在/etc/shadow 密码栏的增加
-U:unlock指定用户,将/etc/shadow 密码栏的! 拿掉
-e YYYY-MM-DD:指明用户账号过期日期
-f INACTIVE:设定非活动期限
实例1:
[root@localhost ~]# getent passwd centos
centos:x:1057:1057::/home/centos:/bin/bash
[root@localhost ~]# id centos
uid=1057(centos) gid=1057(centos) groups=1057(centos)
[root@localhost ~]# usermod -u 1058 -g hardoop -G mageedu -c 'system' -s /bin/sh -l 'apache' centos  #更改用户的uid为1058、基本组为hardoop,覆盖附加组为mageedu,注释信息更改为‘system’,shell更改为/bin/sh,并更改用户的名称为apache
[root@localhost ~]# id centos  #已经更改为apache,因此查询不到
id: centos: no such user
[root@localhost ~]# id apache
uid=1058(apache) gid=1056(hardoop) groups=1056(hardoop),1000(mageedu)  #已经显示更改成功
[root@localhost ~]# getent passwd apache   #已经显示更改成功
apache:x:1058:1056:system:/home/centos:/bin/sh
实例2:
[root@localhost ~]# id apache
uid=1058(apache) gid=1056(hardoop) groups=1056(hardoop),1000(mageedu)
[root@localhost ~]# usermod -aG nginx,mysql apache  #将组nginx、mysql添加为apache的附加组
[root@localhost ~]# id apache
uid=1058(apache) gid=1056(hardoop) groups=1056(hardoop),27(mysql),1000(mageedu),986(nginx)  #以显示添加成功,附加组有多个的话,由,分隔

chage 命令

简介:
chage - change user password expiry information
格式:
chage [options] LOGIN
选项:
-d:上一次更改的日期
-E:帐号到期的日期,过了这天,此帐号将不可用    
-I:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用    
-m:密码可更改的最小天数,为零时代表任何时候都可以更改密码    
-M:密码保持有效的最大天数  
-W:用户密码到期前,提前收到警告信息的天数
-l:显示密码策略
实例1:
[root@localhost ~]# chage -l apache
Last password change					: Aug 03, 2016   #最近一次密码修改时间
Password expires					: never          #密码过期时间
Password inactive					: never          #密码失效时间
Account expires						: never          #帐户过期时间
Minimum number of days between password change		: 0              #两次改变密码之间相距的最小天数 
Maximum number of days between password change		: 99999          #两次改变密码之间相距的最大天数
Number of days of warning before password expires	: 7              #在密码过期之前警告的天数

blob.png

5、用户相关的其他命令

chfn 命令

简介:
chfn - change your finger information
格式:
chfn [-f full-name] [-o office] ,RB [ -p office-phone] [-h home-phone] -u] [-v] [username]
选项:
-f:设置真实姓名
-h:设置家中的电话号码
-o:设置办公室的地址
-p:设置办公室的电话号码
-u --help:在线帮助
-v -version:显示版本信息
实例1:
[root@localhost ~]# chfn
Changing finger information for root.
Name [apache]: tom 
Office []:       
Office Phone []: ^C
[root@localhost ~]# chfn
Changing finger information for root.
Name [apache]: tom  
Office []: mageedu
Office Phone []: 110
Home Phone []: 119

Finger information changed.

chsh 命令

简介:
chsh - change your login shell
格式:
chsh - change your login shell
选项:
-s --shell:更改系统预设的shell环境
-l --list-shells:列出目前系统可用的shell清单
-u --help:在线帮助
-v -version:显示版本信息
实例1
[zabbix@localhost ~]$ chsh
Changing shell for zabbix.
New shell [/bin/bash]: /bin/sh
Password: 
Shell changed.

finger 命令

简介:
finger — user information lookup program
格式:
finger [-lmsp] [user ...] [user@host ...]
选项:
-l:列出该用户的帐号名称,真实姓名,用户专属目录,登入所用的Shell,登入时间,转信地址,电子邮件状态,还有计划文件和方案文件内容
-m:排除查找用户的真实姓名
-s:列出该用户的帐号名称,真实姓名,登入终端机,闲置时间,登入时间以及地址和电话
-p:列出该用户的帐号名称,真实姓名,用户专属目录,登入所用的Shell,登入时间,转信地址,电子邮件状态,但不显示该用户的计划文件和方案文件内容
实例1:
[root@localhost ~]# finger
Login     Name       Tty      Idle  Login Time   Office     Office Phone
root      tom        tty1     6:42  Aug  3 15:53 mageedu    110
root      tom        pts/0          Aug  3 15:56 (10.1.250.48)
root      tom        pts/1      39  Aug  3 15:59 (10.1.250.48)

6、用户的其他信息

Linux用户中是否uid是无限制的呢,其实是有限制的,下面将的是与用户一些相关信息:

6.1、 Linux用户:Username/UID

管理员:root, 0

普通用户:1-65535

系统用户:1-499(CENTOS6), 1-999

   对守护进程获取资源进行权限分配

登录用户:500(CENTOS6)+, 1000+

   交互式登录

6.2、Linux用户的配置文件

/etc/passwd:用户及其属性信息(名称、UID、主组ID等)

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

6.3、密码加密

加密机制:

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

单向加密:

哈希算法:原文不同,密文必不同,相同算法定长输出,获得密文不可逆推出原始数
雪崩效应:初始条件的微小改变,引起结果的巨大改变
md5: message digest, 128bits
sha1: secure hash algorithm, 160bits
sha224: 224bits
sha256: 256bits
sha384: 384bits
sha512: 512bits

更改加密算法

authconfig--passalgo=sha256 --update

6.4、密码的复杂性策略

(1)使用数字、大写字母、小写字母及特殊字符中至少3种
(2)足够长
(3)使用随机密码
(4)定期更换;不要使用最近曾经使用过的密码

6.5、用户的配置文件操作

使用vipw和pwck命令更改用户的"/etc/passwd"和"/etc/share"文件,可以检测更改的语法是否有错

6.7、普通用户提权的三种方式

(1)将普通用户的UID更改

(2)将普通用户加入到某个有权限组中

(3)利用su命令切换到超级管理员账号执行

实例1:
[root@localhost ~]# man su
[root@localhost ~]# id centos
id: centos: no such user
[root@localhost ~]# id zabbix
id: zabbix: no such user
[root@localhost ~]# useradd zabbix   #创建普通用户zabbix
[root@localhost ~]# id zabbix
uid=1001(zabbix) gid=1001(zabbix) groups=1001(zabbix)
[root@localhost ~]# usermod -ou 0 zabbix   #更改普通用户的的uid为0
[root@localhost ~]# id zabbix
uid=0(root) gid=0(root) groups=0(root)     #因此查询zabbix用户,显示为root,实际原因为系统只识别10,而人识别的是用户的名称,因此显示的是0
[root@localhost ~]# getent passwd zabbix   
zabbix:x:0:1001::/home/zabbix:/bin/bash
[root@localhost ~]# ls -l /home/ /var/spool/mail/   #但是zabbix原先的家目录以及邮箱实际还存在,这是一种提权的方法(建议:实际生产环境中不适用)
/home/:
total 0
drwx------. 3 mageedu mageedu 74 Aug  3  2016 mageedu
drwx------  3 root    zabbix  74 Aug  3 16:02 zabbix

/var/spool/mail/:
total 0
-rw-rw----. 1 mageedu mail 0 Aug  3  2016 mageedu
-rw-rw----. 1 rpc     mail 0 Aug  3  2016 rpc
-rw-rw----  1 root    mail 0 Aug  3 16:02 zabbix
实例2:
[root@localhost ~]# id nginx         
id: nginx: no such user
[root@localhost ~]# useradd nginx     #创建普通用户nginx
[root@localhost ~]# usermod -G root nginx     #设置nginx用户添加附加组root,而Linux系统中的很多文件,属组都是root组
[root@localhost ~]# id nginx
uid=1001(nginx) gid=1002(nginx) groups=1002(nginx),0(root)   #显示添加成功
[root@localhost ~]#
实例3:
su 命令
简介:
su - run a command with substitute user and group ID
格式:
su [options...] [-] [user [args...]]

切换用户的方式:
su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录
su - UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换

注意:root su至其他用户无须密码;非root用户切换时需要密码

换个身份执行命令:
su [-] UserName -c 'COMMAND'
su - l UserName 相当于su-UserName

[nginx@localhost ~]$ whoami
nginx
[nginx@localhost ~]$ su - root   #切换到超级管理员root下执行操作,需要输入root密码
Password: 
[root@localhost ~]#

[nginx@localhost ~]$ su - root -c "getent passwd nginx"   #不登录超级管理员root,而是用root用户执行命令操作,需要输入root密码
Password: 
nginx:x:1001:1002::/home/nginx:/bin/bash
[nginx@localhost ~]$

原创文章,作者:Aleen,如若转载,请注明出处:http://www.178linux.com/28199