文章目录
- 用户账号和组账号概述
- 管理账号文件
- 无密码登录
- shell环境(面试题)(默写至少3个)
- 添加用户账号-useradd
- 为用户账号设置密码-passwd
- 修改用户账号属性-usermod
- 出现-bash-4.2$的解决方法
- 删除用户账号-userdel
- 用户账号的初始配置文件:profile
- 组账号文件:group、gshadow
- 添加组账号-groupadd
- 添加删除组成员-gpasswd
- 删除组账号-groupdel
- 查询用户所属的组-groups
- 查询用户身份标识-id
用户账号和组账号概述
Linux基于用户身份对资源访问进行控制。
用户账号
- 超级用户
root
用户是Linux操作系统中默认的超级用户账号,对本主机拥有最高的权限。系统中超级用户是唯一的。超级用户并不是按照名称来定义的,而是通过UID为0来标识。
- 普通用户
- 由
root
用户或其他管理员用户创建,权限受到限制,一般只在用户自己的宿主目录中拥有完整权限。
- 由
- 程序用户
- 在安装Linux操作系统及部分应用程序时,会添加一些特定的低权限用户账号。这些用户一般不允许登录到系统,仅用于维持系统或某个程序的正常运行,如
bin
、daemon
、ftp
、mail
等。
- 在安装Linux操作系统及部分应用程序时,会添加一些特定的低权限用户账号。这些用户一般不允许登录到系统,仅用于维持系统或某个程序的正常运行,如
- su命令
- 作用:只是切换到指定用户的身份。若不指定用户名默认
root
用户。 - 环境变量:shell环境、环境变量、工作目录等不会切换。
- 使用场景:适用于需要临时获取另一个用户权限,但不需要完全进入其环境的场景。
- 作用:只是切换到指定用户的身份。若不指定用户名默认
- su -命令
- 作用:完全切换到指定用户。(切换同时加载用户的登录环境)若不指定默认用户名默认
root
用户。 - 环境变量:shell、环境变量等都会切换到该用户,包括工作目录也会切换到该用户的主目录。再如也会执行目标用户的登录脚本。
- 使用场景:适用于需要完全切换到另一个用户的环境,包括其环境变量和目录的场景。
- 作用:完全切换到指定用户。(切换同时加载用户的登录环境)若不指定默认用户名默认
组账号
- 基本组(私有组)
- 每个用户都有一个基本组,通常为创建用户时指定的组。
- 在
/etc/passwd
文件中第4字段记录的即为该用户的基本组GID号。
- 附加组(公共组)
- 用户除了基本组以外,还可以加入一个或多个附加组。这些附加组用于进一步分配权限。
UID和GID
- UID (User IDentity, 用户标识号):
- 管理员:
root
,UID为0。 - 程序用户: UID范围为1-499(CentOS 6以前),1-999(CentOS 7以后)。
- 普通用户: UID范围为500+(CentOS 6以前),1000+(CentOS 7以后)。
- 管理员:
- GID (Group IDentify, 组标识号):
- 每个组都有一个唯一的GID,用于标识该组。
- 对守护进程和用户进行权限分配。
一个用户可以属于多个组。
管理账号文件
在早期的UNIX操作系统中,用户帐号的密码信息是保存在passwd文件中的,不法用户可以很容易的获取密码字串并进行暴力破解,因此存在一定的安全隐患。后来经改进,将密码转存入专门的shadow文件中,而passwd文件中仅保留密码占位符“x”
用户账号文件:/etc/passwd
保存用户名称、宿主目录、登录Shell等基本信息。
基于系统运行和管理需要,所有用户都可以访问passwd文件中的内容,但是只有root用户才能进行更改。
示例行
root:x:0:0:root:/root:/bin/bash
字段说明
字段1:用户帐号的名称
字段2:用户密码占位符“x”
字段3:用户帐号的UID号
字段4:所属基本组帐号的GID号
字段5:用户全名(登录用户名)
字段6:宿主目录
字段7:登录Shell信息(/bin/bash为可登陆系统,/sbin/nologin和/bin/false为禁止用户登陆系统)
用户密码文件:/etc/shadow
保存用户的密码、账号有效期等信息
默认只有root用户能够读取内容,且不允许直接编辑该文件中的内容。
示例行
root:$6$VyOUGqOCSv5HILM1wagZC/FwGfnrtJFnIT:18445:0:99999:7:::
字段说明
字段1:用户帐号的名称
字段2:使用MD5加密的密码字串信息,当为”*”或”!”时表示此用户不能登录到系统。若该字段内容为空,则该用户无须密码即可登录系统
字段3:上次修改密码的时间,表示从1970年01月01日算起到最近一次修改密码时间隔的天数
字段4:密码的最短有效天数,自本次修改密码后,必须至少经过该天数才能再次修改密码。默认值为0,表示不进行限制
字段5:密码的最长有效天数,自本次修改密码后,经过该天数以后必须再次修改密码。默认值为99999,表示不进行限制
字段6:提前多少天警告用户密码将过期,默认值为7
字段7:在密码过期之后多少天禁用此用户
字段8:帐号失效时间,指定了用户作废的天数(从1970年01月01日起计算)为空,表示账号永久可用
字段9:保留字段(未使用)
无密码登录
所有用户(普通用户和伪用户)的密码都是"!!“或”*",代表没有密码是不能登录的。
密码项为"!!“或”*"
-
普通用户"!!":表示账户还没有设置密码。新创建的用户如果不设定密码,密码项会是"!!",不能登录。
执行命令
useradd newuser
后,新用户newuser
的密码项会是"!!"。 -
伪用户"*":通常用于系统账户,表示账户无法使用密码登录。(伪用户是系统中的特殊账户,通常用于系统进程和服务,而不是实际登录。)
-
用户间切换仍需密码:虽然密码项为"!!“表示用户没有密码,实际上普通用户之间的切换仍然需要密码验证。即使某个用户的密码项为”!!",也不能在没有密码的情况下登录。
删除密码使可以无密码登录
-
删除密码:使用
passwd -d username
可以删除指定用户的密码,使得用户可以在不需要密码的情况下登录。删除示例:
sudo passwd -d newuser
,此时newuser
就可以在不需要密码的情况下登录,但这会降低系统的安全性。删前删后字段:删除密码前
newuser:!!:18733:0:99999:7:::
,删除密码后newuser::18733:0:99999:7:::
,密码项变为空值,即可无密码登录。
shell环境(面试题)(默写至少3个)
Linux系统中的Shell环境多种多样,它们为用户提供了与操作系统交互的接口。
1. Shell环境
- /bin/bash:Bash(Bourne Again SHell),是最常用的Shell之一,也是大多数Linux系统默认的Shell。允许用户在命令行界面下输入命令并执行,提供丰富的命令和脚本语言功能,兼容许多其他的Unix Shell。
- /bin/sh:Bourne Shell或其符号链接,通常指向系统默认的Shell(如Bash或Dash)。提供基本的命令行和脚本功能,广泛用于系统脚本和任务。
- /bin/zsh:Z Shell,是一种功能丰富的Shell环境,具有强大的定制和扩展能力。提供先进的自动补全、语法高亮和脚本编写功能,常被高级用户和开发者使用。
- /bin/tcsh:Tenex C Shell,是C Shell的增强版本,提供脚本编写和命令处理能力。具有类似C语言的语法结构,适用于复杂脚本和系统管理任务。
- /bin/dash:Debian Almquist Shell,轻量级的Shell,速度快,资源占用少。主要用于系统脚本,确保脚本在最小的系统资源消耗下运行。
- /bin/ksh:Korn Shell,具有高级编程特性,适用于复杂脚本和自动化任务。提供强大的命令行编辑和脚本编写功能,是一种兼具传统和现代特性的Shell环境。
2. 系统命令
- /sbin/nologin:用于禁止用户登录的程序。当某个用户的登录Shell设置为
/sbin/nologin
时,系统会拒绝该用户登录并显示一条信息。 - /sbin/sync:用于将文件系统缓存中的数据写入磁盘,确保数据的一致性和完整性。
- /bin/false:一个什么都不做,立即返回非零退出状态的命令。也被用来禁止用户登录。当用户尝试登录时,系统会立即结束会话,且用户不会收到任何错误或提示信息。
- /bin/ls:用于列出目录内容的命令。
- /bin/cp:用于复制文件或目录的命令。
- /bin/mv:用于移动或重命名文件或目录的命令。
- /bin/rm:用于删除文件或目录的命令。
注
可以通过echo $SHELL
命令来查看当前正在使用的Shell环境;
通过cat /etc/shells
命令来查看当前系统安装的所有Shell种类。
添加用户账号-useradd
解释
在/etc/passwd 文件和/etc/shadow 文件的末尾增加该用户账号的记录。
若未明确指定用户的宿主目录,则在/home日录下自动创建与该用户账号同名的宿主目录,并在该目录中建立用户的各种初始配置文件。
若没有明确指定用户所属的组,则自动创建与该用户账号同名的基本组账号,组账号的记录信息将保存到/etc/group 和/etc/gshadow 文件中。
格式
useradd [选项]... 用户名
常用选项
- -u:指定用户的UID号,要求该UID号码未被其他用户使用。
- -d:指定用户的宿主目录位置(当与-M一起使用时,不生效)。
- -e:指定用户的账户失效时间,可使用YYYY-MM-DD的日期格式。
- -g:指定用户的基本组名(或使用GID号),对应的组名必须已存在。
- -G:指定用户的附加组名(或使用GID号),对应的组名必须已存在。
- -M:不建立宿主目录。
- -s:指定用户的登录Shell,(比如/bin/bash为可登陆系统,/sbin/nologin和/bin/false为禁止用户登陆系统)。
示例
不添加任何属性和权限控制添加用户lisi
useradd test1 #创建用户
id test1 #查看用户信息
输出以下内容(用户ID,组ID,附加组ID)
uid=1001(test1)gid=1001(test1)组=1001(test1)
用户态最高权限是root,内核态不是,最高权限的身份也不会维护在passwd里。
查看文件中显示信息(tail也可以)
cat /etc/passwd | grep test #过滤test行
输出以下内容,没有指定登录shell默认/bin/bash
test1:x:1001:1001::/home/test1:/bin/bash
添加一个新的用户:
用户的用户名为test2;UID为1002;主目录为/opt/test;所属主组为group3;附加组为group03;登录shell为/bin/bash。
useradd -u 1002 -d /opt/test -g group3 -G group03 -s /bin/bash test2
若提示组不存在,要先新建组
groupadd group3
groupadd group03
groupadd -g 88 group33 ##-g 88:指定新组的GID为88
可以查看组列表
tail -f /etc/group
为用户账号设置密码-passwd
说明
- root用户:
- 可以使用
passwd
命令指定用户名作为参数,对指定用户的密码进行管理。
- 可以使用
- 普通用户:
- 只能使用
passwd
命令修改自己的密码。
- 只能使用
格式
passwd [选项]... 用户名
常用选项
- -d:清空指定用户的密码,使其仅使用用户名即可登录系统。
- -l:锁定用户账户,锁定的用户账号将无法通过文字界面登录(图形化界面可能仍可登录)。
- -S:查看用户账户的状态,检查账户是否被锁定。
- -u:解锁用户账户,使其可以重新登录系统。
示例
-
修改用户
username
的密码:passwd username
-
从标准输入读取密码并设置用户
username
的密码(需要 root 权限):echo "123" | passwd --stdin username
修改用户账号属性-usermod
用于修改用户账号的属性。
格式
usermod [选项]... 用户名
常用选项
- -u:指定用户的UID号。格式usermod -u uid号 username 。要求该UID号未被其他用户使用。
- -d:修改用户的宿主目录位置。
- -e:修改用户的账户失效时间,使用
YYYY-MM-DD
的日期格式。 - -g:修改用户的基本组,使用组名或GID号。
- -G:添加用户到附加组,使用组名或GID号。
- -s:指定用户的登录 Shell。
- -L:锁定用户账户,使其无法登录。
- -U:解锁用户账户,使其可以重新登录。
示例
[root@localhost ~]# usermod -u 1003 test # 修改用户的UID
[root@localhost ~]# usermod -d /home/test test # 修改用户的宿主目录
[root@localhost ~]# usermod -s /sbin/nologin test # 指定用户的登录Shell
#注:通常/nologin位于/sbin/
[root@localhost ~]# usermod -L test # 锁定用户账户
[root@localhost ~]# usermod -U test # 解锁用户账户
出现-bash-4.2$的解决方法
-bash-4.2表示使用的是bash shelli程序的版本号是4.2,$表示当 前用户是普通用户
[root@localhost home]#cp /etc/skel/.bashrc /home/test/
[root@localhost home]#cp /etc/skel/.bash_profile /home/test/
[root@localhost home]#chown test:test /home/test/.bash_profile
[root@localhost home]#chown test:test /home/test/.bashrc
删除用户账号-userdel
格式
userdel [-r] 用户名
常用选项
-
-r:将该用户的宿主目录一并删除**(常用)**
-
-f:强制删除用户账户,尤其删除一个正在使用中的用户账户。
注意:可能会导致一些问题,如正在运行的进程无法正确清理其资源。
提示删除用户被占用,但是又没有登录此用户,可能是因为在终端内切换用户导致,此行为会开启多个终端,可以使用ctrl+D退出当前终端。
用户账号的初始配置文件:profile
/etc/profile是系统的全局配置文件,对所有用户都有效。包含一些系统级别的环境变量和默认的系统级别的 shell 配置。
用户登录到系统时,系统会首先执行/etc/profile文件,然后再执行该用户的个人配置文件(如.bashrc、.bash_profile等)。
vim /etc/profile
alias cat='cat -n' #别名设置(一般不用)
source /etc/profile
简要说明
source
:在当前shell环境中执行指定文件的内容。/etc/profile
:一个全局配置文件,包含系统范围内的环境变量和启动脚本设置。
.bash和.bash_profile的区别
.bashrc
和 .bash_profile
是两个常见的 shell 配置文件,主要用于配置用户的 shell 环境。
.bashrc
- 位置:位于用户的主目录下,路径为
~/.bashrc
。 - 执行时机:每次启动一个新的交互式非登录 shell 时(例如打开一个新终端窗口或在终端中运行
bash
命令)。 - 作用:设置命令行提示符、别名、函数、环境变量等。
- 典型内容:包含命令别名、环境变量定义、函数定义等。
.bash_profile
- 位置:位于用户的主目录下,路径为
~/.bash_profile
。 - 执行时机:每次启动一个新的登录 shell 时(例如用户登录、通过 SSH 连接到服务器、在终端中运行
bash --login
命令)。 - 作用:初始化用户环境,设置路径、环境变量、启动程序等。
- 典型内容:通常包含对
.bashrc
文件的引用、环境变量定义、路径设置等。
区别
- 执行时机:
.bashrc
:每次启动一个新的交互式非登录 shell 时执行。.bash_profile
:每次启动一个新的登录 shell 时执行。
- 常见用法:
.bashrc
:用于配置与交互式 shell 相关的设置,如别名和命令行提示符。.bash_profile
:用于设置环境变量、启动程序等。
- 典型内容:
.bashrc
:常见内容包括命令别名、函数定义、环境变量等。.bash_profile
:常见内容包括调用.bashrc
、设置 PATH 变量、环境变量等。
示例内容
.bashrc
# 设置命令别名
alias ll='ls -la'
# 定义环境变量
export EDITOR=nano
.bash_profile
# 调用 .bashrc 文件
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# 设置 PATH 变量
export PATH=$PATH:$HOME/bin
组账号文件:group、gshadow
/etc/group:保存组帐号基本信息
/etc/gshadow:保存组帐号的密码信息
示例
grep "postfix" /etc/group
mail:x:12:postfix
postfix:x:89:
字段说明
字段1:组帐号的名称
字段2:占位符“x”
字段3:组账号的GID号
字段4:组账号包含的用户成员(一般不包括基本组对应的用户帐号),多个成员之间以逗号",”分隔
添加组账号-groupadd
格式
groupadd [-g GID] 组账号名
常用选项
- -g:指定 GID号
示例
#添加组账号
[root@localhost ~]# groupadd test
[root@localhost ~]# tail -f/etc/group
#指定GID号添加组账号
[root@localhost ~]# groupadd -g 88 group111
[root@localhost ~]# tail -f/etc/group
添加删除组成员-gpasswd
格式
gpasswd [选项]... 组账号名
常用选项
-a:向组内添加一个用户
-d:从组内删除一个用户成员
-M:定义组成员列表,以逗号分隔
示例
[root@localhost ~]# useradd aaa
[root@localhost ~]# useradd bbb
#将用户yht、hcy和qzz加入到dn用户组中
[root@localhost ~]# gpasswd -M aaa,bbb,ccc group111
[root@localhost ~]# cat /etc/group
#添加用户到组
[root@localhost ~]# gpasswd -a test1 group001
[root@localhost ~]# cat /etc/group | grep group001
删除组账号-groupdel
格式
groupdel 组账号名
示例
groupdel test
grep "test" /etc/group
查询用户所属的组-groups
格式
groups [用户名]
注:没有 id [用户名]
显示的详细
查询用户身份标识-id
格式
id [用户名]
标签:登录,账号,用户,密码,Linux,权限,root,bash From: https://blog.csdn.net/qq_44421043/article/details/140912601