首页 > 系统相关 >Linux:账号和权限管理(一)

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

时间:2024-08-08 16:26:23浏览次数:14  
标签:登录 账号 用户 密码 Linux 权限 root bash


文章目录


用户账号和组账号概述

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 [用户名]

标签:登录,账号,用户,密码,Linux,权限,root,bash
From: https://blog.csdn.net/qq_44421043/article/details/140912601

相关文章

  • Linux:账号和权限管理(二)
    文章目录1、查询用户账号的详情信息-finger软件包安装前:配置阿里云YUM源安装finger格式使用方法输出示例输出解释2、查询已登录到主机的用户-whowho命令(较常用)格式选项输出示例users命令格式w命令格式选项输出示例3、设置目录和文件的权限-chmod符号模式格式选项......
  • linux磁盘管理
    目录1.磁盘管理 1.1磁盘简介1.2管理磁盘添加磁盘查看磁盘信息查看磁盘使用情况创建分区​编辑挂载查看挂载1.磁盘管理 1.1磁盘简介在操作系统中是非常重要的一个组成部分,我们需要了解如何查看已经安装的磁盘信息以及如何管理这些磁盘,磁盘/硬盘/disk是同一......
  • Linux知识复习第1期
    目录1、文件链接(1)软链接(2)硬链接(3)联系区别2、vim使用技巧(1)/etc/vimrc(2)~/.vimrc(3)多行注释3、watch4、cp和mv的数据原理5、文件查看(1)前n行(2)n1-n2行(3)后n行(4)显示整个文件内容(5)搜索文件中包含特定文本的行6、find1、文件链接(1)软链接        ln-s原文......
  • 书生.浦江大模型实战训练营——(一)InternStudio+Vscode SSH连接远程服务器+Linux基础指
    最近在学习书生.浦江大模型实战训练营,所有课程都免费,以关卡的形式学习,也比较有意思,提供免费的算力实战,真的很不错(无广)!欢迎大家一起学习,打开LLM探索大门:邀请连接,PS,邀请有算力哈哈。文章目录一、InternStudio使用二、VscodeSSH连接远程服务器三、Linux基础指令一......
  • Linux项目自动化构建工具-Makefile简介
    Makefile是Linux环境下常用的一个自动化构建工具,它主要用于编译和构建项目。Makefile文件描述了如何编译和链接程序,以及它们之间的依赖关系。使用Makefile可以简化编译过程,使得只需要重新编译那些自上次编译以来被修改过的文件,从而节省时间。基本概念目标(Targets):Makefi......
  • 云服务器Linux Centos7 安装minio
    官网下载minio地址:https://min.io/download?license=agpl&platform=kubernetes本文章可放心无脑食用1.准备工作创建存储位置(一般在/usr/local下安装程序)mkdir/usr/local/miniomkdir/usr/local/minio/data/usr/local/minio:存放minio程序/usr/local/minio:存放mi......
  • Linux 硬件相关命令
    ※,Linux性能分析:https://www.cnblogs.com/bakari/p/10515977.html★,之CPU篇:cpu个数、核数、线程数是cpu的三个重要概念。一般个人PC上只有一个物理cpu,服务器上可以有多个物理cpu。一个物理cpu可以有多个核(比如4核,8核等等);一个物理核可以使用超线程技术超出多个虚拟核(即线程),一般是......
  • 初见linux
    一,  UNIX/Linux中一切皆文件!  /在linux中为分隔符,windows中\为分隔符。  注:在终端中除第一次出现的/被视作根目录往后皆是分隔。  eg:/usr/include/stdio.h其表示的意思是根目录下的usr目录中的include目录里的stdio.h文件。  /根目录  所有文件都在它下面 ......
  • 推荐一款界面优雅、功能强大的 .NET + Vue 权限管理系统
    目录前言项目简介项目特点项目预览项目演示1、系统登录2、系统首页 3、系统页面 4、插件示例 5、移动端项目地址总结前言今天推荐一款用.NET和Vue3实现的开源权限管理系统。它的界面清爽干净,功能强大,还具备灵活的角色权限分配功能,能够满足不同规模企业......
  • 网卡与Linux网络结构(上)
    原本是想借着之前学习的中断进一步拓展到网卡与中断的,标题都写好了,结果低估了其中的知识面和难度。。。。。于是调整为了网卡与Linux网络结构(上),没错,仅仅只是上。。。我还是进一步低估了学习需要花费的时间,网络这块的确是弱项,以前都是死记硬背TCP的三次握手、四次挥手,这次正好......