1.用户
(1)定义
用户就是系统使用者的身份
在系统中用户存储为若干串字符+若干个系统配置文件
(2)用户存在的意义
安全 限制权力
用户概念在系统中时系统安全机制的一部分
控制用户访问系统权限
(3)组存在的意义
共享 开放权力
(4)用户信息涉及到的系统配置文件
/etc/passwd ##用户信息
用户:密码:uid:gid:说明:家目录:用户使用的shell
-u -g -c -d -s
注意:实际密码不在存储在此文件中,故用x占位即可
用户使用的shell默认为 /bin/bash 但可以写不同版本的shell比如 /bin/sh
/etc/shadow ##用户认证信息
用户:密码:最后一次密码修改该时间:最短有效期:最长有效期:警告期:非活跃期:帐号到期日
##具体含义
用户密码最后一次被更改的时间: 设定为0时,表示登陆时必须先更改密码
用户密码最短有效期: 多长时间内不能修改密码
用户密码最长有效期: 多长时间内必须修改密码
密码警告期限: 过期前多长时间提醒更改密码
用户非活跃天数: 过期后还能使用的天数
用户到期日: 到了过期日不能再使用
/etc/group ##组信息
组名称:组密码:组id:附加组成员
/etc/gshadow ##组认证信息
/home/username ##用户家目录
/etc/skel/.* ##用户骨架文件
注意: /etc/skel/ 这个目录中的所有文件或目录在用户新建的过程中会被复制到用户的家目录里,这个目录中默认存在的隐藏文件是用户的默认配置文件
watch监控命令
格式: watch -n 1 所需监控命令
例如:
watch -n 1 'tail -n 3 /etc/passwd /etc/shadow /etc/group;echo =========;ls -l /home;'
## 1指的是每1妙监控 监控命名之间用';'隔开 =========表示分隔符
(5)用户切换
su - 用户名称 ## -表示在用户身份切换时同时切换“当前用户的环境”
su 用户名称 ##表示只切换用户身份不切换环境,切换后的用户可以对切换前的用户做任何操作,这样很不合理)
注意: su - 执行时高级用户切换到低级用户不需要密码,低级用户切换到高级需要,平级用户切换切换也需要;每次su切换到其他用户操作之后必须退出(exit / Ctrl + d / logout),然后再次切换到其他用户
su - 不能同时切换两次 这样用户身份会发生错乱
实验1:
##su - 表示在用户身份切换时同时切换“当前用户的环境”
[root@localhost Desktop]# pwd
/root/Desktop
[root@localhost Desktop]# su - student
Last login: Tue Oct 2 10:30:35 EDT 2018 on pts/1
[student@localhost ~]$ pwd
/home/student
[student@localhost ~]$ exit
logout
##su 表示只切换用户身份不切换环境
[root@localhost Desktop]# su student
[student@localhost Desktop]$ pwd
/root/Desktop
实验2:
##多次su - 来回切换 未退出(exit) 会造成用户身份错乱
[root@localhost Desktop]# su - student
Last login: Tue Oct 2 10:57:36 EDT 2018 on pts/1
[student@localhost ~]$ su - root
Password:
Last login: Tue Oct 2 11:01:33 EDT 2018 from 172.25.254.66 on pts/0
[root@localhost ~]# gedit file
(gedit:7942): Gtk-WARNING **: cannot open display:
[root@localhost ~]# ps -f
UID PID PPID C STIME TTY TIME CMD
root 7762 7760 0 11:01 pts/0 00:00:00 -bash
root 7794 1 0 11:01 pts/0 00:00:00 dbus-launch --autolaunch=946cb0e
root 8135 7762 0 11:15 pts/0 00:00:00 su - student
root 8170 8136 0 11:15 pts/0 00:00:00 su - root
root 8171 8170 0 11:15 pts/0 00:00:00 -bash
root 8203 8171 0 11:15 pts/0 00:00:00 ps -f
##解决方案(每次su切换到其他用户操作之后必须退出)
[root@localhost ~]# exit
logout
[student@localhost ~]$ exit
logout
[root@localhost Desktop]# gedit file
** (gedit:8002): WARNING **: Couldn't connect to accessibility bus: Failed to connect to socket /tmp/dbus-bzOBdMAc2m: Connection refused
排错:如果未来回切换过用户但gedit打不开文件怎么办?
##可能原因为连接虚拟机时未开启图形
[root@localhost Desktop]# gedit file
(gedit:7705): Gtk-WARNING **: cannot open display:
##-X表示开启图形
[kiosk@foundation66 Desktop]$ ssh -X root@172.25.254.130
[root@localhost Desktop]# gedit file
** (gedit:7812): WARNING **: Couldn't connect to accessibility bus: Failed to connect to socket /tmp/dbus-bzOBdMAc2m: Connection refused
2.用户管理
(1).用户的建立
格式: useradd + 参数 + 用户名字
具体参数的含义:
-u #建立用户并指定用户uid(默认从1000开始)
-g #建立用户并指定用户初始组信息,这个组必须已经存在
-G #建立用户并指定附加组,这个组必须存在
-c #建立用户并指定用户说明
-d #建立用户并指定用户家目录
-s #建立用户并指定用户所使用的shell,/etc/shells记录了用户能使用shell的名字
建立用户时,会读取/etc/login.defs 文件内容确定规则
普通用户的uid范围为1000-6000
[root@localhost ~]# vim /etc/login.defs
实验1:用户的建立过程(了解即可)
[root@localhost ~]# id westos
id: westos: no such user
[root@localhost ~]# su - westos
su: user westos does not exist
[root@localhost ~]# vim /etc/passwd
###################
westos:x:8888:8888::/home/westos:/bin/bash
[root@localhost ~]# id westos
uid=8888(westos) gid=8888 groups=8888
##有三处报错信息
[root@localhost ~]# su - westos
su: warning: cannot change directory to /home/westos: No such file or directory
id: cannot find name for group ID 8888
mkdir: cannot create directory '/home/westos': Permission denied
-bash-4.2$ whoami
westos
-bash-4.2$ exit
logout
[root@localhost ~]# umask
0022
[root@localhost ~]# mkdir /home/westos
[root@localhost ~]# su - westos
Last login: Tue Oct 2 11:24:20 EDT 2018 on pts/0
id: cannot find name for group ID 8888
mkdir: cannot create directory '/home/westos/.cache': Permission denied
-bash-4.2$ exit
logout
[root@localhost ~]# vim /etc/group
###################
westos:x:8888:
[root@localhost ~]# su - westos
Last login: Tue Oct 2 11:31:13 EDT 2018 on pts/1
mkdir: cannot create directory '/home/westos/.cache': Permission denied
-bash-4.2$ exit
logout
[root@localhost ~]# ll -d /mnt/westos/
d--xrwxrwx 2 root root 6 Sep 26 09:31 /mnt/westos/
[root@localhost ~]# chown westos.westos /home/westos/
##三处报错得到解决
[root@localhost ~]# su - westos
Last login: Tue Oct 2 11:31:29 EDT 2018 on pts/0
##但westos用户和其他其用户显示方式明显不同
[root@localhost ~]# su - student
Last login: Tue Oct 2 11:15:05 EDT 2018 on pts/0
[student@localhost ~]$ ls -a
. .bash_history .bash_profile bin_westos_file.txt .config
.. .bash_logout .bashrc .cache .ssh
[student@localhost ~]$ exit
logout
[root@localhost ~]# su - westos
Last login: Tue Oct 2 11:32:34 EDT 2018 on pts/0
##缺少骨文件
-bash-4.2$ ls -a
. .. .bash_history .cache .config
-bash-4.2$ cp /etc/skel/.* .
cp: omitting directory ‘/etc/skel/.’
cp: omitting directory ‘/etc/skel/..’
cp: omitting directory ‘/etc/skel/.config’
cp: omitting directory ‘/etc/skel/.mozilla’
-bash-4.2$ ls -a
. .. .bash_history .bash_logout .bash_profile .bashrc .cache .config
-bash-4.2$ exit
logout
##此时westos用户显示正常
[root@localhost ~]# su - westos
Last login: Tue Oct 2 11:34:13 EDT 2018 on pts/0
实验2:更用户的 shell
方式1:(更改配置文件)
[westos@localhost ~]$ ps
PID TTY TIME CMD
8886 pts/0 00:00:00 bash
8979 pts/0 00:00:00 ps
[westos@localhost ~]$ exit
logout
##更改shell为sh
[root@localhost ~]# vim /etc/passwd
###################
westos:x:8888:8888::/home/westos:/bin/sh
[root@localhost ~]# su - westos
Last login: Tue Oct 2 11:42:18 EDT 2018 on pts/0
-sh-4.2$ ps
PID TTY TIME CMD
9053 pts/0 00:00:00 sh
9095 pts/0 00:00:00 ps
方式2:(usermod 命令)
##监控
[root@localhost ~]# watch -n 1 "tail -n 3 /etc/passwd /etc/group; ls -l /home"
再打开一个shell
## -s表示更改shell; /sbin/nologin表示系统不能登陆
[root@localhost ~]# usermod -s /sbin/nologin westos
[root@localhost ~]# su - westos
This account is currently not available.
[root@localhost ~]# usermod -s /bin/bash westos
[root@localhost ~]# su - westos
Last login: Mon Oct 1 02:20:20 EDT 2018 on pts/1
实验3:用户建立
监控:
[root@localhost ~]# watch -n 1 "tail -n 3 /etc/passwd /etc/group"
再打开一个shell:
[root@localhost ~]# useradd westos
[root@localhost ~]# userdel -r westos
##-u表示指定用户uid
[root@localhost ~]# useradd -u 1110 westos
[root@localhost ~]# userdel -r westos
##3333这个组id必须已经存在;-g表示指定初始组
[root@localhost ~]# groupadd -g 3333 linux
[root@localhost ~]# useradd -g 3333 westos
[root@localhost ~]# id westos
uid=3003(westos) gid=3333(linux) groups=3333(linux)
[root@localhost ~]# userdel -r westos
[root@localhost ~]# groupadd -g 8888 redhat
##8888这个组id必须已经存在;-G表示指定附加组
[root@localhost ~]# useradd -G 8888 westos
[root@localhost ~]# id westos
uid=3003(westos) gid=3003(westos) groups=3003(westos),8888(redhat)
[root@localhost ~]# userdel -r westos
##-c表示指定用户说明
[root@localhost ~]# useradd -c "westos user" westos
[root@localhost ~]# userdel -r westos
##-d表示指定家目录
[root@localhost ~]# useradd -d /home/westos westos
[root@localhost ~]# userdel -r westos
##-s表示指定shell版本
[root@localhost ~]# useradd -s /bin/sh westos
##查看系统中的shell版本
[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
##注意:-g/-GH后边也可以直接跟组名
(2).用户的删除
格式: userdel + -r + 用户名 ##-r表示删除用户信息及用户的系统配置
例如:
userdel student ##删除用户但不删除用户的配置文件
userdel -r/-R student ##删除用户并删除用户的“配置文件”
实验:
##监控
[root@localhost ~]# watch -n 1 "tail -n 3 /etc/passwd /etc/group; ls -l /home"
再打开一个shell
[root@localhost ~]# useradd westos
[root@localhost ~]# userdel westos
[root@localhost ~]# useradd westos
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
Creating mailbox file: File exists
解决方案:
[root@localhost ~]# chown westos.westos /home/westos ##更改/home/westos目录的所在用户和所在组
[root@localhost ~]# userdel -r westos
[root@localhost ~]# useradd westos
(3).组的建立与删除
groupadd -g ##建立组并指定gid (gid不能重复)
groupdel 组名字 ##删除组
例如:
groupadd westos
groupadd -g 888 linux
3.用户id信息查看
1)
查看当前用户
whoami ##查看当前用户
2)
系统中用户的查看
一般格式: id + [参数] + 用户名
具体参数的含义:
-u ##用户uid
-g ##用户初始组id
-G ##用户所有所在组id
-n ##显示名称而不是id数字
-a ##显示所有信息
实验:
[root@localhost Desktop]# whoami
root
[root@localhost Desktop]# id root
uid=0(root) gid=0(root) groups=0(root)
[root@localhost Desktop]# id -u root
0
[root@localhost Desktop]# id -u student
1000
[root@localhost Desktop]# id -g root
0
[root@localhost Desktop]# id -g student
1000
[root@localhost Desktop]# id -g -n student
student
[root@localhost Desktop]# id -gn student
student
[root@localhost Desktop]# id -G student
1000 10
[root@localhost Desktop]# id -Gn student
student wheel
4.用户信息更改
格式: usermod + 参数 + 用户名
具体参数的含义:
-l ##更改用户名称
-u ##更改uid
-g ##更改gid
-G ##更改附加组
-aG ##添加附加组
-c ##更改说明
-d ##更改家目录指定
-md ##更改家目录指定及家目录名称
-s ##更改shell
-L ##冻结帐号(在用户密码前加入“!”)
-U ##解锁
实验1:用户信息的更改
##监控
[root@localhost ~]# watch -n 1 "tail -n 3 /etc/passwd /etc/group"
[root@localhost ~]# useradd westos
##-l表示更改用户的名字
[root@localhost ~]# usermod -l lee westos
[root@localhost ~]# usermod -l westos lee
[root@localhost ~]# usermod -u 1001 westos
[root@localhost ~]# usermod -g 1119 westos
usermod: group '1119' does not exist
[root@localhost ~]# usermod -g 8888 westos
##-G表示更改附加组;这个组id必须已经存在
[root@localhost ~]# usermod -G 6666 westos
[root@localhost ~]# groupadd -g 21 lily
groupadd: GID '21' already exists
[root@localhost ~]# groupadd -g 2100 lily
##-aG表示添加附加组
[root@localhost ~]# usermod -aG 2100 westos
[root@localhost ~]# id westos
uid=1001(westos) gid=8888(redhat) groups=8888(redhat),6666(haha),2100(lily)
##清空附加组
[root@localhost ~]# usermod -G "" westos
[root@localhost ~]# id westos
uid=1001(westos) gid=8888(redhat) groups=8888(redhat)
[root@localhost ~]# usermod -c "hello westos" westos
[root@localhost ~]# usermod -c "" westos
[root@localhost ~]# usermod -d /home/domeam westos
[root@localhost ~]# usermod -s /bin/sh westos
实验2:usermod命令中 -d 与 -md 的区别
监控:
[root@localhost ~]# watch -n 1 "tail -n 3 /etc/passwd /etc/group; ls -l /home"
再打开一个shell
[root@localhost ~]# useradd westos
[root@localhost ~]# usermod -d /home/lee westos
#必须先将家目录改未一致的再用-md;否则不生效
[root@localhost ~]# usermod -d /home/westos westos
[root@localhost ~]# usermod -md /home/lee westos
实验3:usermod命令中-L表示锁定用户
[root@localhost ~]# su - westos
Last login: Mon Oct 1 02:22:28 EDT 2018 on pts/1
[westos@localhost ~]$ su - student
Password:
Last login: Mon Oct 1 02:22:41 EDT 2018 on pts/1
[student@localhost ~]$ exit
logout
[westos@localhost ~]$ exit
logout
[root@localhost ~]# usermod -L student ##锁定用户
[root@localhost ~]# su - westos
Last login: Mon Oct 1 02:24:29 EDT 2018 on pts/1
[westos@localhost ~]$ su - student
Password:
su: Authentication failure
[westos@localhost ~]$ exit
logout
[root@localhost ~]# usermod -U student ##解锁
[root@localhost ~]# su - westos
Last login: Mon Oct 1 02:24:59 EDT 2018 on pts/1
[westos@localhost ~]$ su - student
Password:
Last login: Mon Oct 1 02:24:39 EDT 2018 on pts/1
Last failed login: Mon Oct 1 02:25:11 EDT 2018 on pts/1
There was 1 failed login attempt since the last successful login.
实验4:passwd -l 与usermod -U 的区别
重新建立用户,保证实验环境的干净:
[root@localhost ~]# id westos
uid=1001(westos) gid=1001(westos) groups=1001(westos)
[root@localhost ~]# userdel -r westos
[root@localhost ~]# useradd westos
监控:
#发现未设定密码时默认此用户密码为LK(锁定)状态
[root@localhost ~]# watch -n 1 "tail -n 3 /etc/shadow; passwd -S westos"
再打开一个shell
#设定密码后此用户密码为PS状态
[root@localhost ~]# passwd westos
Changing password for user westos.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
##passwd -L 锁定强度更大;两个!
[root@localhost ~]# passwd -l westos
Locking password for user westos.
passwd: Success
[root@localhost ~]# passwd -u westos
Unlocking password for user westos.
passwd: Success
##usermod -L锁定强度小;一个!
[root@localhost ~]# usermod -L westos
[root@localhost ~]# usermod -U westos
##用usermod -U 解锁需要解两次
[root@localhost ~]# passwd -l westos
Locking password for user westos.
passwd: Success
[root@localhost ~]# usermod -U westos
[root@localhost ~]# usermod -U westos
(2)passwd命令
格式: passwd + 参数 + 用户名
具体参数的含义:
-S ##查看用户密码信息
-d ##删除用户密码
-e ##更改密码默认使用天数(若设为0,则用户在登陆时会被强制更改密码)
-x ##更改密码最长有效期
-n ##更改密码最短有效期
-w ##更改密码过期前警告期
-i ##更改密码非活跃天数
-l ##冻结帐号密码(在用户密码前加入“!!”)
-u ##解锁用户(在密码不为空时使用)
注意:passwd的冻结强度比usermod的冻结强度高
修改密码的两种方式:
方式1:
passwd + 用户名 ##交互式修改密码
##如果是超级用户不需要知道原来密码,直接修改,没密码强度限制;如果是普通用户需要输入原始密码,密码不能少于8个字符,不能是纯数字,不能是纯字母
方式2:
passwd --stdin + 用户名 ##非交互式更改用户密码
例如:echo redhat | passwd --stdin root
(3)chage命令
格式: chage + 参数 + 用户名
具体参数的含义:
-d ##用户密码组后一次修改的时间,如果设定成0,用户登陆系统后必须修改自己的密码
-m ##最短有效期
-M ##最长有效期
-W ##警告期
-I ##用户非活跃天数
-E ##帐号到期日格式 -E "YYYY-MM-DD"
监控: watch -n 1 'tail -n 3 /etc/shadow'
例如:
passwd -e 0 westos ##两个命令功能类似;用户在登陆时会被强制更改密码
chage -d 0 westos
passwd -n 1 westos ##westos用户在1天之内不能修改密码
chage -m 1 westos
passwd -x 30 westos ##设定westos在30天内必须改密码
chage -M 40 westos
passwd -w 2 westos ##密码过期前两天有警告输出
chage -W 2 westos
passwd -i 1 westos ##密码过期后仍可登陆系统的天数
chage -I 1 westos
chage -E 2018-11-11 westos ##westos用户在2018-11-11日会被冻结
5.组信息更改
一般格式: groupmod -g gid 组
例如:
groupadd haha
groupmod -g 6666 haha
6.用户权力下放
在系统中超级用户可以下放普通用户不能执行的操作,给普通用户下放权力
(1)权力下方配置文件为/etc/sudoers
*)此文件可以用vim直接编辑,但不会提供语法检测
*)也可以执行visudo编辑此文件,它会提供语法检测
(2)下放权力的方法
*)超级用户执行visudo进入编辑/etc/sudoers模式
*)格式:(原则上在100行左右)
方式1:
test desktop0.example.com=(root) /usr/sbin/useradd
获得权限用户 主机名称=(获得到的用户身份) 可执行的命令
##test用户能在desktop0.example.com主机以超级用户身份执行/usr/sbin/useradd命令
方式2:
test desktop0.example.com=(root) NOPASSWD:/usr/sbin/useradd, /usr/sbin/userdel
##NOPASSWD表示用户调用sudo命令的时候不需要自己密码;多条命令用,隔开即可
(3).执行下放权限命令
sudo 命令 ##第一次执行sudo需要输入当前用户密码
实验:
[root@localhost ~]# vim /etc/sudoers
[root@localhost ~]# visudo
###################
将第一行取消注释
Sudoers allows particular users to run various commands as
:wq退出保存
visudo: >>> /etc/sudoers: syntax error near line 1 <<<
What now? e ##语法检测e表示编辑文件;将取消的注释重新添加注释,此时将不会有语法错误提示
[root@localhost ~]# passwd tom
Changing password for user tom.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]# su - tom
[tom@localhost ~]$ useradd linux
-bash: /usr/sbin/useradd: Permission denied
[tom@localhost ~]$ exit
logout
[root@localhost ~]# visudo
###################
## Allow tom to run useradd #说明
tom localhost=(root) /usr/sbin/useradd #tom用户能在localhost主机以超级用户身份执行/usr/sbin/useradd命令
[root@localhost ~]# su - tom
Last login: Mon Oct 1 03:50:03 EDT 2018 on pts/1
[tom@localhost ~]$ useradd linux
-bash: /usr/sbin/useradd: Permission denied
[tom@localhost ~]$ sudo useradd linux
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for tom:
[tom@localhost ~]$ id linux
uid=3004(linux) gid=3004(linux) groups=3004(linux)
[tom@localhost ~]$ exit
[root@localhost ~]# visudo
###################
## Allow tom to run useradd
tom localhost=(root) NOPASSWD: /usr/sbin/useradd, /usr/sbin/userdel
[root@localhost ~]# su - tom
Last login: Mon Oct 1 03:52:43 EDT 2018 on pts/1
[tom@localhost ~]$ sudo useradd haha
[tom@localhost ~]$ sudo userdel -r haha
[tom@localhost ~]$ sudo userdel -r linux
练习题:
1.新建用户组,shengchan,caiwu,jishu
2.新建用户要求如下:
1)tom是shengchan组的附加用户,用户id为2000
2)harry是caiwu组的附加用户,用户组id为3000
3)leo是jishu组的附加用户,此用户家目录在/mnt/leo中
4)新建admin用户,此用户不属于以上提到的三个部门
5)新建system用户westos,此用户不能登陆系统,这个用户的说明为"system westos"
练习题答案:
[root@localhost ~]# groupadd shengchan
[root@localhost ~]# groupadd caiwu
[root@localhost ~]# groupadd jishu
##-g/G后边也可以直接跟组名
[root@localhost ~]# useradd -G shengchan -u 2000 tom
[root@localhost ~]# useradd -G caiwu -u 3000 harry
[root@localhost ~]# useradd -G jishu -d /mnt/leo leo
[root@localhost ~]# useradd admin
[root@localhost ~]# useradd -s /sbin/nologin -c "system westos" westos
测试:
[root@localhost ~]# id tom
uid=2000(tom) gid=1005(tom) groups=1005(tom),1002(shengchan)
[root@localhost ~]# id harry
uid=3000(harry) gid=2001(harry) groups=2001(harry),1003(caiwu)
[root@localhost ~]# id leo
uid=3001(leo) gid=3001(leo) groups=3001(leo),1004(jishu)
[root@localhost ~]# id admin
uid=3002(admin) gid=3002(admin) groups=3002(admin)
[root@localhost ~]# su - westos
This account is currently not available.
[root@localhost ~]# tail -n 4 /etc/passwd
harry:x:3000:2001::/home/harry:/bin/bash
leo:x:3001:3001::/mnt/leo:/bin/bash
admin:x:3002:3002::/home/admin:/bin/bash
westos:x:3003:3003:system westos:/home/westos:/sbin/nologin