Linux下的用户管理

被刻印的时光 ゝ 提交于 2020-01-10 18:52:48

Linux下的用户管理

Linux下的用户管理

1. 用户及用户组存在的意义

用户是操作者在系统中的身份识别,其存在是为了限制权限;组是逻辑概念,是用户的集合,组的存在是为了归类用户以便于管理权限。

2. 用户涉及到的配置文件及内容

登陆 Linux 系统时,虽然输入的是自己的用户名和密码,但其实 Linux 并不认识你的用户名称,它只认识用户名对应的 ID 号(也就是一串数字)。用户名并无实际作用,仅是为了方便用户的记忆而已。Linux 系统将所有用户的名称与 ID 的对应关系都存储在 /etc/passwd 文件中
Linux 系统中,每个用户的 ID 细分为 2 种,分别是用户 ID(User ID,简称 UID)和组 ID(Group ID,简称 GID),这与文件有拥有者和拥有群组两种属性相对应。每个文件都有自己的拥有者 ID 和群组 ID,当显示文件属性时,系统会根据 /etc/passwd 和 /etc/group 文件中的内容,分别找到 UID 和 GID 对应的用户名和群组名,然后显示出来。
UID号用于唯一标识系统中的用户,这是一个32位无符号整数,Linux规定root用户的UID为0,而其他的一些虚拟用户如bin,daermon等被分配到一些比较小的UID号,这些用户通常被安排在passwd文件的开头部分,从一个比较大的数开始分配真实用户的UID号是一个好习惯,如练习部分的内容可以看出,这样能为虚拟用户提供足够的余地。

所涉及的配置文件 内容
/etc/passwd 用户信息库
/etc/group 组信息库
/home/用户同名目录 默认用户家目录(如/home/student)
/etc/skel/所有文件 用户环境配置文件模板
/etc/shadow 用户认证信息
/etc/gshadow 组认证信息
[root@workstation Desktop]# vim /etc/passwd     
root:x:0:0:root:/root:/bin/bash       【vim下的命令模式中可以看出】

root:(账号名称):x(:账号密码):0(:账号UID):0(:账号GID):root(:用户说明):/root(:用户家目录):/bin/bash(:shell解析)

  • 账号名称:和用户UID对应,这是用户登录时使用的账号名称,在系统中是唯一的,不能重复

  • 账号密码:早期的Unix系统中,该字段是存放账号密码的,由于安全原因,后来把这个密码字段内容移动到/etc/shadown中,这里可以看到一个字母表示该用户密码在/etc/shadown中保护

  • 账户UID:账号UID一般由一个整数表示的,范围是0~65535

  • 账户GID:账号GID一般也是由一个整数表示的,范围是0~65535,当添加账户时,默认情况下会同时建立一个与用户同名且UID和GID相同的组

  • 用户说明:这个字段是对这个账号二队描述说明

  • 用户家目录:用户登录后首先进入的目录,一般为(/home/用户名)这样的目录

3. 用户信息的查看(id)

【1】id

参数 所查看内容
id -u 查看用户的uid
id -g 查看组的gid
id -G 查看用户所在的所有组的id
id -n 显示名字而不显示id数字

【2】实践练习

[root@workstation Desktop]# id student
uid=1000(student) gid=1000(student) groups=1000(student),10(wheel)
[root@workstation Desktop]# id -u student		查看student的uid 
1000
[root@workstation Desktop]# id -u root			查看组的gid
0
[root@workstation Desktop]# id -G student		查看组所在组的所有id
1000 10											初始组与附加组
[root@workstation Desktop]# id -n student		-n 要与其他在一起使用
id: cannot print only names or real IDs in default format
[root@workstation Desktop]# id -Gn student		-n的正确使用
student wheel

4. 用户身份的切换方式及环境变量

【1】注销当前用户

[root@workstation Desktop]# gnome-session-quit --force  【注销当前用户】

此命令的作用等同于如下图所示的常规注销用户的方法,如下图所示。
图1

【2】切换用户

命令 作用
su 只切换用户身份,不切换用户环境
su - 切换用户身份及用户环境
  • 检验两种区别

实践练习

[root@workstation Desktop]# su student

(process:5438): dconf-CRITICAL **: 21:52:55.322: unable to create directory '/run/user/0/dconf': Permission denied.  dconf will not work properly.

(process:5438): dconf-CRITICAL **: 21:52:55.323: unable to create directory '/run/user/0/dconf': Permission denied.  dconf will not work properly.

(process:5438): dconf-WARNING **: 21:52:55.326: failed to commit changes to dconf: Could not connect: Permission denied
[student@workstation Desktop]$ exit
exit
[root@workstation Desktop]# su - student
Last login: Thu Jan  9 21:52:55 EST 2020 on pts/0
[student@workstation ~]$ pwd
/home/student

  • 在一个shell里不要反复执行“su -”

当我们开启一个的时候,系统中就会显示开启了一个shell的程序。切换到用户的时候,会发现这种程序会多一个,再次切换到root时会发现,这种程序又会多一个。开的越多系统的性能就会越差
另一点,如果那样切换的时候,执行命令可能会出问题。举例(执行gedit),切换到student用户时,除了那个shell外,其他的环境都是属于超级用户的,所以普通用户不能调用。继续"su - root"时也不能打开,因为命令是先传递给student。所以切换时只执行一层的。

实践练习

[root@workstation Desktop]# su - student	【切换用户身份与用户环境】
[student@workstation ~]$ pwd
/home/student
[student@workstation ~]$ gedit			【必须开启图形,此处显示未成功建立文件】
Unable to init server: Could not connect: Connection refused

(gedit:2640): Gtk-WARNING **: 22:02:40.640: cannot open display: 
[student@workstation ~]$ su - root		【切换到root用户】
Password: 								【需要输入密码】
Last login: Thu Jan  9 22:01:45 EST 2020 on tty2
[root@workstation ~]# gedit				【再次进行尝试】
Unable to init server: Could not connect: Connection refused

(gedit:2768): Gtk-WARNING **: 22:04:23.277: cannot open display:   【显示未成功】
[root@workstation ~]# exit				【使用exit,将会退回到原来的用户,此处是回到student】
logout
[student@workstation ~]$ exit			【再次使用exit,将会退回到最初的root】
logout
[root@workstation Desktop]# gedit		【建立成功!如下图所示】

gedit建立

注意: 每次su切换到其他用户操作之后必须退出(exit),然后再次切换到其他用户。执行时,高级用户切换到低级用户不需要密码,低级用户切换到高级或切换到平级用户切则需要密码。

5. 用户及用户组的建立 / 删除 / 更改

【1】用户建立
groupadd 与 useradd

参数 作用
useradd -u 指定用户的uid
useradd -g 指定用户的gid
useradd -G 指定用户的附加组
useradd -c 指定用户的说明
useraddd -d 指定用户的家目录,默认为/home/uesername
useradd -s 指定用户默认的shell

实践练习

[root@workstation Desktop]# useradd -u 1300 westos
[root@workstation Desktop]# useradd -g 33 westos  【此用户以存在不可以直接建立】
useradd: user 'westos' already exists
[root@workstation Desktop]# userdel -r westos  【要删除原来的westos后才能重新建】
[root@workstation Desktop]# useradd -g 33 westos  【33组必须是存在的,可由vim /etc/group查看】
[root@workstation Desktop]# userdel -r westos
[root@workstation Desktop]# useradd -G 40 westos 【40组必须是存在的】
[root@workstation Desktop]# userdel -r westos
[root@workstation Desktop]# useradd -c “westos name” westos
[root@workstation Desktop]# userdel -r westos
[root@workstation Desktop]# useradd -d /home/lee westos
[root@workstation Desktop]#su - westos
[westos@workstation ~]$ pwd
/home/lee
[westos@workstation ~]$ exit
[root@workstation Desktop]# groupadd -g 999 haha   【999组已经存在,就需要重建换一个没用过的组】
groupadd: GID '999' already exists
[root@workstation Desktop]# groupadd -g 666 haha
[root@workstation Desktop]# groupdel haha

在监控模式下看看现象
用户建立
【2】用户的删除
userdel westos 只删除了用户,并未删除用户的配置文件
userdel -r westos 删除了用户和用户的配置文件
注意:

  • 在删除了用户之后,如果想要删除其配置文件则有两种方法:一种是重新建立后利用 " -r "。另一种是找到配置文件所在目录,然后利用“rm -fr ”进行删除
  • 使用useradd想要更改用户信息的时候,需要用userdel先删除再重新建立,具体表现如【1】中命令部分表现。建议在建立好用户后,可以直接使用usermod来更改用户信息。

在这里插入图片描述

【3】更改用户信息

参数 作用
-l 更改用户的名称
-u 更改用户uid
-g 更改用户的初始组
-G 更改用户的附加
-aG 添加用户的附加组
-G “” 删除用户所有附加组的身份
-c “happy” 指定用户说明文字
-d /home/lee 更改用户家目录的指向
-md /home/lee 更改用户家目录
-s /bin/sh 更改用户的shell
-L 冻结用户
-U 解锁用户

实践练习

//建立用户
[root@workstation Desktop]# useradd linux 
[root@workstation Desktop]# id linux
uid=1001(linux) gid=1001(linux) groups=1001(linux)

//更改用户名称与用户uid
[root@workstation Desktop]# usermod -l haha linux
[root@workstation Desktop]# usermod -u 1300 haha
[root@workstation Desktop]# id haha
uid=1300(haha) gid=1001(linux) groups=1001(linux)

//更改用户的初始组
[root@workstation Desktop]# usermod -g 21 haha
[root@workstation Desktop]# id haha
uid=1300(haha) gid=21(slocate) groups=21(slocate)

//更改 添加 删除用户的附加组
[root@workstation Desktop]# usermod -G 40 haha
[root@workstation Desktop]# id haha
uid=1300(haha) gid=33(tape) groups=33(tape),40(dip)
[root@workstation Desktop]# usermod -G 21 haha
[root@workstation Desktop]# id haha
uid=1300(haha) gid=33(tape) groups=33(tape),21(slocate)
[root@workstation Desktop]# usermod -aG 40 haha  【-aG表示!添加!用户的附加组】
[root@workstation Desktop]# id haha
uid=1300(haha) gid=33(tape) groups=33(tape),21(slocate),40(dip)
[root@workstation Desktop]# usermod -G “” haha   【!删除!】
[root@workstation Desktop]# id haha
uid=1300(haha) gid=33(tape) groups=33(tape)

//其余的练习内容可以在下图所显示“-c”“-d”“-md”的变化

注意:
区分 -d 与 -md的区别在这里插入图片描述(用户信息监控命令watch -n 1 ‘tail -n 3 /etc/passwd /etc/group;echo “=>/home/ message<=”; ls -l /home/’):

  • 使用 -d 只改变用户家目录的指向

在这里插入图片描述

  • 使用 -md 更改用户家目录

在这里插入图片描述

6. 用户认证信息

【1】/etc/shadows ##记录用户认证信息

[root@workstation Desktop]# watch -n 1 tail -n 3 /etc/shadow  【监控命令】
gnome-initial-setup:!!:18038::::::
avahi:!!:18038::::::
haha:!!:18271:0:99999:7:    :   :
[1]  [2] [3] [4] [5] [6] [7] [8]  [9]
  • [1] 用户名称: haha
  • [2]用户密码:!!
    -用户的加密字符串,默认用的加密方式为sha512对称加密,如果加密字符串前出现"!"那么用户被冻结
  • [3] 用户密码:18271
    -最后一次被更改的时间:此时间计算是从1970-1-1开始计算的累计天数
  • [4] 用户密码最短有效期:0
    -如果此位有设定数字,那么在此数字范围内的天数内是不能修改用户密码的
  • [5] 用户密码最长有效期:99999
    -用户必须在此有效期内更新密码,如果超时会被冻结
  • [6] 密码警告期限:7
    -在过期前制定天数内会发送警告信息给用户
  • [7] 用户非活跃天数:
    -此位默认为空,如果设定数值,那么在密码最长有效期过后仍然可以使用的天数
  • [8] 用户到期日:
    -默认为空,表示帐号一定会被冻结的时间点
  • [9] 用户自定义列,目前没有启用

【2】如何进行修改
在这里插入图片描述

注意:

  • 用户名称可以用“usermod”进行修改
  • 用户密码修改方面
    passwd 		haha	##更改haha密码
	passwd  -l 	haha	##在用户密码前加入“!!”即:锁定用户(可以理解为封号)
	passwd  -u 	haha	##解除锁定
	usermod -L 	haha	##在用户密码前加入“!”
	usermod -U 	haha	##在密码不为空时使用
	passwd  -d 	haha	##清空westos密码
  • 普通用户修改密码
    1.必须知道当前用户原始密码
    2.密码不能和帐号名称相似
    3.密码不能是有序的数字或有序纯字母
    4.密法如果是纯数字或字母要>8

7.用户授权

【1】sudo作用
sudo 能把某些超级权限针对性的下放 , 并且不需要普通用户知道 root 密码 , 所以 sudo 相对于权限无限制性的 su 来说(此处可以回忆切换用户 “su”部分的知识) , 还是比较安全的。
sudo 执行命令的流程是当前用户切换到 root,然后以 root 身份执行命令 , 执行完成后 , 直接退回到当前用户 ; 而这些的前提是要通过sudo 的配置文件 /etc/sudoers来进行授权。

【2】如何下放权力

[root@workstation Desktop]# visudo

//使用:100先找到100行,看见如下所示内容时,<i>进入插入模式
root    ALL=(ALL)       ALL

//插入所需要授权的命令,此处要先
[root@workstation Desktop]# hostname
workstation.lab.example.com

//授权(用户haha可以在workstation.lab.example.com主机以root用户身份免密执行useradd)
haha workstation.lab.example.com=(root) NOPASSWD: /user/sbin/useradd

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!