Linux入门2(1/3)

三、用户和权限

1、用户

Linux 是多用户系统,用户分为:

  • 普通用户 :日常使用,权限受限(如 zhangsan)。

  • 超级用户(root):拥有最高权限,可管理系统所有文件和服务。

  • 系统用户 :供后台服务使用(如 www-datamysql)。

使用普通用户在许多对于home目录(即home/下的目录)之外的文件只有只读和执行的权限,要想获取更多权限,需要我们切换用户,如我们使用普通用户无法在根目录下创建文件夹,会提醒我们权限不足,我们可以通过切换为超级用户root(su - root或su -【默认不写切换的用户名就默认切换到root超级用户】),就可以完成文件夹的创建。

普通用户切换为其他用户需要输入密码,超级用户切换为其他用户不需要输入密码

注意:默认情况下,Ubuntu/WSL 的 root 用户可能未设置密码。我们需要为其初始设置密码才可通过使用su切换用户

1.1、sudo

由于我们需要获得权限操作文件,但是使用su - root 长时间切换为root超级用户,易对系统造成损失破坏,因为root用户具有最高权限,误操作命令不会报错而是直接执行。

为了避免长时间使用root用户,我们使用sudo为某一条命令临时赋予root用户权限,即在当前用户是sudo认证过后的普通用户的前提下,使用sudo临时获取root用户的权限进行操作。

注意:只有进行过sudo认证的用户才可使用sudo

①、配置sudo认证
  • 进入root用户

  • 输入visudo,在打开的文件(直接默认打开/etc/sudoers文件,使用的是nano编辑器)直接在最后一行加上:

    用户名 ALL=(ALL) NOPASSWORD: ALL

  • ctrl+o并按下回车确认文件名------>保存文件,之后ctrl+x退出编辑器

②、取消sudo认证
  • 进入root用户

  • 输入visudo,在打开的文件(直接默认打开/etc/sudoers文件,使用的是nano编辑器)直接删除添加的已配置的sudo认证

  • ctrl+o并按下回车确认文件名------>保存文件,之后ctrl+x退出编辑器

1.2、用户管理命令
命令 作用 示例
whoami 查看当前用户 whoamiroot
id 查看用户 UID/GID id zhangsan
useradd 创建用户 sudo useradd -m zhangsan
passwd 设置密码 sudo passwd zhangsan
usermod 修改用户属性 sudo usermod -aG sudo zhangsan(加入 sudo 组)
userdel 删除用户 sudo userdel -r zhangsan-r 删除家目录)
1.3、用户组(Group)

用户组用于批量管理权限,一个用户可以属于多个组。

①、组管理命令
命令 作用 示例
groups 查看用户所属组 groups zhangsan
groupadd 创建用户组 sudo groupadd dev(需要root权限)
gpasswd 管理组成员 sudo gpasswd -a zhangsan dev(添加用户到组)
groupdel 删除用户组 sudo groupdel dev(需要root权限)
②、用户管理命令
  • 创建用户 useradd [-g -d] 用户名

    • 选项:-g 指定用户的组,不指定 -g,会创建同名组并自动加入,指定 -g 需要组已经存在,如已存在同名组,必须使用 -g

    • 选项:-d 指定用户 HOME 路径,不指定,HOME 目录默认在:/home/用户名

  • 删除用户 userdel [-r] 用户名

    • 选项:-r,删除用户的 HOME 目录,不使用 -r,删除用户时,HOME 目录保留
  • 查看用户所属组 id [用户名]

    • 参数:用户名,被查看的用户,如果不提供则查看自身
  • 修改用户所属组 usermod -aG 用户组 用户名,将指定用户加入指定用户组

1.4、getent

getent 是 Linux/Unix 系统中的一个命令,用于从系统数据库(如 /etc/passwd/etc/group/etc/hosts 等)获取条目信息。它提供了一种统一的方式来查询不同的名称服务数据库(NSS, Name Service Switch),无论这些数据是存储在本地文件还是通过 LDAP/NIS 等网络服务获取。

①、基本语法
bash 复制代码
  getent database [key ...]
  • database:要查询的数据库名称(如 passwdgrouphosts 等)。

  • key:可选,指定要查找的具体条目(如用户名、组名、主机名等)。如果省略,则显示所有条目。

②、常用数据库类型
数据库 描述 示例命令
passwd 用户账户信息(等效于 /etc/passwd getent passwd zhangsan
group 用户组信息(等效于 /etc/group getent group dev
hosts 主机名/IP 映射(等效于 /etc/hosts getent hosts example.com
services 网络服务定义(如端口号) getent services ssh
shadow 用户密码哈希(需 root 权限) sudo getent shadow zhangsan
protocols 网络协议(如 tcpudp getent protocols tcp
③、常见用法示例
bash 复制代码
  
  # 查询用户信息
  getent passwd zhangsan
  # 输出格式:zhangsan:x:1001:1001:Zhang San:/home/zhangsan:/bin/bash
  # 字段含义:用户名:密码占位符:UID:GID:描述:家目录:默认 Shell。
  ​
  # 查询组信息
  getent group dev
  # 输出示例: dev:x:1002:zhangsan,lisi
  # 字段含义: 组名:密码占位符:GID:组成员列表。
  ​
  # 查询主机名/IP
  getent hosts example.com
  # 输出示例: 93.184.216.34  example.com
  ​
  # 显示所有用户或组
  getent passwd      # 列出所有用户
  getent group       # 列出所有组
  ​
  # 检查服务端口
  getent services ssh

2、权限

2.1、三种权限
①、r(读权限)
  • 文件:可查看内容(如 catless)。

  • 目录:可列出目录内文件(如 ls)。

②、w(写权限)
  • 文件:可修改内容(如 vim 编辑、echo 覆盖)。

  • 目录:可增删目录内文件/子目录(如 touchrmmkdir)。

③、x(执行权限)
  • 文件:可运行(如 ./script.sh,脚本需 x 权限)。

  • 目录:可进入目录(如 cd dir),无 x 权限时无法访问目录内任何内容(即使有 r 权限)。

2.2、目录权限槽位结构

以根目录下的文件为例

第①行是权限槽位

第②行是文件所属用户

第③行是文件所属用户组

可见根目录下的第①行共10个槽位

如果以其他用户登录,那么我们所属的用户所拥有的权限由第①行的后三位决定,如根目录下的Docker文件,根据最后三位可见是:r-x,即我们只有读和执行的权限,并没有写权限,无法对其进行修改

2.3、修改权限控制
①、chmod

chmod(change mode)是 Linux/Unix 系统中用于修改文件或目录权限 的命令,通过调整所有者(User)、所属组(Group)和其他用户(Others)的读(r)、写(w)、执行(x)权限,实现对文件访问控制的管理。

Ⅰ、基本语法
bash 复制代码
  
  chmod [选项] 权限模式 文件/目录

权限模式 :可以是符号模式 (如 u+rwx)或数字模式 (如 755,最常用)。

选项:

  • -R:递归修改目录及其子目录下所有文件的权限(危险!慎用)。

  • -v:显示修改过程(verbose)。

Ⅱ、权限模式的两种表示方法
  • 数字模式(八进制数字,推荐)

r/w/x 权限对应为数字,每组权限(所有者、所属组、其他用户)用一个数字表示,共3位数字(0-7)。

权限符号 含义 数字值 组合示例 数字总和
r 读权限 4 r 4
w 写权限 2 w 2
x 执行权限 1 x 1
- 无权限 0 rwx(4+2+1) 7
rw-(4+2) 6
r-x(4+1) 5
r--(4) 4
-wx(2+1) 3
-w-(2) 2
--x(1) 1
---(0) 0

数字模式格式

[所有者权限][所属组权限][其他用户权限](3位数字,如 755)。

  • 符号模式(更直观,适合局部调整)

通过符号指定用户类别操作权限,格式:

bash 复制代码
  chmod [用户类别][操作][权限] 文件/目录

用户类别(u/g/o/a)

符号 含义
u 所有者(User)
g 所属组(Group)
o 其他用户(Others)
a 所有用户(All,默认)

操作(+/-/=)

符号 含义
+ 添加权限
- 移除权限
= 覆盖设置权限(清除未指定权限)

权限(r/w/x)

即读(r)、写(w)、执行(x)。

Ⅲ、示例
bash 复制代码
  
  # 将 file.txt 权限设为:所有者可读可写可执行,组和其他用户可读可执行
  chmod 755 file.txt  # 对应权限字符串:-rwx(111--7)r-x(101--5)r-x(101--5)
  ​
  # 将 dir 权限设为:所有者可读可写可执行,组可读可执行,其他用户无权限
  chmod 750 dir       # 对应权限字符串:drwxr-x---
  ​
  # 给文件所有者添加执行权限
  chmod u+x script.sh  # 原权限 -rw-r--r-- → -rwxr--r--
  ​
  # 移除所属组的写权限
  chmod g-w data.txt   # 原权限 -rw-rw-r-- → -rw-r--r--
  ​
  # 给所有用户设置读权限(覆盖其他权限)
  chmod a=r file.txt   # 权限变为 -r--r--r--
  ​
  # 给所有者和组添加读写执行权限,其他用户无权限(等效于 770)
  chmod ug=rwx,o= file.txt  # 权限 -rwxrwx---
  ​
  # 修改文件 file.txt 权限为 -r--r-xrwx
  chmod u=r g=rx o=rwx file.txt   
②、chown

chown(change owner)是 Linux/Unix 系统中用于修改**文件/目录所有者(Owner)和所属组(Group)**的命令。通过调整归属关系,可以控制哪些用户或组对文件拥有管理权限。

Ⅰ、基本语法
bash 复制代码
  chown [选项] [所有者][:组] 文件/目录

所有者 :新的用户名(如 rootzhangsan

:新的组名(如 admindev),需在所有者后加 :. 指定。

选项:

  • -R:递归修改目录及其子目录下所有文件的归属(慎用)。

  • -v:显示修改详情(verbose)。

  • --from=原所有者:原组:仅当文件当前归属匹配时才修改(安全操作)。

Ⅱ、示例
bash 复制代码
  
  # 注意:普通用户无法修改他人文件的所有权,需用 sudo 提权。
  # 修改所属用户
  sudo chown zhangsan file.txt  # 将 file.txt 的所有者改为 zhangsan
  ​
  # 修改所属用户组
  sudo chown :dev file.txt      # 将 file.txt 的所属组改为 dev
  ​
  # 同时修改所有者和组
  sudo chown zhangsan:dev file.txt  # 所有者=zhangsan,组=dev
  ​
  # 递归修改目录归属
  sudo chown -R zhangsan:dev /project  # 修改 /project 下所有内容的归属
相关推荐
鼓掌MVP3 小时前
通过MCP协议结合腾讯云Lighthouse
大数据·运维
久曲健的测试窝3 小时前
Jenkins Share Library教程 —— 企业级 Jenkins Shared Library 实战示例
运维·jenkins
Wang's Blog4 小时前
Linux小课堂: Tomcat容器中部署Jenkins的完整流程与关键技术要点
linux·tomcat·jenkins
要站在顶端4 小时前
Jenkins Pipeline 多job依赖、触发多Job、并行执行及制品下载
运维·servlet·jenkins
Ghost Face...4 小时前
深入解析U-Boot命令系统
linux·运维·服务器
NiKo_W4 小时前
Linux 网络初识
linux·网络·网络协议
心灵宝贝4 小时前
申威服务器安装Nacos 2.0.3 RPM包详细步骤(Kylin V10 sw_64架构)附安装包
服务器·架构·kylin
ajax_beijing4 小时前
当同一个弹性云服务器所在子网同时设置了snat和弹性公网IP时,会优先使用哪个
linux·运维·服务器
eddy-原4 小时前
运维自动化与监控体系综合实践作业
运维·自动化·1024程序员节