1.Linux的用户
在Linux操作系统中,用户管理是系统安全性和资源管理的重要组成部分。以下是关于Linux用户的一些基本概念:
用户类型
-
超级用户(Root):
- Linux系统中的管理员账户,拥有最高的系统权限。
- 可以执行所有系统管理和维护任务。
- 通常建议只在必要时使用root账户,以避免误操作导致系统损坏。
-
普通用户:
- 普通用户账户权限有限,只能访问授权的文件和资源。
- 普通用户通常用于日常工作和应用程序的运行。
- 每个普通用户都有自己的家目录,通常位于
/home/username
。
-
服务用户:
- 专门为运行特定服务或应用程序而创建的用户。
- 这些用户通常没有登录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系统中常见的文件类型:
-
普通文件(Regular file):
- 扩展名:通常有扩展名,但不是必须的。
- 表示:
-
- 描述:包含实际数据的文件,可以是文本文件、二进制文件、图片、视频等。
-
目录(Directory):
- 扩展名:没有扩展名。
- 表示:
d
- 描述:用于组织其他文件和目录的容器。
-
块设备文件(Block special file):
- 扩展名:没有扩展名。
- 表示:
b
- 描述:提供对块设备(如硬盘、软盘)的访问。
-
字符设备文件(Character special file):
- 扩展名:没有扩展名。
- 表示:
c
- 描述:提供对字符设备(如串行端口、打印机)的访问。
-
管道(FIFO,也称为命名管道):
- 扩展名:没有扩展名,但有时使用
.fifo
。 - 表示:
p
- 描述:用于进程间通信的管道。
- 扩展名:没有扩展名,但有时使用
-
套接字(Socket):
- 扩展名:没有扩展名。
- 表示:
s
- 描述:用于网络通信的端点。
-
链接文件(Symbolic link):
- 扩展名:没有扩展名,但有时使用
.lnk
。 - 表示:
l
- 描述:指向另一个文件或目录的快捷方式或引用。
- 扩展名:没有扩展名,但有时使用
-
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)。以下是目录权限的详细说明:
权限类型
-
读权限(r):
- 允许查看目录中的文件和子目录列表。
- 使用命令如
ls
来列出目录内容。
-
写权限(w):
- 允许在目录中创建、删除和重命名文件和子目录。
- 注意,即使有写权限,用户也需要有对文件的相应权限才能修改文件内容。
-
执行权限(x):
- 对于目录,执行权限允许用户进入目录,即使用
cd
命令切换到该目录。 - 如果没有执行权限,即使有读权限,用户也无法查看目录内容,因为没有权限"进入"目录。
- 对于目录,执行权限允许用户进入目录,即使用
权限表示
权限通常以一组九个字符表示,分为三组,每组三个字符。每组分别代表所有者、所属组和其他用户的权限。
cpp
drwxr-xr-x
- 第一个字符
d
表示这是一个目录。 - 接下来的三组
rwx
、r-x
和r-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
- 如果你想要用户在执行
sudo
命令时不需要输入密码,可以使用NOPASSWD
关键字
cpp
username ALL=(ALL:ALL) NOPASSWD: /usr/sbin/service
8.保存并关闭文件。visudo
会自动检查语法错误。
测试配置
-
退出终端并重新登录,以确保权限更改生效。
-
尝试使用
sudo
执行命令
cpp
sudo whoami