linux day13 用户基本概述

二、用户基本概述

1.用户

能够正常登录Linux或windows系统的角色就是用户

那Linux与windows系统的用户有什么区别?
本质都是登录系统的,只不过Linux支持多用户同时登录,windows默认不支持,但是修改组策略的情况下也是可以多用户登录的
虚拟用户说明:
在系统中,没有权限登录系统的用户一般也被称之为虚拟用户;虚拟用户也是要写进/etc/passwd中;
虚拟用户实际上就是去掉了登录SHELL权限的用户,他没有能力登录系统,但可以进行其他任何操作。

2.用户的作用

1.系统上的每一个进程(运行的程序)都需要特定的用户运行
2.每一个文件都有特定的用户拥有,所以访问一个文件或目录受到用户的限制
3.进程能够以何种方式访问某一个文件或目录, 与进程所关联的用户有关

3.如何查看用户

#查看当前用户
[root@db01 ~]# id
uid=0(root) gid=0(root) groups=0(root)

# 查看用户详细信息
yum install -y finger
finger # 查找用户并显示用户信息
[root@mpd ~]# finger test
Login: test           			Name: 
Directory: /home/test               	Shell: /bin/bash
On since Tue Jul 21 11:18 (CST) on pts/0 from 10.0.0.1
   3 hours 45 minutes idle
Last login Tue Jul 21 11:45 (CST) on pts/1
No mail.  # 没有邮件
No Plan.  # 没有计划

# who 谁
[root@mpd ~]# who
test     pts/0        2020-07-21 11:18 (10.0.0.1)
root     pts/1        2020-07-21 09:38 (10.0.0.1)

# whoami 我是谁
[root@mpd ~]# whoami
root

# 在线用户msg
[root@mpd ~]# w
 15:07:37 up  6:48,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
test     pts/0    10.0.0.1         11:18    3:49m  0.00s  0.00s -bash
root     pts/1    10.0.0.1         09:38    1.00s  0.10s  0.00s w

# 用户使用情况
[root@mpd ~]# uptime
 15:09:08 up  6:49,  2 users,  load average: 0.00, 0.01, 0.05


#查看指定用户
[root@db01 ~]# id lhd
uid=1001(lhd) gid=1001(lhd) groups=1001(lhd)

#查看指定用户指定id
[root@db01 ~]# id -u lhd
1001
[root@db01 ~]# id -g lhd
1001
[root@db01 ~]# id -G lhd
1001

4.查看进程的用户

[root@db01 ~]# ps -ef | grep mysql
mysql     27976      1  0 15:34 ?        00:00:03 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
root      28183   8859  0 17:29 pts/1    00:00:00 grep --color=auto mysql

5.查看文件的用户

[root@Centos7 ~]# ll
total 10004
drwxr-xr-x 84 lhd  lhd      8192 Jun 24 15:05 etc
-rw-r--r--  1 root root 10228919 Jun 24 16:55 etc.tar.gz

三、用户

[root@Centos7 ~]# ll /etc/passwd /etc/shadow
-rw-r--r-- 1 root root 1225 Jun 23 17:41 /etc/passwd
---------- 1 root root  723 Jun 23 17:41 /etc/shadow

1.用户文件 /etc/passwd

[root@Centos7 ~]# ll /etc/passwd
-rw-r--r-- 1 root root 1225 Jun 23 17:41 /etc/passwd

[root@Centos7 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
lhd:x:1000:1000::/home/lhd:/bin/bash
nginx:x:998:996:Nginx web server:/var/lib/nginx:/sbin/nologin

#以 :为分隔符,一共七列
nginx				 #用户
x				 #密码占位符
998				 #uid
996				 #gid
Nginx web server		 #用户的注释信息
/var/lib/nginx			 #家目录
/sbin/nologin			 #登录的shell,如果是/sbin/nologin,说明不能登录

2.用户密码文件 /etc/shadow

[root@Centos7 ~]# ll /etc/shadow
---------- 1 root root 723 Jun 23 17:41 /etc/shadow

[root@Centos7 ~]# cat /etc/shadow
root:$6$3M2hvrzRORqDie.l$dr19n45v.3yBadEcg87YXtzMLLCVrxDLjH8rlW.WEMikbjp7eVGVepBqvwwMdpj8ejLPnG2WhCR48QtYBEwIa1::0:99999:7:::
lhd:!!:18436:0:99999:7:::
nginx:!!:18436::::::

#以 :为分隔符,一共九列
root					#用户
!!					#如果是一串字符代表是密码,!!代表没有密码
18436					#代表修改密码的时间,按天算,距离1970年的天数
0					#使用天数,0代表无限制
99999					#密码可以使用的天数,99999代表永远不过期
7					#密码快过期了,提前几天提醒
'空'					#密码到期后保持活动的天数
'空'					#账户到期时间
'空'					#注释

1.用户登陆名               //用户的账号名称
2.加密后的密码             //用户密码,这是加密过的口令(未设密码时为!!)
3.最近一次密码更改时间      //从1970年到最近一次更改密码时间之间过了多少天
4.密码最少使用几天          //密码最少使用几天才可以更改密码(0表示无限制)
5.密码最长使用几天          //密码使用多少天需要修改密码(默认99999永不过期)
6.密码到期前警告期限        //密码过期前多少天提醒用户更改密码(默认过期提前7天警告)
7.密码到期后保持活动的天数  //在此期限内, 用户依然可以登陆系统并更改密码, 指定天数过后, 账户被锁定
8.账户到期时间             //从1970年起,账户在这个日期前可使用,到期后失效。
9.标志                    //保留

3.用户的分类

用户UID 系统中约定的含义
0 超级管理员(拥有最高权限)
1-200 系统用户,由系统分配给系统进程使用
201-999 系统用户,用来运行服务账户,不需要登陆系统(动态分配)
1000+ 常规普通用户
  • 注意: 在CentOS7系统之前, UID1-499用于系统用户, 而UID 500+则用于普通用户

四、用户相关命令

useradd		userdel		usermod

1.useradd添加用户

#使用useradd和adduser这两个命令,来创建用户

#添加用户前需要确定:
1.确定用户的默认组是否有特殊要求
2.确定用户是否允许登陆
3.确定用户的密码策略
4.确定用户的有效期
5.确定用户的uid是否有特殊要求

1)常用参数

-u 		#指定用户的UID,不能和现有ID冲突
-g 		#指定用户用户默认基本组
-G 		#指定用户附加组,用逗号隔开添加多个附加组
-d		#指定用户家目录
-c		#指定用户注释信息
-M 		#不建立家目录
-s		#指定用户默认shell
-r 		#创建系统账户, 没有家目录
-a 		#附加组,都留下,配合-G,追加

2)添加用户

[root@db01 ~]# useradd user -u 666 -g root -G bin,mail -d /home/userhome -c '测试创建用户' -s /sbin/nologin
[root@db01 ~]# ll /home/
total 0
drwx------ 2 lhd  lhd  83 Jun 24 17:17 lhd
drwx------ 2 user root 62 Jun 24 18:21 userhome
[root@db01 ~]# id user
uid=666(user) gid=0(root) groups=0(root),1(bin),12(mail)

#日常正经添加用户
[root@db01 ~]# useradd test -M -s /sbin/nologin
[root@db01 ~]# useradd test1

3)给用户设置密码

#方式一:在root下修改普通用户密码
[root@db01 ~]# passwd test1
Changing password for user test1.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
#该方法,设置密码时提示密码过短,一样可以修改成功

#方式二:将密码写入用户
[root@db01 ~]# echo "123456" | passwd --stdin test
Changing password for user test.
passwd: all authentication tokens updated successfully.

#方式三:切换到用户下,自己修改自己的密码
[root@db01 ~]# su test1
[test1@db01 root]$ passwd
Changing password for user test1.
Changing password for test1.
(current) UNIX password: 
New password: 
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
#该方式修改密码不能过于简单,不能跟以前密码相似,也不能很有规律

# 方式四 随机密码非交互式

#如何获得随机数 
[root@qls ~]# echo $RANDOM
28241
[root@qls ~]# echo $RANDOM | md5sum
6c8a1df9e12e9c553d0f9a397b860f4e  -
[root@qls ~]# echo $RANDOM | md5sum | cut -c 1-10
64091f6823
[root@qls ~]# echo $RANDOM | md5sum | cut -c 1-10
df0676f775

#密码设置成功,但是不知道密码 
[root@qls ~]# echo $RANDOM | md5sum | cut -c 1-10  | passwd  --stdin  qls01
Changing password for user qls01.
passwd: all authentication tokens updated successfully.

[root@qls ~]# echo $RANDOM | md5sum | cut -c 1-10 |tee  pass.txt
b676039b3f

[root@qls ~]# echo $RANDOM | md5sum | cut -c 1-10 |tee  pass.txt  | passwd  --stdin  qls01
Changing password for user qls01.
passwd: all authentication tokens updated successfully.
[root@qls ~]# cat pass.txt 
7d53328b61
tee 	#重定向的命令 将数据重定向到指定的文件中,并输出在屏幕上面一份  

	-a		#追加  
	

#设置更复杂的密码 

[root@qls ~]# yum install  -y  expect

选项:

	-l		#指定的密码位数
	-d		#指定数字位数
	-c		#小写字母位数
	-C		#大小字母位数
	-s		#特殊字符位数

[root@qls ~]# mkpasswd  
gC}2atTf9
[root@qls ~]# mkpasswd  -l 24  -d 6 -c 6 -C 6 -s 6
sv_^WF85J@DF5Ng5|3{f3/ng
[root@qls ~]# mkpasswd  -l 24 
9px3Sesrx[ybtbvElubxxltj
[root@qls ~]# mkpasswd  -l 24 
uimYw\Z4amzffhti0eljucgg
[root@qls ~]# 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@qls ~]# mkpasswd  -l 24 -s 24 -d 0 -c 0 -C 0 
$.$}+?;-~]|)>(#_),[)!#@$

[root@qls ~]# mkpasswd  -l 24 -s 24 -d 0 -c 0 -C 0   | tee  pass.txt  | passwd  --stdin  qls01
Changing password for user qls01.
passwd: all authentication tokens updated successfully.
[root@qls ~]# cat pass.txt 
:{]~"/'%[,+"^*%??%,'?}~$

4) 修改用户配置

	-u		#修改用户的uid
	-g		#修改用户的gid
	-a		#追加 添加附加组  需跟-G配合使用
	-G		#修改附加组,默认会覆盖原来的所有附加组   
        -aG             #追加附加组           
	-m		#迁移家目录 
	-d		#修改家目录 
	-c		#修改注释信息
	-s		#修改命令解释器 
	-l		#修改用户的名称 
	-L		#锁定用户
	-U		#解锁用户
usermod 用户名 要修改的选项 修改后的名称
usermod root -g admin # 把root用户的默认用户组root组修改为admin组

5) 删除用户

选项:
      -r   #删除用户的时候,删除家目录及邮件相关信息
userdel 要删除的用户名称
userdel test # 删除用户名称为test的用户 默认不删除家目录及邮件信息 
 

6) 远程登录

# ssh协议远程登录
[E:\~]$ ssh  test@10.0.0.100

五 用户创建相关的文件

# 创建用户的时候,没有指定相关信息,系统创建用户是根据两个文件进行创建的    

[root@qls ~]# ll  /etc/login.defs 
-rw-r--r--. 1 root root 2028 Oct 30  2018 /etc/login.defs
[root@qls ~]# ll /etc/default/useradd 
-rw-r--r--. 1 root root 119 Oct 30  2018 /etc/default/useradd

[root@qls ~]# 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@qls ~]# 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@qls ~]# 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@qls ~]# 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@qls ~]# mkdir  -m  700  /home/test
[root@qls ~]# ll -d /home/test
drwx------ 2 root root 6 Jul 21 10:53 /home/test
[root@qls ~]# 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

七 用户组的管理

什么是用户组  
组分为两类
基本组 		#一个用户只能拥有一个基本组  
附加组	        #当基本组的权限不够用户使用的,就出现了附加组   一个用户允许拥有多个附加组  

跟组相关的文件 
[root@qls ~]# ll  /etc/group
-rw-r--r-- 1 root root 573 Jul 21 11:04 /etc/group
[root@qls ~]# ll  /etc/gshadow
---------- 1 root root 449 Jul 21 11:04 /etc/gshadow
[root@qls ~]# 

#以冒号为分隔符  分为4列
[root@qls ~]# cat /etc/group		#用户组的基本信息文件 
root:x:0:
bin:x:1:
daemon:x:2:
mail:x:12:postfix


第一列:	root		        #组的名称 
第二列:	x			#组的密码占位符
第三列:	0			#组的GID  
第四列:				#用户名  哪些用户使用此组作为附加组  多个用逗号分割 

#用户组的组密码文件
#以冒号为分隔符  分为四列
[root@qls ~]# cat /etc/gshadow
root:::
bin:::
daemon:::
mail:::postfix

第一列:	root		#组的名称  
第二列:	!或者空		#用户组的密码信息  空或者!是没有密码  
第三列:	空		#用户组的管理者  
第四列:	空		#用户名  哪些用户使用此组作为附加组  多个用逗号分割


[root@qls ~]# usermod  -aG user05,user03,user01  qls01
[root@qls ~]# grep  'qls01'  /etc/group
user01:x:1000:qls01
user03:x:665:qls01
user05:x:1002:qls01
qls01:x:1006:
[root@qls ~]# grep  'qls01'  /etc/gshadow
user01:!::qls01
user03:!::qls01
user05:!::qls01
qls01:!::

1)用户组相关命令

1. 创建用户组的命令    groupadd
选项:
	-g		#指定组的ID  GID
	-r		#创建系统组    

[root@mpd ~]# chgrp ops_group /data  # 修改文件或则目录的基本组



[root@qls ~]# groupadd   user_group01
[root@qls ~]# tail  -1  /etc/group
user_group01:x:1007:

[root@qls ~]# groupadd  -g 666  user_group02
[root@qls ~]# tail  -1  /etc/group
user_group02:x:666:

[root@qls ~]# groupadd   -r  user_group03
[root@qls ~]# tail  -1  /etc/group
user_group03:x:664:

2. 修改用户组的命令	   groupmod
选项:
	-g		#修改用户组的ID  GID
	-n		#修改组的名称  

[root@qls ~]# groupmod   -g 6666  user_group01
[root@qls ~]# grep  'user_group01'  /etc/group
user_group01:x:6666:

[root@qls ~]# groupmod   -n  new_group  user_group01
[root@qls ~]# grep  'new_group'  /etc/group
new_group:x:6666:

3. 删除用户组的命令	   groupdel
[root@qls ~]# groupdel   new_group
[root@qls ~]# grep  'new_group'  /etc/group

#删除作为某个用户的附加组的用户组  删除没有影响 
[root@qls ~]# groupdel  user01

[root@qls ~]# grep  '1002'  /etc/group
user05:x:1002:qls01
[root@qls ~]# grep  '1002'  /etc/passwd
user05:x:1001:1002::/home/user05:/bin/bash
test:x:1002:1003::/home/test:/bin/bash
[root@qls ~]# id user05 
uid=1001(user05) gid=1002(user05) groups=1002(user05)


#删除一个组作为某个用户的基本组   是不能删除的
解决:
	给这里面的用户重新找个基本组 
	把用户也一并删除掉 
[root@qls ~]# groupdel   user05
groupdel: cannot remove the primary group of user 'user05'
[root@qls ~]# usermod  -g  1003  user05
[root@qls ~]# id user05 
uid=1001(user05) gid=1003(test) groups=1003(test)
[root@qls ~]# groupdel   user05


posted @ 2020-07-21 15:29  nick_xm  阅读(188)  评论(0编辑  收藏  举报