文章目录
chmod
chmod (change mode) 是 Unix 和类 Unix 操作系统中用于改变文件或目录权限的命令。文件和目录的权限决定了哪些用户可以读取、写入或执行特定的文件和目录。
在 Unix-like 系统中,文件和目录的权限由三种类型的用户定义:文件所有者(u),组(g)成员,以及其他(o)用户。每种类型的用户都能拥有三种权限:
- 读取权限(read, r):允许用户查看文件内容或目录列表。
- 写入权限(write, w):允许用户修改文件内容或在目录中创建/删除文件。
- 执行权限(execute, x):允许用户运行程序或脚本,或者进入目录。
基本用法
chmod 命令通常以两种方式使用:符号模式(symbolic mode)和数值模式(numeric mode,也称为八进制或绝对模式)。
符号模式:
chmod [ugoa][+-=][rwx] file...
u, g, o, a 分别代表用户(所有者)、组、其他用户和所有用户。
+, -, = 分别代表添加、移除或设置指定的权限。
r, w, x 分别代表读取、写入和执行权限。
数值模式:
chmod [mode] file...
mode 是一个由三个数字组成的八进制数,每个数字分别代表文件所有者、组成员以及其他用户的权限。
每个数字是以下权限值的和:
4 表示读取(r)
2 表示写入(w)
1 表示执行(x)
0 表示没有权限
例如,权限组 rwx 可以表示为 7 (4 + 2 + 1),rw- 表示为 6 (4 + 2),r-x 为 5 (4 + 0 + 1),依此类推。
示例
- 修改文件 file.txt 权限,以便所有者有读写权限,组有只读权限,其他用户无任何权限:
chmod 640 file.txt
- 给予所有者执行权限而不改变其他权限:
chmod u+x file.txt
- 移除组和其他用户的所有权限:
chmod go= file.txt
- 将权限设置为所有用户都可以读取和执行(常用于脚本文件):
chmod a+rx file.txt
- 使用数值模式设置相同的权限:
chmod 755 file.txt
注意事项
只有文件的所有者或者具有管理员权限的用户才能更改文件的权限。
使用 chmod 修改目录权限时,“执行”权限意味着能够进入该目录。
chmod 命令的 -R 选项可以递归地更改文件夹及其所有子文件和子目录的权限。
掌握 chmod 及其权限设置非常重要,因为不当的文件权限可能导致安全风险,比如无关用户可能会读取或更改敏感数据。通过合理设置权限,可以保护系统免受未授权访问。
chown
chown (change owner) 是 Unix 和类 Unix 系统中的一个命令,用于更改文件或目录的所有者和/或组。这个工具允许系统管理员调整文件和目录所属的用户和组,这是文件系统权限的一个重要方面。
权限系统确保正确的用户和组对文件和目录具有访问权。chown 命令通常由具有管理员权限的用户(如 root)执行,因为更改文件的所有者可能会影响到文件的安全性。
基本用法
chown [选项] [所有者][:[组]] 文件...
所有者 可以是系统上的有效用户名或用户ID(UID)。
组 (可选)可以是系统上的有效群组名或群组ID(GID)。
文件 指定了要更改所有者的文件或目录名。
如果要更改文件的所有者和组,你需要用冒号 : 将它们分隔开来。如果只提供了所有者,那么只有所有者会被更改。如果所有者后面跟着一个冒号但没有指定组名,那么文件的组会被更改为所有者的登录组。
常用选项
-R:递归更改指定目录及其下的所有文件和子目录的所有者。
–from=当前所有者:当前组:只有当文件的当前所有者和组匹配指定的值时,才会更改所有者和/或组。
示例
- 将文件 example.txt 的所有权更改为用户 bob:
chown bob example.txt
- 将目录 /data 及其子目录和文件的所有权更改为用户 alice 和组 users:
chown -R alice:users /data
- 仅更改文件所有者为 lucy,不更改组:
chown lucy: example.txt
- 仅更改文件的组为 staff,
chown :staff example.txt
- 仅当文件 report.txt 的当前所有者是 sam,且组是 admin 时,更改所有者为 tom:
chown --from=sam:admin tom report.txt
注意事项
只有文件的当前所有者或者具有管理员权限的用户才能执行 chown 命令。
在某些系统上,非 root 用户可能无法将文件的所有权更改为其他用户。
在更改文件所有者时要特别谨慎,因为错误的所有者可能会导致权限问题或安全风险。
改变目录的所有者通常会影响对目录内部文件的访问权限。
了解并掌握 chown 的使用是进行系统管理和维护的一个重要部分,且通常与 chmod 权限更改命令一起使用,以确保系统的文件和目录具有合适的权限和所有权设置。
chgrp
chgrp (change group) 是 Unix 和类 Unix 系统中用于更改文件或目录的群组所有权的命令。通过该命令,可将文件或目录的所属组 (group) 改变为另一个组。这在您想要共享文件给特定的用户组时非常有用。
与 chown 类似,chgrp 可以增强系统的安全性和组织性,因为您可以根据组权限设定访问控制,这样就只允许特定用户组的成员访问相关文件和目录。
基本用法
chgrp [选项] 组 文件...
组 可以是群组名或群组ID(GID)。
文件 指定了要更改群组所属的文件或目录名列表。
常用选项
-R:递归地更改指定目录及其下的所有文件和子目录的群组。
–reference=参考文件:将文件或目录群组更改为匹配参考文件的群组。
示例
- 将文件 sample.txt 的群组更改为 staff:
chgrp staff sample.txt
- 将目录 /data 及其下所有文件和子目录的群组递归地更改为 developers:
chgrp -R developers /data
- 将 log.txt 的群组改为与另一个文件 config.txt 相同的群组:
chgrp --reference=config.txt log.txt
注意事项
通常只有文件的所有者或具有管理员权限的用户(如 root)才能改变文件的群组。
如果用户不是目标群组的成员,则可能无法更改文件的群组,除非该用户具有管理员权限。
递归更改大量文件和目录的群组时要注意,因为这可能会导致意外的权限更改,尤其是当组内用户的权限有明显差异时。
chgrp 命令通过提供对文件和目录群组所属的管理,为系统安全和资源共享提供了灵活性。在诸如文件服务器、共同工作项目或资源共享等环境中,合适地使用 chgrp 可以帮助维护有效的访问控制策略。
useradd
useradd 是 Unix 和类 Unix 系统中用于添加新用户账户的命令。系统管理员使用 useradd 来创建新的用户账户,并且能够同时设置账户的各种初始属性,例如用户的主目录、登录shell和用户组等。通过使用 useradd,系统管理员可以确保新用户拥有适当的访问级别和用户环境配置。
在不同的系统中,useradd 命令的具体实现可能略有不同,但基本功能通常相同。本介绍基于常见的 Linux 系统。
基本用法
useradd [选项] 用户名
选项:命令行选项用于配置新建用户的各种设置。
用户名:所要创建的新用户的名字。
常用选项
-d, --home HOME_DIR:指定新用户的主目录,默认为 /home/username。
-m, --create-home:如果指定的主目录不存在,则创建它。
-s, --shell SHELL:为新用户指定登录shell,如 /bin/bash。
-g, --gid GROUP:指定新用户的初始登录组。可以是组名或组号。
-G, --groups GROUPS:以列表形式指定新用户的附加组,用逗号分隔。
-u, --uid UID:为新账户指定用户ID(UID)。
-e, --expiredate EXPIRE_DATE:指定账户的过期日期,格式通常为 YYYY-MM-DD。
-p, --password PASSWORD:设置用户账户的初始密码。
-c, --comment COMMENT:添加关于用户的信息,通常包括全名、电话、地址等。
示例
- 创建一个名为 john 的新用户:
useradd john
- 创建一个名为 jane 的新用户,并指定主目录和shell:
useradd -d /home/jane -s /bin/bash jane
- 同时创建主目录,并设置用户 jake 的UID和初始组:
useradd -u 1001 -g users -m jake
- 创建用户 linda 并指定属于额外的几个组:
useradd -G wheel,developers -m linda
注意事项
useradd 命令通常需要超级用户权限来执行,因为它涉及修改系统账户文件,如 /etc/passwd、/etc/shadow 和 /etc/group。
设置用户密码时,推荐使用 passwd 命令来设置或更改密码,因为它会自动加密密码。如果必须使用 useradd 设置密码,请确保它是加密的。
添加用户后,可能还需要执行其他步骤,如设置用户能够与其他用户分享文件的权限,或者配置用户环境变量等。
useradd 只是用于创建用户账户的基本命令,对新用户的进一步配置通常需要用到其他命令(如 passwd、usermod、chage)和编辑相关配置文件。了解 useradd 的选项和用法可以帮助系统管理员在管理用户时提供更高效和安全的操作。
groupadd
groupadd 是 Unix 和类 Unix 系统中用于创建新用户组的命令。用户组是一种安排,让系统管理员可以轻松地管理一组用户的权限。例如,如果一组用户需要对某些资源的访问权限,那么将这些用户分配到同一用户组中,然后给予该组相应的权限就很方便。
基本用法
groupadd [选项] 群组名
选项:命令行选项用于配置新建群组的各种设置。
群组名:是准备创建的新用户组的名称。
常用选项
-g,–gid GID:创建群组时手动指定群组ID(GID)。如果不使用此选项,新的 GID 将自动选择。
-o:在与现有群组ID冲突时,仍允许创建具有指定 GID 的新群组(仅当与 -g 选项一起使用时)。
-r:创建系统群组。系统群组通常用于系统账户而非登录用户。
示例
- 创建一个名叫 editors 的新群组:
groupadd editors
- 创建一个新群组,同时指定 GID 为 1200:
groupadd -g 1200 developers
注意事项
groupadd 命令通常需要超级用户权限来执行,因为它同样涉及修改系统文件,例如 /etc/group 和有时 /etc/gshadow。
在大多数系统中,用户组名字符数有限制,通常不能超过32个字符。
添加用户到群组通常是通过 usermod 或 gpasswd 命令完成。
若指定的 GID 已存在,且未使用 -o 选项,groupadd 命令将会失败。
系统管理员应当合理规划用户组,避免过于复杂的用户组设置,以便更好地管理权限和资源。
groupadd 是 Unix 和 Unix-like 系统用户和群组管理工具的核心部分,掌握其用法可以帮助系统管理员更有效地管理系统用户的权限以及资源访问。
passwd
passwd 命令用于 Unix 和类 Unix 系统中,它主要用于更改用户的密码。该命令可供用户更改自己的登录密码,同时也允许系统管理员更改任何用户的密码。此外,passwd 可以设定账户密码策略,例如密码过期时间和密码复杂度要求。
基本用法
- 普通用户更改自己的密码:
passwd
- 系统管理员(root)更改其他用户的密码:
passwd 用户名
常用选项
–stdin:允许通过标准输入改变密码(不是所有 Unix/Linux 发行版都支持此选项)。
-l,–lock:锁定用户账户,禁止用户登录。
-u,–unlock:解锁用户账户,允许用户登录。
-d,–delete:删除用户密码,使账户无密码。
-e,–expire:立即使用户密码过期,强制用户在下次登录时更改密码。
-x,–maxdays MAX_DAYS:设置密码的最长使用期限。
-n,–mindays MIN_DAYS:设置修改密码的最小间隔天数。
-w,–warndays WARN_DAYS:设置密码过期前开始提醒用户的天数。
示例
- 假设您是普通用户并想更改自己的密码,可以简单地执行:
passwd
然后系统会提示您依次输入旧密码和新密码。
- 如果您是系统管理员并想要为用户 john 设置新密码,您可以执行:
passwd john
并按提示输入新密码。
- 锁定用户 jane 的账户,防止其登录:
passwd -l jane
解锁用户 jane 的账户,允许其登录:
passwd -u jane
- 设置用户 mike 的密码,使其在 90 天后过期:
passwd -x 90 mike
安全性
当您使用 passwd 更改密码时,新密码通常会经过哈希处理后存储在 /etc/shadow 文件中(在一些 Unix 系统中可能不同)。由于 /etc/passwd 文件曾被用来存储加密过的用户密码,而此文件对所有用户可读,因此现代系统采用 /etc/shadow 文件以提升安全性,该文件仅对拥有正确权限的用户可见。
注意事项
passwd 修改密码时会遵循系统的密码策略。如果您的密码不够强大,可能会被系统拒绝。
非 root 用户仅能更改自己的密码。
更改其他用户密码需要 root 权限。
passwd 是进行系统安全管理的关键工具之一。保持积极的密码管理政策并鼓励用户定期更新密码是维持系统安全的一个重要方面。
参考资料
在线文档和手册
- Linux 用户管理手册
通过 man useradd, man usermod, man passwd, man groupadd 等命令来获取命令使用手册。 - Linux 权限管理手册
使用 man chmod, man chown, man chgrp 等命令对权限管理命令获取帮助手册。 - GNU Coreutils 文档
https://www.gnu.org/software/coreutils/manual/coreutils.html
包含了GNU 版本的权限和用户管理工具的详细信息。
图书
-
“UNIX and Linux System Administration Handbook” by Evi Nemeth, Garth Snyder, Trent R. Hein, and Ben Whaley
这本书被认为是 Unix 和 Linux 系统管理的经典著作,它详细讲解了包括用户管理和权限设置在内的众多主题。 -
“Linux Administration: A Beginner’s Guide” by Wale Soyinka
这本指南适用于初学者,并涉及了系统安装、配置、更新、监控和用户管理的基础内容。 -
“How Linux Works: What Every Superuser Should Know” by Brian Ward
此书提供了 Linux 系统的深入分析,包括文件系统管理、用户权限等关键主题。
在线教程和指南
-
DigitalOcean 社区教程
https://www.digitalocean.com/community
提供了一系列关于权限和用户管理的详细教程,适用于不同层次的用户。
Linuxize -
https://linuxize.com/
包含许多关于 Linux 用户和权限管理的教程和文章。 -
Tecmint
https://www.tecmint.com/
这个网站包含许多指南和教程,覆盖了 Linux 权限、用户账户创建和管理等方面。
论坛和社区
- Stack Overflow
在 Stack Overflow https://stackoverflow.com/ 上搜索和学习社区提供的关于用户和权限管理的答案和解决方案。 - Unix & Linux Stack Exchange
定位于 Unix 和 Linux 用户的问题和答案:https://unix.stackexchange.com/ - Reddit 的 Linux 社群
Reddit 上的 Linux 用户社区是交流经验和获取建议的好地方:https://www.reddit.com/r/linux/