linux的权限

1.Linux的用户

在Linux操作系统中,用户管理是系统安全性和资源管理的重要组成部分。以下是关于Linux用户的一些基本概念:

用户类型

  1. 超级用户(Root)

    • Linux系统中的管理员账户,拥有最高的系统权限。
    • 可以执行所有系统管理和维护任务。
    • 通常建议只在必要时使用root账户,以避免误操作导致系统损坏。
  2. 普通用户

    • 普通用户账户权限有限,只能访问授权的文件和资源。
    • 普通用户通常用于日常工作和应用程序的运行。
    • 每个普通用户都有自己的家目录,通常位于 /home/username
  3. 服务用户

    • 专门为运行特定服务或应用程序而创建的用户。
    • 这些用户通常没有登录shell的权限,仅用于运行特定的服务进程。
    • 例如,Apache Web服务器通常以 apache 用户身份运行。

用户管理命令

  • useradd:用于添加新用户。
  • userdel:用于删除用户。
  • passwd:用于设置或更改用户密码。
  • usermod:用于修改用户账户的属性。
  • id:用于显示用户的用户ID(UID)和组ID(GID)。
  • whoami:用于显示当前登录用户的名称。

用户组

  • 用户组是用户的集合,用于简化权限管理。
  • 用户可以属于一个或多个组。
  • 组的权限可以应用于组的所有成员。

用户相关的文件

  • /etc/passwd:包含系统用户账户信息。
  • /etc/shadow:包含用户密码的加密信息。
  • /etc/group:包含系统组的信息。
  • /etc/gshadow:包含组密码的加密信息。

2.Linux的权限管理

Linux的权限管理是确保系统安全性和数据完整性的关键机制。它控制着用户和组对文件、目录和其他系统资源的访问权限。以下是Linux权限管理的一些基本概念和常用命令。

权限类型

  • 读权限(r):允许读取文件内容或列出目录内容。
  • 写权限(w):允许修改文件内容或修改目录结构(创建、删除文件/目录)。
  • 执行权限(x):允许执行文件或访问目录(即进入该目录)。

权限分类

  • 用户权限(User):文件所有者的权限。
  • 组权限(Group):文件所属组的成员的权限。
  • 其他权限(Others):既不是文件所有者也不是文件所属组成员的其他用户的权限。

权限表示

使用ls -l命令可以查看文件或目录的权限信息,例如:

cpp 复制代码
-rwxr-xr-- 1 user group 4096 Mar 10 10:00 filename
  • 文件类型(-表示普通文件,d表示目录)
  • 用户权限(rwx表示用户有读、写、执行权限)
  • 组权限(r-x表示组有读、执行权限,无写权限)
  • 其他权限(r--表示其他用户有读权限,无写和执行权限)
  • 硬链接数
  • 文件所有者
  • 文件所属组
  • 文件大小
  • 最后修改日期
  • 文件名

权限设置命令

  • chmod:改变文件或目录的权限。

    • 数字表示法:chmod 755 filename(用户=rwx,组=rx,其他=rx)
    • 符号表示法:chmod u+x filename(给用户增加执行权限)
  • chown:改变文件的所有者和/或所属组。

    • chown user:group filename(改变文件的所有者和组)
  • chgrp:改变文件所属的组。

    • chgrp group filename(改变文件的所属组)
  • umask:设置创建文件和目录时的默认权限。

特殊权限

  • 设置用户ID(Setuid) :当执行文件时,用户获得文件所有者的权限。设置方法:chmod u+s filename
  • 设置组ID(Setgid) :当执行文件或访问目录时,用户获得文件所属组的权限。设置方法:chmod g+s filename
  • 粘滞位(Sticky Bit) :通常用于目录,防止用户删除或重命名不属于他们的文件。设置方法:chmod +t directory

给文件增加所有用户的执行权限:

cpp 复制代码
chmod a+x filename

设置文件所有者为user,所属组为group:

cpp 复制代码
chown user:group filename

设置新创建文件的默认权限为644(rw-r--r--):

cpp 复制代码
umask 022

3.文件类型

在Linux系统中,文件类型是由文件系统的inode信息确定的,而不是由文件扩展名(如 .txt.jpg)决定的。以下是Linux系统中常见的文件类型:

  1. 普通文件(Regular file)

    • 扩展名:通常有扩展名,但不是必须的。
    • 表示:-
    • 描述:包含实际数据的文件,可以是文本文件、二进制文件、图片、视频等。
  2. 目录(Directory)

    • 扩展名:没有扩展名。
    • 表示:d
    • 描述:用于组织其他文件和目录的容器。
  3. 块设备文件(Block special file)

    • 扩展名:没有扩展名。
    • 表示:b
    • 描述:提供对块设备(如硬盘、软盘)的访问。
  4. 字符设备文件(Character special file)

    • 扩展名:没有扩展名。
    • 表示:c
    • 描述:提供对字符设备(如串行端口、打印机)的访问。
  5. 管道(FIFO,也称为命名管道)

    • 扩展名:没有扩展名,但有时使用 .fifo
    • 表示:p
    • 描述:用于进程间通信的管道。
  6. 套接字(Socket)

    • 扩展名:没有扩展名。
    • 表示:s
    • 描述:用于网络通信的端点。
  7. 链接文件(Symbolic link)

    • 扩展名:没有扩展名,但有时使用 .lnk
    • 表示:l
    • 描述:指向另一个文件或目录的快捷方式或引用。
  8. Door(Solaris系统特有):

    • 扩展名:没有扩展名。
    • 表示:D
    • 描述:用于进程间通信的机制。
cpp 复制代码
-rw-r--r--  1 user group  4096 Mar 10 10:00 filename.txt
drwxr-xr-x  2 user group  4096 Mar 10 10:00 directory
brw-rw----  1 user disk   8,  0 Mar 10 10:00 /dev/sda
crw-rw-rw-  1 user tty    5,  0 Mar 10 10:00 /dev/tty
prw-rw-r--  1 user group  0     Mar 10 10:00 pipe
srwxr-xr-x  1 user group  0     Mar 10 10:00 socket
lrwxrwxrwx  1 user group  8     Mar 10 10:00 link -> filename

4.目录权限

在Linux和类Unix操作系统中,目录权限决定了用户和用户组能够对目录执行哪些操作。权限分为三种类型,并且可以针对三种不同的类别设置:文件所有者(owner)、文件所属组(group)和其他用户(others/world)。以下是目录权限的详细说明:

权限类型

  1. 读权限(r)

    • 允许查看目录中的文件和子目录列表。
    • 使用命令如 ls 来列出目录内容。
  2. 写权限(w)

    • 允许在目录中创建、删除和重命名文件和子目录。
    • 注意,即使有写权限,用户也需要有对文件的相应权限才能修改文件内容。
  3. 执行权限(x)

    • 对于目录,执行权限允许用户进入目录,即使用 cd 命令切换到该目录。
    • 如果没有执行权限,即使有读权限,用户也无法查看目录内容,因为没有权限"进入"目录。

权限表示

权限通常以一组九个字符表示,分为三组,每组三个字符。每组分别代表所有者、所属组和其他用户的权限。

cpp 复制代码
drwxr-xr-x
  • 第一个字符 d 表示这是一个目录。
  • 接下来的三组 rwxr-xr-x 分别表示所有者、所属组和其他用户的权限。

在这个例子中:

  • 所有者(owner)有读(r)、写(w)和执行(x)权限。
  • 所属组(group)和其他用户(others)有读(r)和执行(x)权限,但没有写(w)权限。

设置目录权限:

可以使用 chmod 命令来更改目录权限。以下是一些示例:

  • 给所有者添加写权限:chmod u+w directory_name
  • 移除所属组的执行权限:chmod g-x directory_name
  • 允许所有用户读取和执行目录,但不允许写入:chmod a=rx directory_name

权限的特殊情况:

  • 粘滞位(Sticky bit) :设置在目录上时,只有文件所有者或超级用户才能删除或重命名文件,即使其他人有写权限。通常用于公共目录,如 /tmp
  • 设置用户ID(Setuid)设置组ID(Setgid):这些权限通常用于文件,但也可以应用于目录。当应用于目录时,它们会影响目录内部创建的新文件和子目录的权限。

5.进行sudo的配置

在Linux系统中,sudo 命令允许授权用户以超级用户(root)或其他用户的身份执行命令。配置 sudo 涉及编辑 /etc/sudoers 文件,这是 sudo 的配置文件。以下是如何安全地配置 sudo 的步骤:

注意事项

  • 在编辑 /etc/sudoers 文件之前,请确保你具有足够的权限。
  • 使用 visudo 命令而不是直接编辑该文件,因为 visudo 提供了语法检查功能,可以防止配置错误。
  • 请确保备份原始的 /etc/sudoers 文件,以防万一。

配置步骤

1.打开终端。

2.运行以下命令以编辑 /etc/sudoers 文件

cpp 复制代码
sudo visudo

3.在文件中,你可以看到以下类型的条目

cpp 复制代码
root    ALL=(ALL:ALL) ALL

这表示root用户可以从任何终端(ALL)以任何用户(ALL)的身份执行任何命令(ALL)。

4.要给特定用户添加 sudo 权限,可以按照以下格式添加一行

cpp 复制代码
username ALL=(ALL:ALL) ALL

其中 username 是你想要授权的用户名。

5.如果你只想允许用户执行特定的命令,可以指定命令路径

cpp 复制代码
username ALL=(ALL:ALL) /usr/sbin/service

这将允许用户 username 只能使用 sudo 执行 service 命令。

6.你也可以为用户组添加 sudo 权限,使用 %groupname 代替 username

cpp 复制代码
%wheel ALL=(ALL:ALL) ALL
  1. 如果你想要用户在执行 sudo 命令时不需要输入密码,可以使用 NOPASSWD 关键字
cpp 复制代码
username ALL=(ALL:ALL) NOPASSWD: /usr/sbin/service

8.保存并关闭文件。visudo 会自动检查语法错误。

测试配置

  1. 退出终端并重新登录,以确保权限更改生效。

  2. 尝试使用 sudo 执行命令

cpp 复制代码
sudo whoami
相关推荐
枫叶红花19 分钟前
【Linux系统编程】:信号(2)——信号的产生
linux·运维·服务器
yaosheng_VALVE27 分钟前
探究全金属硬密封蝶阀的奥秘-耀圣控制
运维·eclipse·自动化·pyqt·1024程序员节
_微风轻起30 分钟前
linux下网络编程socket&select&epoll的底层实现原理
linux·网络
dami_king34 分钟前
SSH特性|组成|SSH是什么?
运维·ssh·1024程序员节
启明真纳40 分钟前
elasticache备份
运维·elasticsearch·云原生·kubernetes
苹果醋343 分钟前
SpringBoot快速入门
java·运维·spring boot·mysql·nginx
WANGWUSAN661 小时前
Python高频写法总结!
java·linux·开发语言·数据库·经验分享·python·编程
TsengOnce2 小时前
Docker 安装 禅道-21.2版本-外部数据库模式
运维·docker·容器
永卿0012 小时前
nginx学习总结(不包含安装过程)
运维·nginx·负载均衡
Zmxcl-0072 小时前
IIS解析漏洞
服务器·数据库·microsoft