5.用户和用户组管理
5.1.用户配置文件
越是对服务器安全性要求高的服务器,越是需要建立合理的用户权限等级制度和服务器操作规范。
在Linux中主要是通过用户配置文件 来查看和修改用户信息
5.1.1.用户信息文件/etc/passwd
每一行代表一个用户,通过冒号分隔出7个字段
root:x:0:0:root:/root:/bin/bash
第1个字段:root 用户名称
第2个字段:x 密码标识,相当于密码占位符,真正存储在/etc/shadow中
第3个字段:0 UID,用户UID
0:超级用户,系统以ID来识别是否为超级用户,默认为root,如果一个用户变成超级用户,只需要将其UID改为0即可。
1-499:系统用户,伪用户,这些用户不能删除,不能登录
500-65535:普通用户,的centos7中添加了一个普通用户,默认ID是1000
第4个字段:0 GID 用户初始组ID
初始组:就是指用户一登录就立刻拥有这个用户组相关权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组。不建立修改初始组,不符合常用规范。初始组只能有一个。
附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个。
第5个字段:root 用户说明
第6个字段:/root 家目录
普通用户:/home/用户名/
超级用户:/root/
第7个字段:/bin/bash 登录之后的Shell
Shell就是Linux的命令解释器
在/etc/passwd当中,除了标准的Shell是/bin/bash之外,还可以是/sbin/nologin,表示禁止登录。
这个Shell如果改错了,就麻烦了,命令就解释不了,就无法登录了。
5.1.2.影子文件/etc/shadow
shadow只有root用户才能改
[root@localhost etc]# ll shadow
----------. 1 root root 686 Apr 26 23:22 shadow
可以理解为passwd的影子,保存的是用户的经过加密的密码
每一行代表一个用户的密码信息,通过冒号分隔出9个字段
test:$6$10O6OnRx$zWQIJ3sdfassdN6pE/Bc0Lwiw.3xmFkbXt2SF8gwNLB7IEu2.zWZQ7Mra6QCw5/IFfBQEIaFDwPLLc3dgBnKVasdh1:17647:0:99999:7:::
第1个字段:test 用户名
第2个字段:表示的是加密密码
$6$10O6OnRx$zWQIJ3sdfassdN6pE/Bc0Lwiw.3xmFkbXt2SF8gwNLB7IEu2.zWZQ7Mra6QCw5/IFfBQEIaFDwPLLc3dgBnKVasdh1
加密算法升级为SHA512散列加密算法
如果密码位是!!或* 代表没有密码,不能远程登录。ssh协议禁止空密码远程登录
可以加密密码前加上!号,把密码换算失败,相当于临时禁用用户登录。
第3个字段:17647 密码最后一次修改日期
使用1970-01-01作为标准时间,每过1天 时间戳加1,17647表示从1970-01-01年到修改密码的那1天总共过的天数。
第4个字段:0 两次密码修改间隔时间的天数,和第3个字段相比
第5个字段:99999 密码有效期的天数,和第3个字段相比
第6个字段:7 密码修改到期前后警告天数,和第5个字段相比
第7个字段:密码过期之后宽限的天数,如果没有用户过期则直接禁止
0:代表密码过期后立即失效,和不写是一样的
-1:则代表密码永远不会失效
第8个字段:帐号失效时间
要用时间戳表示。
把时间戳换算为日期:
date -d "1970-01-01 17647 days"
[root@localhost ~]# date -d "1970-01-01 17647 days"
Thu Apr 26 00:00:00 CST 2018
[root@localhost ~]#
把日期换算为时间戳:
echo $(($(date --date="2018/04/30" +%s)/86400+1))
[root@localhost ~]# echo $(($(date --date="2018/04/30" +%s)/86400+1))
17651
[root@localhost ~]# echo $(($(date --date="2018/04/26" +%s)/86400+1))
17647
[root@localhost ~]#
第9个字段:保留
5.1.3.组信息文件/etc/group和组密码文件/etc/gshadow
组信息文件/etc/group
root:x:0:
第1个字段:root 组名,默认和用户名是一样的
第2个字段:x 组的密码标志位,密码是在gshadow文件中存放
第3个字段:GID,组ID
第4个字段:组中附加用户
密码文件/etc/gshadow
root:::
第1个字段:组名
第2个字段:组密码
第3个字段:组管理员用户名
第4个字段:组中附加用户
组管理员一般不使用
5.2.用户管理相关文件
用户的家目录:
普通用户:/home/用户名/,所有者和所属组都是此用户,权限是700
超级用户:/root/,所有者和所属组都是root用户,权限是550
把test用户变成超级用户
在passwd中,将其UID修改为0即可
超级用户的提示符是:#
普通用户的提示符是:$
[root@localhost ~]#
用户的邮箱
/var/spool/mail/用户名/
添加用户时,邮件默认自动创建
[root@localhost ~]# cd /var/spool/mail
[root@localhost mail]# ls
root test
用户模板目录
当创建一个用户,用户自动创建许多目录和文件,都是从这个模板里面生成的。
用户的home目录都是从这里复制过来的,所以放在这里面的文件会复制到新创建用户的家目录中
/etc/skel
5.3.用户管理命令
5.3.1.用户添加命令useradd
useradd [选项] 用户名
-u UID 手工指定用户的UID号
-d 家目录 手工指定用户的家目录,不建议手动指定。
-c 用户说明,手工指定用户的说明
-g 组名,手工指定用户的初始组
-G 组名,指定用户的附加组
-s sheel,指工指定用户的登录shell,默认是/bin/bash
添加用户test
user test
添加用户时,系统都执行什么操作?
1、passwd文件
[root@localhost skel]# grep test /etc/passwd
test:x:1000:1000::/home/test:/bin/bash
2、shadow文件
[root@localhost skel]# grep test /etc/shadow
test:$6$10O6OnRx$zWQIJ3WtmLRN6pE/asdfsadfs.zWZQ7Mra6QCw5/IFfBQEIaFDwPLLc3dgBnKVph1:17647:0:99999:7:::
3、组文件
[root@localhost skel]# grep test /etc/group
test:x:1000:
4、gshadow文件
[root@localhost skel]# grep test /etc/gshadow
test:!::
5、家目录
[root@localhost skel]# ll -d /home/test/
drwx------. 2 test test 83 Apr 26 23:04 /home/test/
6、邮件
[root@localhost skel]# ls /var/spool/mail
root test
用户默认值文件
/etc/default/useradd
[root@localhost ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100 #用户默认组
HOME=/home #用户家目录
INACTIVE=-1 #密码过期宽限天数,shadow文件的7字段
EXPIRE= #密码失效时间,shadow文件的字段8
SHELL=/bin/bash #默认shell
SKEL=/etc/skel #模板目录
CREATE_MAIL_SPOOL=yes #是否建立邮箱
用户默认值文件
/etc/login.defs
[root@localhost ~]# cat /etc/login.defs
#
# Please note that the parameters in this configuration file control the
# behavior of the tools from the shadow-utils component. None of these
# tools uses the PAM mechanism, and the utilities that use PAM (such as the
# passwd command) should therefore be configured elsewhere. Refer to
# /etc/pam.d/system-auth for more information.
#
# *REQUIRED*
# Directory where mailboxes reside, _or_ name of file, relative to the
# home directory. If you _do_ define both, MAIL_DIR takes precedence.
# QMAIL_DIR is for Qmail
#
#QMAIL_DIR Maildir
MAIL_DIR /var/spool/mail
#MAIL_FILE .mail
# Password aging controls:
#
# PASS_MAX_DAYS Maximum number of days a password may be used.
# PASS_MIN_DAYS Minimum number of days allowed between password changes.
# PASS_MIN_LEN Minimum acceptable password length.
# PASS_WARN_AGE Number of days warning given before a password expires.
#
PASS_MAX_DAYS 99999 #密码有效期,shadow文件字段5
PASS_MIN_DAYS 0 #密码修改间隔,shadow文件字段4
PASS_MIN_LEN 5 #密码最小5位,PAM
PASS_WARN_AGE 7 #密码到期警告,shadow文件字段6
#
# Min/max values for automatic uid selection in useradd
#
UID_MIN 1000 #UID最小值
UID_MAX 60000 #UID最大值
# System accounts
SYS_UID_MIN 201
SYS_UID_MAX 999
#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN 1000
GID_MAX 60000
# System accounts
SYS_GID_MIN 201
SYS_GID_MAX 999
#
# If defined, this command is run when removing a user.
# It should remove any at/cron/print jobs etc. owned by
# the user to be removed (passed as the first argument).
#
#USERDEL_CMD /usr/sbin/userdel_local
#
# If useradd should create home directories for users by default
# On RH systems, we do. This option is overridden with the -m flag on
# useradd command line.
#
CREATE_HOME yes
# The permission mask is initialized to this value. If not specified,
# the permission mask will be initialized to 022.
UMASK 077
# This enables userdel to remove user groups if no members exist.
#
USERGROUPS_ENAB yes
# Use SHA512 to encrypt password.
ENCRYPT_METHOD SHA512 #密码加密模式
[root@localhost ~]#
5.3.2.修改用户密码passwd
语法:
passwd [选项] 用户名
-S 查询用户密码的密码状态,仅root用户可以用。
-l 暂时锁定用户。仅root可用。
-u 解锁用户。仅root可用。
--stdin 可以通过管道符输出的数据作为用户的密码
查询test用户密码的密码状态
[root@localhost ~]# passwd -S test
test PS 2018-04-26 0 99999 7 -1 (Password set, SHA512 crypt.)
test 用户名
PS
2018-04-26 密码最后修改时间
0密码修改间隔时间
99999 密码有效期
7 密码过期前几天提示警告
-1 密码失效时间,-1表示不失效
锁定用户时,是在密码前增加了两个感叹号:!!,相当于暂时锁定用户
[root@localhost ~]# passwd -l test
Locking password for user test.
passwd: Success
[root@localhost ~]# grep test /etc/shadow
test:!!$6$10O6OnRx$sSDFSDAF/Bc0Lwiw.3xmFkbXt2SF8gwNLB7IEu2.zWZQ7Mra6QCw5/IFfBQEIaFDwPLLc3dgBnKVph1:17647:0:99999:7:::
解锁用户时,是把!!去掉就行了,可以用命令,也可以直接修改shadow文件
管道设置密码
echo "123" | passwd --stdin test
这种方式一般在脚本文件中使用,这种密码是明文,需要登录后修改,确保安全。
普通用户只能改自己的密码,超级用户可以自己和别人的密码。
给当前用户设置密码时,用户名就不需要输入了
5.3.3.修改用户信息usermod
英文原意:user modify
语法:
usermod [选项] 用户名
-u UID 手工指定用户的UID号
-c 用户说明,手工指定用户的说明
-G 组名,指定用户的附加组
-L 临时锁定用户Lock
-U 解锁用户Unlock
useradd中的选项在usermod中基本都可以使用
用户test的用户说明修改:
[root@localhost ~]# usermod -c "This is a test user" test
[root@localhost ~]# grep test /etc/passwd
test:x:1000:1000:This is a test user:/home/test:/bin/bash
5.3.4.修改用户密码状态chage
语法:
chage [选项] 用户名
-l 列表用户的详细密码状态
-d 日期:修改密码最后一次更改日期,shadow文件字段3
-m 天数:两次密码修改间隔,shadow文件字段4
-M 天数:密码有效期,shadow文件字段5
-W 天数:密码过期前警告天数,shadow文件字段6
-I 天数:密码过期后宽限天数,shadow文件字段7
-E 日期:帐号失效时间,shadow文件字段8
[root@localhost ~]# chage -l test
Last password change : Apr 26, 2018
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
[root@localhost ~]#
把密码最后修改日期设置为0,shadow文件字段3,这样用户一登录就要修改密码。
chage –d 0 test
5.3.5.删除用户userdel
英文愿意:user delete
语法:
userdel [选项] 用户名
-r 删除用户时,同时删除用户的家目录
手工删除用户,这样删除并不方便,这里只是说明一下删除时都删除什么内容
vim /etc/passwd
vim /etc/shadow
vim /etc/group
vim /etc/gshadow
rm –rf /var/spool/mail/test
rm –rf /home/test
id命令
查看用户ID
id 用户名
[root@localhost ~]# id test
uid=1000(test) gid=1000(test) groups=1000(test)
5.3.6.用户切换命令su
英文愿意:switch user?
语法:
su [选项] 用户名
<!--[if !supportLists]-->- <!--[endif]-->表示将用户的环境变量一起切换。如果不加个选项,会导致只切换了一部分过去,例如家目录,邮件等信息还是切换之前用户的。
-c 仅执行一次命令,而不切换用户身份
不切换root用户的身份,只是执行root用户的命令,添加一个用户test2
su - root -c "useradd test2"
5.4.用户组管理命令
添加用户组
groupadd [选项] 组名
-g GID 指定组ID
groupadd group1
修改用户组
groupmod [选项] 组名
-g GID 修改组ID
-n 新组名:修改组名
groupmod –n newgroup group1
删除用户组
groupdel 组名
如果组中有初始用户存在,则组是删除不掉的。
把用户添加入组或从组中删除
gpasswd 选项 组名
-a 用户名:把用户加入组
-d 用户名:把用户从组中删除
相关推荐
【标题解析】:“软件测试第二天学习笔记-JMeter.zip_jmeter_shown14l”这个标题表明这是一份关于软件测试的材料,特别是聚焦在JMeter工具的第二日学习内容。"JMeter.zip"提示这是一个压缩文件,包含了与JMeter相关...
- **权限与用户管理**:掌握`chmod`、`chown`和`chgrp`命令,以及理解用户和组的概念。 - **进程管理**:学习启动、停止、监控和控制进程,如`ps`、`top`和`kill`命令。 - **网络配置**:了解`ifconfig`、`netstat`...
此外,权限和用户管理是Linux系统管理的重要部分。笔记会讲解用户和组的概念,如何使用chown、chgrp和chmod命令改变文件和目录的所有权和权限,以及sudo和su命令的使用。 系统管理和维护也是关键内容。笔记可能会...
本篇“Linux学习笔记”详细介绍了Linux的基本目录结构及其各自的功能,这对于初学者理解Linux系统的核心概念非常重要。 #### 二、Linux目录结构解析 1. **/(根目录)** - 根目录是Linux文件系统的起点,所有的...
库的分发通常采用.tar.gz这样的压缩格式,这是一种常见的Unix/Linux系统中用于归档和压缩文件的方法,它结合了tar(打包)和gzip(压缩)工具,能有效减小文件大小,便于存储和传输。 "touchbar-lyric-0.1.3"这个...
这些命令是系统管理员和用户日常操作中必不可少的工具,如`ls`、`cp`、`mv`等。 #### /boot 用于存放系统启动过程中所需的文件,包括内核(`vmlinuz`)和初始化ramdisk(`initrd`)。此外,GRUB引导加载器的配置文件`...
结合提供的“Linux学习笔记”,初学者可以通过实际操作,更好地理解和掌握Linux系统。 总结起来,Xshell-5不仅是一个终端模拟器,更是一个综合的Linux管理工具,它与Xftp的协同工作,为Windows用户提供了高效、安全...
### Linux学习笔记-初学者 #### 一、Linux分区命名规则及理解 Linux系统中的分区命名规则对于初学者来说非常重要,因为这直接影响到如何管理和识别不同的存储设备。下面详细介绍几个关键概念: - **MBR(Master ...
Linux基础篇总共包含8个章节,第1章到第8章学习内容分别包括:Linux快速入门、Linux发展及系统安装、CentOS Linux系统管理、Linux必备命令、Linux用户和组、Linux软件包管理、磁盘管理、Linux文件共享管理等。...
在Linux学习过程中,了解操作系统的核心结构以及主要目录的用途至关重要。Linux系统采用的是层次化的目录结构,这使得系统管理更为有序。以下是对标题和描述中涉及的一些关键知识点的详细解释: 1. **根目录** `/`...
### Linux学习笔记—01 Linux操作基础 #### 1. Linux 基础命令与用法 在Linux操作系统中,掌握一系列的基础命令是非常重要的。这些命令可以帮助用户进行各种日常操作,比如文件管理、目录切换、文件查看等。下面将...
该压缩包包含了IPython项目的全部源代码,使得开发者和用户能够对其进行编译、安装或者深入研究。 IPython的核心特性包括: 1. **增强的交互式Shell**:IPython的Shell提供了比标准Python Shell更多的功能,如自动...
### Linux学习笔记精要 #### 一、Linux操作系统概述与常用命令 - **Shell与GUI**: Linux系统提供了两种主要的用户交互方式,图形用户界面(GUI)如Gnome和命令行界面(CLI)如Bash。GUI适合初学者,而CLI对于高效地...
这个库的版本为0.8.1,它被打包成一个`.tar.gz`文件,这是Linux和Unix系统常用的压缩格式,便于下载和分发。 **Python库的概念** Python库是由预编写好的模块和函数组成的集合,这些模块和函数可以被其他Python程序...
Linux基础篇总共包含8个章节,第1章到第8章学习内容分别包括:Linux快速入门、Linux发展及系统安装、CentOS Linux系统管理、Linux必备命令、Linux用户和组、Linux软件包管理、磁盘管理、Linux文件共享管理等。...
### JAVA学习笔记知识点详解 #### 一、计算机概述 1. **计算机**:电子设备,用于处理信息。 2. **计算机硬件**: - **中央处理器(CPU)**:计算机的大脑,负责处理指令。 - **内存(RAM)**:临时存储数据,...
这份"Linux学习笔记(强悍总结值得一看)"是Linux初学者的宝贵资源,也适合有经验的用户作为参考手册。以下是对笔记内容的详细概述: 1. **Linux常用命令**: Linux命令行是其强大的工具,掌握常用命令是Linux学习...
在本压缩包“day01-sql安装与SQL语句-笔记.zip”中,我们可以预见到包含的...以上是SQL安装和基础语句的主要知识点,通过深入学习和实践,你可以掌握数据库管理的基本技能,为数据分析和应用程序开发奠定坚实的基础。
Shell脚本是Linux/Unix操作系统中的一个强大工具,它允许用户编写自动化任务,执行一系列命令,简化日常操作。本文将详细解析Shell脚本中的常用命令,帮助你更好地理解和利用这一强大的资源。 1. **基本结构** - ...
这份“Linux内核笔记-很强大很详细的”压缩包包含了两个PDF文档,分别是“joyfire的linux内核笔记.pdf”和“joyfire的linux系统管理笔记.pdf”,它们深入浅出地探讨了Linux内核的各个方面,对于想要深入理解Linux...