一、用户基本概述
1.什么是用户?
定义:能够正常登录系统的就是用户
区别:
Linux系统支持多用户同时登陆 互相管理不冲突
Windows不支持多用户同时登陆
2.为什么要有用户?
1)系统的程序进程需要指定的用户进行运行
2)root管理系统权限太大,需要普通用户进行管理
3.id #查看用户的基本信息
[root@jindada ~]# id #默认查看当前登录的用户的信息
uid=0(root) gid=0(root) groups=0(root)
[root@jindada ~]# id nginx
uid=998(nginx) gid=996(nginx) groups=996(nginx)
二、用户跟系统的约定
在CentOS-7中,UID为:
0 --- 超级管理员用户 权限最大
1-200 --- 系统用户,系统默认创建好的 不能登录系统的用户 用来运行系统中的程序和进程
201-1000 --- 系统用户 用户自定义的 运行一些软件程序
1000+ --- 普通用户 可以正常登录系统 但是权限很低
在CentOS-6中,UID为:
1-500 系统用户
500+ 普通用户
三、用户相关的文件
#用户的基本信息存放在这个文件里面
[root@jindada ~]# ll /etc/passwd
-rw-r--r-- 1 root root 860 Jul 20 19:50 /etc/passwd
#以冒号为分隔符,分为7列
#用户的密码信息及账号信息
[root@jindada ~]# ll /etc/shadow
---------- 1 root root 584 Jul 20 19:50 /etc/shadow
#以冒号为分隔符,分为9列
四、用户相关命令
1. useradd == adduser #创建用户
选项:
-u #指定uid
-g #指定组 gid 前提需存在
-G #指定附加组 多个用逗号分割
-d #指定家目录
-c #注释信息
-s #指定命令解释器
-r #创建系统用户,默认不创建家目录 命令解释器是允许登录的
-M #不创建家目录
[root@jindada ~]# useradd user01
[root@jindada ~]# tail -1 /etc/passwd
user01:x:1000:1000::/home/user01:/bin/bash
[root@jindada ~]# tail -1 /etc/shadow
user01:!!:18464:0:99999:7:::
[root@jindada ~]# useradd -u666 -d /opt/user02 -c "test" user02
[root@jindada ~]# tail -1 /etc/passwd
user02:x:666:1001:test:/opt/user02:/bin/bash
[root@jindada ~]# ll /opt/
drwx------ 2 user02 user02 62 Jul 21 16:47 user02
[root@jindada ~]# useradd -r user03
[root@jindada ~]# tail -1 /etc/passwd
user03:x:665:665::/home/user03:/bin/bash
[root@jindada ~]# ll /home/
total 0
drwx------ 2 user01 user01 62 Jul 21 16:40 user01
[root@jindada ~]# useradd -r -s /sbin/nologin user04
[root@jindada ~]# tail -1 /etc/passwd
user04:x:664:664::/home/user04:/sbin/nologin
[root@jindada ~]# ll /home/
total 0
drwx------ 2 user01 user01 62 Jul 21 16:40 user01
[root@jindada ~]# useradd -M -s /sbin/nologin user05
[root@jindada ~]# tail -1 /etc/passwd
user05:x:1001:1002::/home/user05:/sbin/nologin
[root@jindada ~]# ll /home/
total 0
drwx------ 2 user01 user01 62 Jul 21 16:40 user01
2. usermod #修改用户信息的
选项:
-u #修改用户的uid
-g #修改用户的gid
-a #追加 添加附加组 需跟-G配合使用
-G #修改附加组,默认会覆盖原来的所有附加组 -aG 追加
-m #迁移家目录
-d #修改家目录
-c #修改注释信息
-s #修改命令解释器
-l #修改用户的名称
-L #锁定用户
-U #解锁用户
[root@jindada ~]# usermod -u6666 -g 1001 -aG 665,664 -md /opt/user01 -c "123" -l user123 user01
[root@jindada ~]# grep 'user01' /etc/passwd
user123:x:6666:1001:123:/opt/user01:/bin/bash
[root@jindada ~]# id user123
uid=6666(user123) gid=1001(user02) groups=1001(user02),665(user03),664(user04)
[root@jindada ~]# usermod -s /bin/bash user05
[root@jindada ~]# grep 'user05' /etc/passwd
user05:x:1001:1002::/home/user05:/bin/bash
[root@jindada ~]# usermod -L user02
[root@jindada ~]# usermod -U user02
#修改密码
[root@jindada ~]# passwd user02
Changing password for user user02.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
#远程登录
[C:\~]$ ssh user02@10.0.0.100
Connecting to 10.0.0.100:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Last failed login: Tue Jul 21 17:22:10 CST 2020 from 10.0.0.1 on ssh:notty
There were 4 failed login attempts since the last successful login.
Last login: Tue Jul 21 17:20:45 2020 from 10.0.0.1
[user02@jindada ~]$
3. userdel #删除用户 默认不删除家目录及邮件信息
选项:
-r #删除用户的时候,删除家目录及邮件相关信息
[root@jindada ~]# ll /opt/
total 1016
drwx------ 2 user123 user02 62 Jul 21 16:40 user01
drwx------ 2 user02 user02 62 Jul 21 16:47 user02
[root@jindada ~]# userdel user123
[root@jindada ~]# ll /opt/
total 1016
drwx------ 2 6666 user02 62 Jul 21 16:40 user01
drwx------ 2 user02 user02 62 Jul 21 16:47 user02
[root@jindada ~]# useradd user06
[root@jindada ~]# ll /home/
total 0
drwx------ 2 user06 user06 62 Jul 21 17:45 user06
[root@jindada ~]# ll /var/mail/
total 0
-rw-rw---- 1 user02 mail 0 Jul 21 16:47 user02
-rw-rw---- 1 user05 mail 0 Jul 21 16:55 user05
-rw-rw---- 1 user06 mail 0 Jul 21 17:45 user06
-rw-rw---- 1 6666 mail 0 Jul 21 16:40 user123
[root@jindada ~]# userdel -r user06
[root@jindada ~]# ll /home/
total 0
[root@jindada ~]# ll /var/mail/
total 0
-rw-rw---- 1 user02 mail 0 Jul 21 16:47 user02
-rw-rw---- 1 user05 mail 0 Jul 21 16:55 user05
-rw-rw---- 1 6666 mail 0 Jul 21 16:40 user123
[root@jindada ~]# userdel user02
userdel: user user02 is currently used by process 8333 #用户正在使用
[root@jindada ~]# ps aux |grep 8333
user02 8333 0.0 0.1 161364 2348 ? S 17:42 0:00 sshd: user02@pts/1
root 8389 0.0 0.0 112708 976 pts/0 R+ 17:46 0:00 grep --color=auto 8333
[root@jindada ~]# userdel user02
4. 查看用户的命令
#查看用忽的id及组的相关信息
[root@jindada ~]# id root
uid=0(root) gid=0(root) groups=0(root)
[root@jindada ~]# yum install -y finger
[root@jindada ~]# finger root
Login: root Name: root
Directory: /root Shell: /bin/bash
On since Tue Jul 21 17:49 (CST) on pts/0 from 10.0.0.1
7 seconds idle
No mail.
No Plan.
[root@jindada ~]# who
root pts/0 2020-07-21 17:49 (10.0.0.1)
[root@jindada ~]# whoami
root
[root@jindada ~]# w
09:59:15 up 22:14, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.0.0.1 17:49 ? 0.02s 0.00s w
[root@jindada ~]# uptime
09:59:49 up 22:14, 1 user, load average: 0.00, 0.01, 0.05
五、用户创建的相关文件
创建用户的时候,没有指定相关信息,系统创建用户是根据两个文件进行创建的
[root@jindada ~]# ll /etc/login.defs
-rw-r--r--. 1 root root 2028 Oct 30 2018 /etc/login.defs
[root@jindada ~]# ll /etc/default/useradd
-rw-r--r--. 1 root root 119 Oct 30 2018 /etc/default/useradd
[root@jindada ~]# grep -Ev '^$|^#' /etc/login.defs
MAIL_DIR /var/spool/mail #接收邮件的目录
PASS_MAX_DAYS 99999 #密码最大的有效期天数
PASS_MIN_DAYS 0 #密码最小的有效期
PASS_MIN_LEN 5 #密码最小的长度 不起作用 root用户限制不了 普通用户最少8位
PASS_WARN_AGE 7 #密码到期前的告警时间
UID_MIN 1000 #普通用户最小的UID
UID_MAX 60000 #普通用户最大的UID
SYS_UID_MIN 201 #系统用户的最小UID
SYS_UID_MAX 999 #系统用户的最大UID
GID_MIN 1000 #普通用户的组的最小GID
GID_MAX 60000 #普通用户的组的最大GID
SYS_GID_MIN 201 #系统用户的组的最小GID
SYS_GID_MAX 999 #系统用户的组的最大GID
CREATE_HOME yes #创建用户的时候默认创建家目录
UMASK 077 #默认创建用户的家目录的权限 umask为077 777-077=700
USERGROUPS_ENAB yes #创建或删除用户的时候,没有指定组,默认创建或删除跟用户相同名称的组
ENCRYPT_METHOD SHA512 #密码的加密规则
[root@jindada ~]# cat /etc/default/useradd
GROUP=100 #当创建用户没有指定组,并且USERGROUPS_ENAB为no的时候,这个选项生效
HOME=/home #创建用户的家目录的位置
INACTIVE=-1 #跟shadow文件的第七列 密码到期后的宽恕时间 -1 密码永不失效 不启用
EXPIRE= #跟shadow文件第八列 账号密码的失效时间 时间戳 空则表示没有失效时间
SHELL=/bin/bash #默认的命令解释器
SKEL=/etc/skel #默认创建家目录的模板
CREATE_MAIL_SPOOL=yes #创建邮件相关信息
六、用户命令行故障
[root@jindada ~]# passwd test
Changing password for user test.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
[root@jindada ~]# rm -f /home/test/.bash*
#家目录里面的环境变量配置文件不存在
-bash-4.2$
-bash-4.2$
#解决
-bash-4.2$ pwd
/home/test
-bash-4.2$ cp -a /etc/skel/.bash* ./
Permission denied #权限不足
[root@jindada ~]# mkdir -m 700 /home/test
[root@jindada ~]# ll -d /home/test
drwx------ 2 root root 6 Jul 21 10:53 /home/test
[root@jindada ~]# chown -R test.test /home/test
-bash-4.2$ cd /home/test
-bash-4.2$ pwd
/home/test
-bash-4.2$ cp -a /etc/skel/.bash* ./
-bash-4.2$ logout
七、用户的密码信息
#如何设置密码
管理员可以给任何用户设置密码 密码的长度没有限制
普通用户只能给自己设置密码 且是无规律的8位以上的密码
[root@jindada ~]# useradd jindada01
[root@jindada ~]# passwd #默认给当前用户设置密码
Changing password for user root.
New password:
[root@jindada ~]# passwd jindada01 #给指定的用户设置密码
Changing password for user jindada01.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
[root@jindada ~]#
非交互式设置密码
--stdin
[root@jindada ~]# echo '2' | passwd --stdin jindada01
Changing password for user jindada01.
passwd: all authentication tokens updated successfully.
#如何设置随机密码
#如何获得随机数
[root@jindada ~]# echo $RANDOM
28241
[root@jindada ~]# echo $RANDOM | md5sum
6c8a1df9e12e9c553d0f9a397b860f4e -
[root@jindada ~]# echo $RANDOM | md5sum | cut -c 1-10
64091f6823
[root@jindada ~]# echo $RANDOM | md5sum | cut -c 1-10
df0676f775
#密码设置成功,但是不知道密码
[root@jindada ~]# echo $RANDOM | md5sum | cut -c 1-10 | passwd --stdin jindada01
Changing password for user jindada01.
passwd: all authentication tokens updated successfully.
[root@jindada ~]# echo $RANDOM | md5sum | cut -c 1-10 |tee pass.txt
b676039b3f
[root@jindada ~]# echo $RANDOM | md5sum | cut -c 1-10 |tee pass.txt | passwd --stdin jindada01
Changing password for user jindada01.
passwd: all authentication tokens updated successfully.
[root@jindada ~]# cat pass.txt
7d53328b61
tee #重定向的命令 将数据重定向到指定的文件中,并输出在屏幕上面一份
-a #追加
#设置更复杂的密码
[root@jindada ~]# yum install -y expect
选项:
-l #指定的密码位数
-d #指定数字位数
-c #小写字母位数
-C #大小字母位数
-s #特殊字符位数
[root@jindada ~]# mkpasswd
gC}2atTf9
[root@jindada ~]# mkpasswd -l 24 -d 6 -c 6 -C 6 -s 6
sv_^WF85J@DF5Ng5|3{f3/ng
[root@jindada ~]# mkpasswd -l 24
9px3Sesrx[ybtbvElubxxltj
[root@jindada ~]# mkpasswd -l 24
uimYw\Z4amzffhti0eljucgg
[root@jindada ~]# mkpasswd -l 24 -s 24
impossible to generate 24-character password with 2 numbers, 2 lowercase letters, 2 uppercase letters and 24 special characters.
[root@jindada ~]# mkpasswd -l 24 -s 24 -d 0 -c 0 -C 0
$.$}+?;-~]|)>(#_),[)!#@$
[root@jindada ~]# mkpasswd -l 24 -s 24 -d 0 -c 0 -C 0 | tee pass.txt | passwd --stdin jindada01
Changing password for user jindada01.
passwd: all authentication tokens updated successfully.
[root@jindada ~]# cat pass.txt
:{]~"/'%[,+"^*%??%,'?}~$
八、用户组的管理
什么是用户组
组分为两类
基本组 #一个用户只能拥有一个基本组
附加组 #当基本组的权限不够用户使用的,就出现了附加组 一个用户允许拥有多个附加组
跟组相关的文件
[root@jindada ~]# ll /etc/group
-rw-r--r-- 1 root root 573 Jul 21 11:04 /etc/group
[root@jindada ~]# ll /etc/gshadow
---------- 1 root root 449 Jul 21 11:04 /etc/gshadow
[root@jindada ~]#
#以冒号为分隔符 分为4列
#用户组的组密码文件
#以冒号为分隔符 分为四列
[root@jindada ~]# usermod -aG user05,user03,user01 jindada01
[root@jindada ~]# grep 'jindada01' /etc/group
user01:x:1000:jindada01
user03:x:665:jindada01
user05:x:1002:jindada01
jindada01:x:1006:
[root@jindada ~]# grep 'jindada01' /etc/gshadow
user01:!::jindada01
user03:!::jindada01
user05:!::jindada01
jindada01:!::
九、用户组的相关命令
1. 创建用户组的命令 groupadd
选项:
-g #指定组的ID GID
-r #创建系统组
[root@jindada ~]# groupadd user_group01
[root@jindada ~]# tail -1 /etc/group
user_group01:x:1007:
[root@jindada ~]# groupadd -g 666 user_group02
[root@jindada ~]# tail -1 /etc/group
user_group02:x:666:
[root@jindada ~]# groupadd -r user_group03
[root@jindada ~]# tail -1 /etc/group
user_group03:x:664:
2. 修改用户组的命令 groupmod
选项:
-g #修改用户组的ID GID
-n #修改组的名称
[root@jindada ~]# groupmod -g 6666 user_group01
[root@jindada ~]# grep 'user_group01' /etc/group
user_group01:x:6666:
[root@jindada ~]# groupmod -n new_group user_group01
[root@jindada ~]# grep 'new_group' /etc/group
new_group:x:6666:
3. 删除用户组的命令 groupdel
[root@jindada ~]# groupdel new_group
[root@jindada ~]# grep 'new_group' /etc/group
#删除作为某个用户的附加组的用户组 删除没有影响
[root@jindada ~]# groupdel user01
[root@jindada ~]# grep '1002' /etc/group
user05:x:1002:jindada01
[root@jindada ~]# grep '1002' /etc/passwd
user05:x:1001:1002::/home/user05:/bin/bash
test:x:1002:1003::/home/test:/bin/bash
[root@jindada ~]# id user05
uid=1001(user05) gid=1002(user05) groups=1002(user05)
#删除一个组作为某个用户的基本组 是不能删除的
解决:
给这里面的用户重新找个基本组
把用户也一并删除掉
[root@jindada ~]# groupdel user05
groupdel: cannot remove the primary group of user 'user05'
[root@jindada ~]# usermod -g 1003 user05
[root@jindada ~]# id user05
uid=1001(user05) gid=1003(test) groups=1003(test)
[root@jindada ~]# groupdel user05