用户信息、用户组信息详解

什么是用户?
能够正常登陆系统的账号就是用户,用户最初是操作系统开发者出于安全的考虑,开发的一种操作机制

为什么要有用户?
1、系统的进程需要指定的用户进行运行
2、root管理系统权限太大,需要普通用户进行管理

查看用户的基本信息
#id 查看当前登陆用户的信息
[root@root ~]# id
uid=0(root) gid=0(root) groups=0(root)

[root@root ~]# id oldboy
uid=1000(oldboy) gid=1000(oldboy) groups=1000(oldboy)

UID
0------>超级管理员用户 权限最大
1~200 --------> 系统用户,用来运行系统自带进程,默认已创建
201~999------>系统用户,用来运行安装的程序,所以此类用户无需登录系统
1000+ ------->普通用户,是由管理员创建的用于日常工作的用户,权限较小,能执行的任务也有限
需要注意的是,UID 是不能冲突的,而且管理员创建的普通用户的 UID 默认是从 1000
开始的(即使前面有闲置的号码)

#用户的基本信息存放在/etc/passwd文件里如:

[root@root ~]# head -1 /etc/passwd
root: x:0:0:root:/root:/bin/bash

以冒号为分隔符,分为7列,其中:

第一列:root      #用户名称
第二列:x         #用户密码占位符
第三列:0         #用户的UID信息
第四列:0         #用户的GID信息
第五列:root      #用户的注释信息
第六列:/root     #用户的家目录
第七列:/bin/bash #用户的命令解释器   能够登陆系统的       /sbin/nologin   禁止登录系统

用户的密码及账号信息在/etc/shadow中

[root@localhost ~]#  head  -2  /etc/shadow
root:$6$e1SAoEz9bZKJufvJ$ESwFp17Jd/LKq3nDjhs74XUJP50OYj4cz7hkZtuRcgYhQfsNCnK3agQfiWGVQWUstItihYBg2NeoPf8kqI7Dh1::0:99999:7:::
bin:*:17834:0:99999:7:::
#以冒号为分隔符分割了9列
第一列:	root		#用户的名称
第二列:	* 或者 !!	   #加密后的密码信息,  * 和 !!  表示的是没有密码 
第三列:	17834		#密码最后一次修改距离1970年1月1日过了多少天 
第四列:	0			#密码最短有效期   0没有限制  
第五列:	99999		#密码最长有效期   99999  没有限制  
第六列:	7			#密码到期前的预警时间  
第七列:	10			#密码到期后的宽恕时间 
第八列:	20391231	#账号过期时间  
第九列:	空			#没有使用 (保留字段,目前为空,以备将来Linux发展之用)

用户管理命令汇总
useradd #添加用户
userdel #删除用户
usermod #修改用户信息
id user/who/w/ #查看用户信息
whoami #查看当前用户名称

创建用户:
useradd user1
使用该命令创建用户账户时,默认的用户家目录会被存放在/home 目录中,默认的 Shell 解释器为/bin/bash,而且默认会创建一个与该用户同名的基本用户组。这些默认设置可以根据以下选项的 useradd 命令参数自行修改。
–u:指定用户的UID
–g:指定用户所属的主群
–G:指定用户所属的附加群
–d:指定用户的家目录
–c:指定用户的备注信息
–s:指定用户所用的shell
-e:修改过期时间
-M: 不创建家目录
-r: 创建系统账户,uid处于系统用户范围内,默认就没有家目录

[root@root ~]# useradd user01       
[root@root ~]# useradd user02 -u 503                # 创建用户usr02,指定uid
[root@root ~]# useradd user03 -d /aaa               # 创建用户user03 指定家目录
[root@root ~]# useradd user04 -M                    # 创建用户user04,不创建家目录
[root@root ~]# useradd user05 -s /sbin/nologin      # 创建用户并指定shell
[root@root ~]# useradd user06 -g hr                 # 创建用户,指定主组
[root@root ~]# useradd user07 -G sale               # 创建用户,指定附加组
[root@root ~]# useradd user08 -e 2014-04-01         # 指定过期时间
[root@root ~]# useradd user10 -u 4000 -s /sbin/nologin
​
[root@aliyum ~]# useradd xxx -M -s /sbin/nologin  # 创建普通用户,但是没有家目录,不能登录系统
[root@aliyum ~]# useradd -r yyy -s /sbin/nologin  # yyy属于系统用户,uid处于系统用户uid范围内

删除用户
userdel 用户名 # 删除用户user1,但不删除用户家目录和mail
[root@localhost ~]# userdel user1
userdel -r 用户名 #彻底删除用户
[root@localhost ~]# userdel -r user1

修改用户(usermod)
usermod参数与useradd参数基本一致
-u #指定要修改用户的UID
-g #指定要修改用户基本组
-a #将用户添加到补充组。仅与-G选项一起使用,意为追加,不覆盖原来的组
-G #指定要修改用户附加组,使用逗号隔开多个附加组, 覆盖原有的附加组
-d #指定要修改用户家目录
-c #指定要修改用户注释信息
-s #指定要修改用户的bash shell
其他选项
-m #将用户主目录的内容移动到新位置。如果当前主目录不存在,则不会创建新的主目录
-l #指定要修改用户的登陆名
-L #指定要锁定的用户
-U #指定要解锁的用户
[root@root ~]# usermod -e 2013-02-11 user1000 # 修改过期时间
[root@root ~]# usermod -g group1 jj # 修改主组
[root@root ~]# usermod -a -G group2 jj # 修改附加组,-a添加,不加-a代表覆盖

​查看用户

[root@localhost ~]# id      #查看当前用户 的信息
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@localhost ~]# who      #查看所有登录的用户信息
root     tty1         2021-03-04 18:57
root     pts/0        2021-03-04 18:57 (192.168.1.1)
root     pts/1        2021-03-09 16:02 (192.168.1.1)
[root@localhost ~]# whoami     查看当前登陆用户的用户名
root
[root@localhost ~]# w
 16:38:31 up 48 min,  3 users,  load average: 0.05, 0.03, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      Thu18    4days  0.01s  0.01s -bash
root     pts/0    192.168.1.1      Thu18    4days  0.02s  0.02s -bash
root     pts/1    192.168.1.1      16:02    7.00s  0.03s  0.01s w

补充内容:用户创建相关的文件
创建用户时,没有相关的指定消息,系统会根据 /etc/login.defs、/etc/default/useradd两个文件进行创建用户

了解内容
[root@localhost ~]# 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-700=077
USERGROUPS_ENAB yes         #创建或删除用户的时候,没有指定组,默认创建或删除跟用户相同名称的组
ENCRYPT_METHOD SHA512       #密码的加密规则
[root@localhost ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100         #当创建用户没有指定组,且USERGROUPS_ENAB为no的时候,这个选项才生效
HOME=/home        #创建用户的家目录位置
INACTIVE=-1       #跟shadow文件的第七列,密码到期后的宽恕时间 -1 密码永不失效 不启用
EXPIRE=           #跟shadow文件的第八列 账号密码的失效时间 时间戳 空则表示永不失效
SHELL=/bin/bash   #默认的命令解释器
SKEL=/etc/skel    #默认创建的家目录模板
CREATE_MAIL_SPOOL=yes #创建邮件相关信息

用户命令行故障:(针对不小心删了家目录下的bash文件,了解内容)

[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

设定与修改密码
修改或添加Linux普通用户的密码,直接影响的文件是/etc/shadow(存放密码与账号的对应关系的文件)

passwd # 默认给当前用户设定密码
passwd 用户名 # root用户可以给自己以及所有其他用户设定密码,普通用户只能设定自己的密码
echo “密码” | passwd --stdin 用户名 # 非交互式

#补充:可以利用系统内置变量生成随机字符串来充当密码(了解内容)
[root@aliyum ~]# echo $RANDOM|md5sum|cut -c 1-10
70ba11a74b
#设置成功但不知道密码
[root@aliyum ~]# echo $RANDOM | md5sum | cut -c 1-10 | passwd --stdin test01
Changing password for user test01.
passwd: all authentication tokens updated successfully.

#将密码重定向到pass.txt文件中,并输出一份在屏幕上
[root@localhost ~]# echo $RANDOM | md5sum | cut -c 1-10 |tee pass.txt
b676039b3f #随机数密码
[root@localhost ~]# echo $RANDOM | md5sum | cut -c 1-10 |tee pass.txt | passwd --stdin test01
Changing password for user test01.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# cat pass.txt
7d53328b61

用户组详解

用户组文件 :/etc/group
[root@localhost ~]# head -1 /etc/group
root: x:0:

#以冒号分隔,分成四列
第一列:root   #用户组的名称
第二列:x      #用户组的密码占位符
第三列:0      #用户组的ID/GID
第四列:       #显示该用户组作为那个用户的附加组,多个用逗号分隔             

用户组密码文件:/etc/gshadow
[root@localhost ~]# head -1 /etc/gshadow
root:::

#以冒号分隔分成四列
第一列:root     #用户组的名称
第二列:         #用户组的密码,这个段可以是空或!,如果为空或!,表示没有密码
第三列:         #用户组管理者,这个字段也可为空,如果有多个用户组管理者用逗号分隔
第四列:         #显示该用户组作为那个组的附加组,多个用逗号分隔开

组管理命令汇总
groupadd #增加用户组
groupdel #删除用户组
groupmod #修改用户组
gpasswd #设置用户名密码
newgrp #切换用户组

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

[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:

删除用户组的命令 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

修改用户组的命令 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:

组成员管理

#添加一个组到用户
[root@localhost home]# useradd gtest
[root@localhost home]# vim /etc/group
[root@localhost home]# id gtest
uid=2304(gtest) gid=2305(gtest) groups=2305(gtest),2204(group3)
[root@localhost home]# gpasswd -a gtest group2
Adding user gtest to group group2
[root@localhost home]# id gtest
uid=2304(gtest) gid=2305(gtest) groups=2305(gtest),2304(group2),2204(group3)

#添加多个组到用户
[root@localhost home]# gpasswd -M gtest,root,dayu group
gpasswd: group ‘group’ does not exist in /etc/group
[root@localhost home]# gpasswd -M gtest,root,dayu group3
[root@localhost home]# id root
uid=0(root) gid=0(root) groups=0(root),2000(abc),2003(group1),2204(group3)
[root@localhost home]# id dayu
uid=2302(dayu) gid=2003(group1) groups=2003(group1),0(root),1000(oldboy),2204(group3)
[root@localhost home]# id gtest
uid=2304(gtest) gid=2305(gtest) groups=2305(gtest),2304(group2),2204(group3)

#为一个组添加组长(组长有权限向组内添加用户,其他用户[除root外]没有权限添加用户到该组)
[root@localhost ~]# gpasswd -A dayu group3
[root@localhost ~]# cat /etc/gshadow
group3:!:dayu:gtest,dayu,oldboy

#组权限
[root@localhost ~]# id dayu
uid=2302(dayu) gid=2003(group1) groups=2003(group1),1000(oldboy),2204(group3)
[root@localhost ~]# chown .group3 /tmp/12.txt
[root@localhost ~]# ls -l /tmp/12.txt
-rw-r–r-- 1 root group3 4 Mar 15 11:35 /tmp/12.txt
[root@localhost ~]# chmod g+w /tmp/12.txt
[root@localhost ~]# ls -l /tmp/12.txt
-rw-rw-r-- 1 root group3 4 Mar 15 11:35 /tmp/12.txt
[root@localhost ~]# su - dayu
Last login: Mon Mar 15 11:37:05 CST 2021 on pts/3
[dayu@localhost ~]$ echo “456” > /tmp/12.txt
[dayu@localhost ~]$ cat /tmp/12.txt
456
[dayu@localhost ~]$

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值