2.1 用户与组管理
用户与组的基本概念
在Linux系统中,用户和组是管理权限和资源访问的基本单元。每个用户都有一个唯一的用户ID(UID),每个组都有一个唯一的组ID(GID)。用户可以属于一个或多个组,组用于集中管理一组用户的权限。
- 用户:代表系统中的一个个体,可以是人或系统服务。每个用户都有一个独立的主目录、默认Shell以及独立的文件权限。
- 组:一组用户的集合,用于简化权限管理。一个文件可以被多个用户通过组共享和访问。
创建和删除用户账户
在Linux中,用户管理的基本操作包括创建、删除和修改用户账户。以下是一些常用命令:
useradd
:用于创建一个新的用户账户。
sudo useradd username
该命令创建一个新用户,但不会自动设置密码和主目录。可以使用-m
选项创建主目录,-s
选项指定默认Shell。
例如,创建一个名为john
的新用户,并创建其主目录和默认Shell:
sudo useradd -m -s /bin/bash john
passwd
:用于设置或更改用户密码。
sudo passwd username
例如,为john
设置密码:
sudo passwd john
userdel
:用于删除用户账户。
sudo userdel username
要删除用户并删除其主目录和邮件文件,可以使用-r
选项:
sudo userdel -r john
用户组的创建与管理
用户组的管理与用户类似,可以通过以下命令来创建和管理组:
groupadd
:用于创建一个新的用户组。
sudo groupadd groupname
例如,创建一个名为developers
的新组:
sudo groupadd developers
groupdel
:用于删除用户组。
sudo groupdel groupname
例如,删除developers
组:
sudo groupdel developers
usermod
:用于修改现有用户的属性,包括将用户添加到某个组。
sudo usermod -aG groupname username
例如,将用户john
添加到developers
组:
sudo usermod -aG developers john
注意:-a
选项确保用户被附加到指定组而不是替换用户的现有组成员身份。
用户与组之间的关系及其配置文件
在Linux系统中,用户与组的相关信息存储在以下几个文件中:
/etc/passwd
:包含所有用户的基本信息,如用户名、UID、GID、主目录和Shell等。每一行代表一个用户,格式如下:
username:x:UID:GID:comment:home_directory:shell
例如:
john:x:1001:1001::/home/john:/bin/bash
/etc/group
:包含所有组的基本信息,如组名、GID和组成员列表。格式如下:
groupname:x:GID:user1,user2,...
- 例如:
developers:x:1002:john,mary
/etc/shadow
:包含用户密码及相关信息。文件权限严格限制,通常只有root
用户可以访问。每一行代表一个用户,格式如下:
username:password:last_changed:min:max:warn:inactive:expire
这些文件是Linux系统中用户与组管理的核心,通过手动编辑这些文件可以直接修改用户和组信息,但通常建议通过系统命令来进行管理以避免错误。
2.2 文件权限与访问控制
文件权限的详细讲解
在Linux系统中,文件权限决定了用户或组对文件的访问级别。每个文件或目录都有三个权限集,分别适用于文件所有者(User)、所属组(Group)和其他用户(Others)。每个权限集包括三种类型的权限:
- 读(r, Read):允许查看文件内容或列出目录内容。
- 写(w, Write):允许修改文件内容或在目录中创建、删除文件。
- 执行(x, Execute):允许运行文件(如脚本)或进入目录。
文件权限的表示通常为一个10位字符串,如:
-rwxr-xr--
- 第一个字符表示文件类型,
-
表示普通文件,d
表示目录。 - 接下来的三组字符分别表示所有者、组和其他用户的权限。
更改文件权限的命令
chmod
:用于更改文件或目录的权限。可以使用符号模式或八进制模式指定权限。
符号模式:
u
表示所有者(User)g
表示组(Group)o
表示其他用户(Others)a
表示所有人(All)
操作符:
+
添加权限-
移除权限=
设置精确权限
例如:
chmod u+rwx filename chmod g+rx filename chmod o-w filename
八进制模式:每种权限对应一个数字,r
=4,w
=2,x
=1。组合这些值可以表示权限。
例如:
chmod 755 filename
这里755
表示所有者有rwx
权限(4+2+1=7),组和其他用户有rx
权限(4+1=5)。
更改文件所有者的命令
chown
:用于更改文件或目录的所有者和组。
sudo chown owner:group filename
例如,将文件filename
的所有者改为john
,组改为developers
:
sudo chown john:developers filename
chgrp
:用于更改文件或目录的组。
sudo chgrp groupname filename
例如,将文件filename
的组改为developers
:
sudo chgrp developers filename
设置与撤销SUID、SGID和Sticky Bit
- SUID(Set User ID):当一个文件设置了SUID位(通常是可执行文件),普通用户运行该文件时将获得文件所有者的权限。通常用于需要提升权限的系统程序。
chmod u+s filename
例如:
chmod 4755 /usr/bin/passwd
- SGID(Set Group ID):当一个文件设置了SGID位时,执行该文件的用户将临时获得文件所属组的权限。对于目录,SGID位保证该目录中创建的所有文件和目录将继承其所属组。
chmod g+s directory_name
- Sticky Bit:Sticky Bit通常用于目录,当目录设置了Sticky Bit时,只有文件的所有者才能删除或移动该目录中的文件,即使其他用户对目录有写权限。
chmod +t directory_name
例如:
chmod 1777 /tmp
2.3 特殊权限与ACL
访问控制列表(ACL)的介绍与使用
在Linux系统中,传统的权限机制(rwx
)只适用于用户、组和其他用户,但在更复杂的场景下可能不够灵活。访问控制列表(ACL)允许更细粒度地控制文件或目录的访问权限,针对单个用户或组设置特定的权限。
- 查看ACL:使用
getfacl
命令查看文件或目录的ACL。
getfacl filename
- 设置ACL:使用
setfacl
命令设置ACL。
setfacl -m u:username:permissions filename
例如,给用户john
赋予读取权限:
setfacl -m u:john:r-- filename
- 移除ACL:
setfacl -x u:username filename
例如,移除用户john
的ACL:
setfacl -x u:john filename
- 默认ACL:可以为目录设置默认ACL,以便在该目录中新创建的文件或子目录自动继承这些权限。
setfacl -d -m u:username:permissions directory_name
使用ACL的注意事项
ACL是一个强大的权限管理工具,但在使用时需要注意以下几点:
- 兼容性:并非所有文件系统都支持ACL,使用前请确认文件系统是否启用ACL支持。
- 复杂性:ACL提供了灵活的权限控制,但也增加了管理的复杂性。建议仅在需要细粒度控制时使用。
- 与传统权限的结合:ACL不会完全替代传统的
rwx
权限,两者会同时生效。某些情况下,需要同时配置两者以确保权限设置的正确性。
2.4 进阶用户管理技巧
限制用户资源的/etc/security/limits.conf
Linux系统允许通过/etc/security/limits.conf
文件来限制用户或组的系统资源使用,如最大进程数、最大文件大小等。该文件使用以下格式:
<domain> <type> <item> <value>
<domain>
:可以是用户名、组名或*
(所有用户)。<type>
:soft
或hard
,分别表示软限制和硬限制。<item>
:表示受限制的资源,如nofile
(最大文件数)和nproc
(最大进程数)。<value>
:设置的具体数值。
例如,限制用户john
的最大进程数为100:
john hard nproc 100
使用sudo
提升权限
sudo
命令允许普通用户在执行特定命令时临时获得超级用户权限。sudo
的权限配置通过/etc/sudoers
文件进行管理。
- 添加用户到
sudo
组:
sudo usermod -aG sudo username
例如,将john
添加到sudo
组:
sudo usermod -aG sudo john
- 编辑
/etc/sudoers
文件:
sudo visudo
在此文件中,可以为特定用户或组配置sudo
权限。例如,允许john
在不输入密码的情况下执行所有命令:
john ALL=(ALL) NOPASSWD: ALL