什么是用户?
用户需要用账号来访问系统,服务和信息。系统中每个进程都使用一个特定的用户运行。每个文件都属于一个特定的额用户所有。
对文件和目录的访问会收到用户的限制。根据运行进程相关联的用户可确定该进程可以访问的文件和目录

id命令用于显示当前已登录用户的信息。也可以将用户名作为id命令的参数,来获取她的基本信息

[root@localhost ~]# id
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@localhost ~]# id root
uid=0(root) gid=0(root) 组=0(root)

若要查看与某一文件或目录相关联的用户,可以使用ls -l命令(第三列显示用户名)

[root@localhost ~]# ls -l /tmp/
总用量 892
-rw-r--r--. 1 root  root    1596 8月  20 19:21 anaconda.log
drwx------. 2 zhang zhang     25 8月  21 09:49 firefox_zhang
drwxr-xr-x. 2 root  root      18 8月  20 19:07 hsperfdata_root
-rw-r--r--. 1 root  root     581 8月  20 19:21 ifcfg.log
-rwx------. 1 root  root     836 8月  20 19:18 ks-script-DypRd9
-rw-r--r--. 1 root  root       0 8月  20 19:20 packaging.log
-rw-r--r--. 1 root  root       0 8月  20 19:20 program.log
-rw-r--r--. 1 root  root       0 8月  20 19:20 sensitive-info.log

使用ps命令可以查看进程信息。默认仅显示当期shell中的进程。添加a选项可以查看与终端相关的所有进程。若要查看进程相关联的用户,在命令中加u选项

[root@localhost ~]# ps au
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      12565  0.1  2.3 324024 44344 tty1     Ssl+ 02:55   1:12 /usr/bin/X :0 -background none -no
zhang     55253  0.0  0.1 116688  2932 pts/0    Ss   05:57   0:00 bash
root      55322  0.0  0.1 220852  3328 pts/0    S    05:57   0:00 su
root      55330  0.0  0.1 116692  3248 pts/0    S+   05:57   0:00 bash
root      63929  0.0  0.1 116576  3388 pts/1    Ss   14:08   0:00 -bash
root      64171  0.0  0.0 151064  1816 pts/1    R+   14:22   0:00 ps au

以上命令的输出是使用名称来显示用户,但是操作系统内部是按照UID来标识用户的。默认情况下,本地用户名称和编号的映射被存储在/etc/passwd中

username:password:UID:GID:GECOS:/home/dir:shell
username:是UID到名称的一种映射,便于用户使用
password:以前是以加密格式保存密码的位置,现在密码存在在/etc/shadow中
UID:用户的ID,标识用户的标号
GID:组的ID
GECOS该字段可以是任意文本,通常包含用户的实际姓名
/home/dir 用户的个人数据和配置文件所处的位置
shell 用户登录是运行的程序

什么是组:

与用户一样,组也有自己的名称和编号(GID)。本地组在/etc/group中定义

组可以用来协助管理者访问

管理本地用户账号

创建,修改,锁定,删除,本地定义的用户账号

useradd创建用户

不带选项运行时,useradd username会为/etc/passwd 中的所有字段设置合理的默认值,在默认情况下,useradd命令不会设置任何有效的密码,用户必须要等设置了密码才可以登录

useradd --help 可以显示用于覆盖默认值的基本选项,在多数情况下,相同的选项可以用户usermod命令,可以对现有的用户进行修改

usermod修改现有用户

usermod --help 可以显示用户修改账号的基本选项,一些常见的选项包括

[root@localhost ~]# usermod --help
用法:usermod [选项] 登录

选项:
  -c, --comment 注释            GECOS 字段的新值
  -d, --home HOME_DIR           用户的新主目录
  -e, --expiredate EXPIRE_DATE  设定帐户过期的日期为 EXPIRE_DATE
  -f, --inactive INACTIVE       过期 INACTIVE 天数后,设定密码为失效状态
  -g, --gid GROUP               强制使用 GROUP 为新主组
  -G, --groups GROUPS           新的附加组列表 GROUPS
  -a, --append GROUP            将用户追加至上边 -G 中提到的附加组中,
                                并不从其它组中删除此用户
  -h, --help                    显示此帮助信息并推出
  -l, --login LOGIN             新的登录名称
  -L, --lock                    锁定用户帐号
  -m, --move-home               将家目录内容移至新位置 (仅于 -d 一起使用)
  -o, --non-unique              允许使用重复的(非唯一的) UID
  -p, --password PASSWORD       将加密过的密码 (PASSWORD) 设为新密码
  -R, --root CHROOT_DIR         chroot 到的目录
  -s, --shell SHELL             该用户帐号的新登录 shell
  -u, --uid UID                 用户帐号的新 UID
  -U, --unlock                  解锁用户帐号
  -Z, --selinux-user  SEUSER       用户账户的新 SELinux 用户映射

userdel删除用户

userdel username可以将用户从/etc/passwd 中删除,但是默认情况下保留的家目录不变

userdel -r username   同事删除用户的家目录

id显示用户信息,包括用户的UID和组成员

id username 将显示username的用户信息,包括用户UID编号和组成成员

[root@localhost ~]# id zhang
uid=1000(zhang) gid=1000(zhang) 组=1000(zhang),10(wheel)

passwd设置密码

passwd username可用于设置用户的初始密码或者更改该用户的密码

root用户可以将密码设置为任何值,即使密码不符合规范,也是会成功更新

普通用户的长度必须至少8个字符,切不可以是词语,用户名或者以前使用过的相似的密码

UID范围:

特定UID编号和编号范围可供RHEL用户特殊的目的

UID 0始终分配至超级用户root

UID 1-999 是系统用户,

UID 1000+可供分配给普通用户的范围

练习:

添加用户alex

[root@localhost ~]# useradd alex

通过检查/etc/passwd 文件确认alex已经添加

[root@localhost ~]# tail -2 /etc/passwd
zhang:x:1000:1000:zhang:/home/zhang:/bin/bash
alex:x:1001:1001::/home/alex:/bin/bash

使用passwd命令初始化alex的密码

[root@localhost ~]# passwd alex 
更改用户 alex 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

管理本地组账号

创建,修改,删除本地定义的组账户

管理补充组:组必须存在后,用户才能添加到其中

groupadd 创建组

groupadd groupname 如果不带选项,将使用/etc/login.defs文件中指定范围内的下一个可用GID

-g GID用户指定具体的GID

-r 选项将使用/ect/login.defs文件中有效系统GID编号范围内的GUID创建系统组

groupmod 修改现有的组

-n 选项用户将现有的组名的GID映射,指定到新的名称

-g 用于指定新的GID

groupdel删除组

如果组是任意现有用户的主要组,不能被删除,与userdel一样,先检查所有的文件系统,确保没有任何遗留由该组拥有的任何文件

usermod变更组成员

组成员可以通过用户管理进行控制,通过usermod -g groupname更改用户的主要组

通过usermod -aG groupname username将用户添加到补充组

可以分配一个普通用户到管理员组

[root@localhost ~]# gpasswd -A alex wheel

不像usermod命令必须要root运行,gpasswd可以让一个普通用户运行,但是用户仅能够添加和删除除他们以管理员分配的组成员

[root@localhost ~]# gpasswd -a zhang wheel
正在将用户“zhang”加入到“wheel”组中

练习:

创建名为shakespeare,组ID为30000的补充组

[root@localhost ~]# groupadd -g 30000 shakespeare

创建名为artists的补充组

[root@localhost ~]# groupadd artists

查看/etc/group文件,已确定shakespeare和artists已经添加成功

[root@localhost ~]# tail -5 /etc/group
tcpdump:x:72:
zhang:x:1000:
alex:x:1001:
shakespeare:x:30000:
artists:x:30001:

将alex用户添加到作为补充组的shakespeare中

[root@localhost ~]# usermod -G shakespeare alex

确认已使用id命令添加了alex

[root@localhost ~]# id alex
uid=1001(alex) gid=1001(alex) 组=1001(alex),30000(shakespeare)

用户密码管理

在shadow文件中手工锁定账号,设置密码时效策略

阴影密码和密码策略

在很早以前,加密的密码被存储在刻度的/etc/passwd文件中,

现在密码哈希中存储的三段信息

$1$gCjLa2/Z$6Pu0EK0AzfCjxjv2hoL0B/
1、1.哈希算法。数字1表示MD5哈希,数字6表示SHA-512哈希
2、gCjLa2/Z,用户加密哈希的加密盐,使用加密盐可以防止两个密码在相同的用户在/etc/shadow中拥有相同的条目
3、6Pu0EK0AzfCjxjv2hoL0B/ 表示已经加密过的哈希

用户尝试登陆时,系统在/etc/shadow中查询用户的条目,将用户的salt和键入的未加密密码组合,在使用指定的哈希算法加密。如果结果与已知加密哈希匹配,则用户输入了正确的密码,反之输入错误

* centos7 支持两种强大的新的密码哈希算法SHA-256和SHA-512.

/etc/shadow采用以冒号分割的9个字段

name:password:lastchange:minage:maxage:warning:inactive:expire:blank
name:登录名称,必须是系统中的有效账户名
password:已加密密码,密码字段的开头为感叹号时,表示改密码已经被锁定
lastchange:最近一次修改密码的日期
minage:可以更改密码前的最少天数
maxage:可以更改密码前的最多天数
warning:密码即将到期的警告期,表示为天数
inactive:账户在密码到期后保持活动的天数
expire:账户到期日期,以距离1970年1月1日的天数表示
blank:预留字段,供以后使用
chage -m 0 -M 90 -W 7 -I 14 username
chage -d 0 username 将强制在下次登录时更新密码
chage -l username 将列出用户名的当前设置
chage -E YYYY-MM-DD 将在指定日期后账户过期

注意:

date命令可以用来计算未来的日期

[root@localhost ~]# date
2018年 08月 22日 星期三 15:20:02 CST
[root@localhost ~]# date -d "+45days"
2018年 10月 06日 星期六 15:20:05 CST

限制访问:

通过chage命令可以设置账户过期,到了该日期无法以交互方式登录系统。usermod命令可以通过-L参数锁定账户

[root@localhost ~]# usermod -L alex

用户离开公司时,管理员可以通过usermod命令锁定账户并使其过期

必须使用距离1970年1月1日的天数来指定

[root@localhost ~]# usermod -L -e 1 alex

可以通过usermod -U username进行解锁,如果账户已经过期,务必也要更改到期日期

* 百度查找nologin shell

通过su sudo给普通用户提权

获得超级用户的访问权限,一超级用户的身份运行命令管理Linux系统

root用户

大多数操作系统具有某种类型的超级用户,即具有系统全部权限的用户,在centos7中,该用户就是root用户。该用户的特权高于文件系统的一半特权。用户管理系统

要执行安装或者删除软件操作,以及管理目录等任务,必须将特权升到root用户

大多数设备都仅受root控制,但是也有些设备并非如此。例如usb等移动设备一般用户就可以控制

无限制的特权也会带来很多问题。root用户具有破坏系统的无限制权限:删除文件和目录,删除用户账户,添加后门等。如果root账户泄露,则其他人就有可能拥有系统的管理控制权限

警告:

在Linux系统上建议不要直接以root身份登录,如果需要神犬可以用su或者sudo

利用su切换用户

su命令可以让用户切换至另一个账号,如果没有指定用户名,则使用root账户,当普通用户调用时,系统将提示输入要切换的目标账号的密码:

而root用户调用时,不需要密码

[root@localhost ~]# su zhang
[zhang@localhost root]$ id zhang
uid=1000(zhang) gid=1000(zhang) 组=1000(zhang),10(wheel)
[zhang@localhost root]$ su
密码:
[root@localhost ~]# id root
uid=0(root) gid=0(root) 组=0(root)

命名 su username会启动non-login shell ,而命令su -username则启动login shell,

主要的区别是:su - 会将shell环境设置为该用户身份完全一样,而su仅以该用户身份使用当前环境变量设置启动shell。

练习:

锁定alex账户

[root@localhost ~]# usermod -L alex

尝试以alex用户登录

[root@localhost ~]# su - alex

解锁alex用户

[root@localhost alex]# usermod  -U alex

更改alex密码策略,没90天需要更改密码

[root@localhost alex]# chage -M 90 alex 
[root@localhost alex]# chage -l alex
最近一次密码修改时间                    :8月 22, 2018
密码过期时间                    :11月 20, 2018
密码失效时间                    :从不
帐户过期时间                        :1月 02, 1970
两次改变密码之间相距的最小天数        :0
两次改变密码之间相距的最大天数        :90
在密码过期之前警告的天数    :7

确定未来180天后的日期

[root@localhost alex]# date -d "+180days"
2019年 02月 18日 星期一 15:42:16 CST

设置用户在该日期过期

[root@localhost alex]# chage -E 2020-12-12 alex
[root@localhost alex]# chage -l alex
最近一次密码修改时间                    :8月 22, 2018
密码过期时间                    :11月 20, 2018
密码失效时间                    :从不
帐户过期时间                        :12月 12, 2020
两次改变密码之间相距的最小天数        :0
两次改变密码之间相距的最大天数        :90
在密码过期之前警告的天数    :7
[root@localhost alex]#