Linux:账号和权限管理(一)



用户账号和组账号概述

Linux基于用户身份对资源访问进行控制。

用户账号

  • 超级用户
    • root用户是Linux操作系统中默认的超级用户账号,对本主机拥有最高的权限。系统中超级用户是唯一的。超级用户并不是按照名称来定义的,而是通过UID为0来标识。
  • 普通用户
    • root用户或其他管理员用户创建,权限受到限制,一般只在用户自己的宿主目录中拥有完整权限。
  • 程序用户
    • 在安装Linux操作系统及部分应用程序时,会添加一些特定的低权限用户账号。这些用户一般不允许登录到系统,仅用于维持系统或某个程序的正常运行,如bindaemonftpmail等。
  • 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环境

  1. /bin/bash:Bash(Bourne Again SHell),是最常用的Shell之一,也是大多数Linux系统默认的Shell。允许用户在命令行界面下输入命令并执行,提供丰富的命令和脚本语言功能,兼容许多其他的Unix Shell。
  2. /bin/sh:Bourne Shell或其符号链接,通常指向系统默认的Shell(如Bash或Dash)。提供基本的命令行和脚本功能,广泛用于系统脚本和任务。
  3. /bin/zsh:Z Shell,是一种功能丰富的Shell环境,具有强大的定制和扩展能力。提供先进的自动补全、语法高亮和脚本编写功能,常被高级用户和开发者使用。
  4. /bin/tcsh:Tenex C Shell,是C Shell的增强版本,提供脚本编写和命令处理能力。具有类似C语言的语法结构,适用于复杂脚本和系统管理任务。
  5. /bin/dash:Debian Almquist Shell,轻量级的Shell,速度快,资源占用少。主要用于系统脚本,确保脚本在最小的系统资源消耗下运行。
  6. /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 文件的引用、环境变量定义、路径设置等。

区别

  1. 执行时机
    • .bashrc:每次启动一个新的交互式非登录 shell 时执行。
    • .bash_profile:每次启动一个新的登录 shell 时执行。
  2. 常见用法
    • .bashrc:用于配置与交互式 shell 相关的设置,如别名和命令行提示符。
    • .bash_profile:用于设置环境变量、启动程序等。
  3. 典型内容
    • .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 [用户名]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值