Linux 账号和权限管理

目录

一、管理用户和组账号

1.1 用户和组账号概述

1.2 用户账号文件

1.3 用户账号管理

1.4 组账号文件

1.5 组账号管理

1.6 查询账号信息

二、管理目录和文件的属性

2.1 文件/目录的权限和归属

2.2 查看目录或文件的属性

2.3 设置目录或文件的权限(chmod)

2.4 设置目录或文件的归属(chown)

三、总结

3.1 知识梳理

3.2 本章结构


一、管理用户和组账号

1.1 用户和组账号概述

1.1.1 Linux基于用户身份对资源访问进行控制

在Linux系统中,每个文件和目录都与一个用户账号和一个组账号相关联。系统使用用户ID(UID)和组ID(GID)来管理访问权限。用户权限分为三类:所有者权限、组权限和其他用户权限。

1.1.2 用户账号

  • 超级用户(Root用户):超级用户是系统中拥有最高权限的用户,具有对系统的完全控制权。可以访问和修改系统中的所有文件和设置,执行任何命令。在需要进行系统级别的操作(如安装软件、修改系统配置等)时使用。由于其权限极高,建议避免长期使用,使用时要小心,以防止意外更改或安全问题。

  • 普通用户(一般用户):普通用户是系统中常规用户,权限受限于自己的文件和目录。只能访问和修改自己拥有的文件和目录,不能修改系统文件或进行系统级别的操作。适用于日常操作,如文档编辑、运行应用程序等。由于权限有限,相对安全,但仍需注意账户安全,避免恶意软件或不安全的操作。

  • 程序用户(系统用户):程序用户是系统为了运行某些服务或应用程序而创建的用户账户。通常具有运行特定程序所需的最低权限,不允许进行其他系统操作。用来隔离服务和程序,以提高安全性和管理便利性。程序用户的权限非常有限,有助于保护系统不受程序漏洞的影响。

1.1.3 组账号

  • 基本组(私有组)  
  • 附加组(公共组)

1.1.4 UID和GID

  • UID(User IDentity,用户标识号) 
  • GID(Group IDentify,组标识号)

root用户的UID的固定值为0、root组帐号的GID号为固定值0 1~499的UID、GID默认保留给程序用户使用,普通用户/组使用的UID、GID号在500~60000之间

1.2 用户账号文件

1.2.1 用户账号文件 /etc/passwd

# 查看前两行文件内容
[root@master ~]# head -2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

# 查看最后一行文件内容
[root@master ~]# tail -1 /etc/passwd
test:x:1001:100::/home/test:/bin/bash

/etc/passwd 文件是Linux系统中用于存储用户账户信息的关键文件。每一行代表一个用户账户的详细信息,文件的格式和字段定义如下:

1.2.1.1 /etc/passwd 文件结构

/etc/passwd 文件的每一行包含以下字段,用冒号(:)分隔

1.2.1.2 /etc/passwd 字段解释
  • 字段1-用户名(username):这是用户的登录名称。它是系统中唯一的标识符,用于登录和识别用户。
  • 字段2-密码(password):这是用户账户的加密密码。在早期版本的Linux中,这里存储的是加密密码,但现在通常会显示为一个占位符(如x*),实际密码信息存储在 /etc/shadow 文件中,以增强安全性。
  • 字段3-用户ID(UID):这是一个唯一的数字标识符,用于系统区分不同的用户。UID为0的用户是超级用户(root),其他UID为普通用户。
  • 字段4-组ID(GID):这是用户所属的主要用户组的唯一标识符。每个用户都可以属于一个主要组,GID对应于 /etc/group 文件中的组条目。
  • 字段5-用户信息(GECOS):这一字段通常用于存储用户的详细信息,如全名、电话号码、办公室位置等。这一字段的内容可以是任何文本,但通常用于提供用户的描述性信息。
  • 字段6-主目录(home_directory):这是用户登录时默认的工作目录。用户的个人文件和配置通常存储在这个目录下。
  • 字段7-默认Shell(shell):这是用户登录时默认启动的命令行解释器或Shell。它指定了用户登录后的默认环境。

1.2.2 用户账号文件/etc/shadow

[root@master ~]# head -2 /etc/shadow
root:$6$hIoNX7dERAxlj0ft$PI8rn6iEnHJWlLoooU5KVXUXLNqxwS6I5uqDLU1ueQrMt0vF9gmf7DQVprn/SDehA8w8EiBvJ1GnRNsdxI4HQ/::0:99999:7:::bin:*:18353:0:99999:7:::
[root@master ~]# tail -1 /etc/shadow
test:!!:19976:0:99999:7:::

/etc/shadow 文件是Linux系统中用于存储用户密码信息的文件,它主要用于增强系统的安全性。与 /etc/passwd 文件不同,/etc/shadow 文件专门用于存储加密后的密码和与密码相关的其他信息。这个文件通常只有 root 用户可以访问,以防止普通用户查看密码信息。

1.2.2.1 /etc/shadow 文件结构

/etc/shadow 文件的每一行包含以下字段,用冒号(:)分隔

1.2.2.2 /etc/shadow 字段解释
  • 字段1-用户名(username):用户的登录名称,与 /etc/passwd 文件中的用户名字段对应。
  • 字段2-加密密码(encrypted_password):用户密码的加密值。如果该字段为空(* 或 !),则表示账户被锁定或者禁用。
  • 字段3-上次密码更改时间(last_change):自1970年1月1日以来的天数,表示用户最后一次更改密码的日期。这个字段用于控制密码的更改周期。
  • 字段4-最小密码年龄(min_age):密码在更改后必须保持有效的最小天数。用户在这段时间内不能更改密码。
  • 字段5-最大密码年龄(max_age):密码的最大有效天数,超过这个期限后,用户必须更改密码。这个字段用于强制定期更改密码。
  • 字段6-密码过期警告期(warn_period):在密码过期之前,系统会警告用户的天数。用户在这个警告期内可以更改密码,而不会被立即锁定。
  • 字段7-账户失效期(inactive_period):在密码过期之后,账户将被禁用的天数。超过这个期限,账户将被锁定,用户无法再登录。
  • 字段8-账户过期日期(expire_date):自1970年1月1日以来的天数,表示用户账户的过期日期。过了这个日期,账户将被禁用。
  • 字段9-保留字段(未使用)

1.3 用户账号管理

1.3.1 添加用户账号(useradd)

useradd命令:用于Linux中创建的新的系统用户。useradd 可用来建立用户帐号。帐号建好之后,再用 passwd 设定帐号的密码.而可用 userdel 删除帐号。使用 useradd 指令所建立的帐号,实际上是保存在 /etc/passwd 文本文件中。

命令格式:useradd [选项] 用户名

常用命令选项:

  • -u:指定 UID 标记号
  • -d:指定宿主目录,缺省为 /home/ 用户名
  • -e:指定帐号失效时间
  • -g:指定用户的基本组名(或UID号)
  • -G:指定用户的附加组名(或GID号)
  • -M:不为用户建立并初始化宿主目录
  • -s:指定用户的登录 Shell
# 添加一个 zw01 用户
[root@master ~]# useradd zw01

# 查看用户账号文件中用户是否添加成功
[root@master ~]# tail -1 /etc/passwd
zw01:x:1002:1002::/home/zw01:/bin/bash

# 添加用户的同时,会创建用户目录
[root@master home]# ls
test  zw01

创建一个考试测试用的帐号exam01,指定属于users组,该帐号于2009-07-30失效

[root@master ~]# useradd -g users -e 2009-07-30 exam01
[root@master ~]# tail -1 /etc/passwd
exam01:x:1003:100::/home/exam01:/bin/bash

1.3.2 设置/更改用户口令(passwd)

passwd命令:用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。

命令格式:passwd [选项] 用户名

常用命令选项:

  • passwd(不带选项):更改当前用户的密码
  • passwd 用户名:更改指定用户的密码(需要root权限)
  • -d:删除用户的密码,使用户只能通过其他认证方式(如SSH密钥)登录
  • -l:锁定用户的密码(用户不能使用密码登录,但其他认证方式仍然有效)
  • -S:查看用户帐号的状态(是否被锁定) 
  • -u:解锁被锁定的用户密码
  • -e: 使用户的密码立即过期,迫使用户在下次登录时更改密码
  • -i: 设置密码过期的宽限期(即在密码过期后用户能再登录多少天)
# 先从用户账号文件中,检索一下 zw01 用户的密码信息,发现 zw01 的密码为空
[root@master ~]# grep ^zw01 /etc/shadow
zw01::19977:0:99999:7:::

# 为 zw01 用户设置一个密码
[root@master ~]# passwd zw01 
Changing password for user zw01.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.

# 再次检索 zw01 用户的密码信息,发现密码已经被创建了
[root@master ~]# grep ^zw01 /etc/shadow
zw01:$6$RjS8uYSa$EJB6qV1gJSsYh5d2B2VkOdBNk2GPYz6B/mIympOQEeER5aDsrmgxWOoVli2P5kBqCQzIJVLdXtnbqYnwKBC43.:19977:0:99999:7:::

# 清空用户 zw01 的密码
[root@master ~]# passwd -d zw01 
Removing password for user zw01.
passwd: Success

# 再次检索 zw01 用户的密码信息,发现密码已经被清空了
[root@master ~]# grep ^zw01 /etc/shadow
zw01::19977:0:99999:7:::

1.3.3 修改用户账号的属性(usermod)

usermod命令:用于修改用户的基本信息。usermod 命令不允许你改变正在线上的使用者帐号名称。当 usermod 命令用来改变 user id,必须确认这名 user 没在电脑上执行任何程序。你需手动更改使用者的 crontab 档。也需手动更改使用者的 at 工作档。采用 NIS server 须在server上更动相关的 NIS 设定。

命令格式:usermod [选项] 用户名

常用命令选项:

  • -l:更改用户名(需要使用 -d 选项更改用户的家目录以匹配新的用户名)
  • -L:锁定用户账户(将用户的密码锁定,用户无法通过密码登录)
  • -U:解锁用户账户(解除锁定用户密码)
  • 以下选项与useradd命令中的含义相同:-u、-d、-e、-g、-G、-s
# 将 zw01 用户名改为 zw02,注:usermod -l 新用户名 旧用户名
[root@master ~]# usermod -l zw02 zw01

# 查看用户账号文件中,账号名已修改
[root@master ~]# tail -1 /etc/passwd
zw02:x:1002:1002::/home/zw01:/bin/bash

1.3.4 删除用户账号(userdel)

userdel命令:用于删除给定的用户,以及与用户相关的文件。若不加选项,则仅删除用户帐号,而不删除相关文件。

命令格式:userdel [-r] 用户名

常用命令选项:

  • -r:使用 userdel 命令需要指定帐号名称作为参数,添加 “-r” 选项时可以将该用户的宿主目录一并删除。
# 添加一个新用户
[root@master ~]# useradd stu01

# 查看家目录下的用户目录,是存在的
[root@master ~]# ls -ld /home/stu01/
drwx------. 3 stu01 stu01 78 Sep 11 18:58 /home/stu01/

# 添加 -r 选项,会将该用户的宿主目录一并删除
[root@master ~]# userdel -r stu01

# 再次查看用户目录,发现已经不存在了
[root@master ~]# ls -ld /home/stu01/
ls: cannot access /home/stu01/: No such file or directory

1.3.5 用户账号的初始配置文件

1.3.5.1 文件来源

用户首次登录时,会使用 /etc/skel 目录中的文件创建初始配置文件。

主要的用户初始配置文件
  • ~/.bash_profile:当用户登录时,该文件仅仅执行一次!每个用户都可使用该文件输入专用于自己使用的shell信息,默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
  • ~/.bashrc:当登录时以及每次打开新的shell时,该该文件被读取.该文件包含专用于你的bash shell的bash信息,
  • ~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.  
  • /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.
  • /etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.

另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.  

~/.bash_profile 是交互式、login 方式进入 bash 运行的,~/.bashrc 是交互式 non-login 方式进入 bash 运行的,通常二者设置大致相同,所以通常前者会调用后者。

1.4 组账号文件

1.4.1 组账号文件 /etc/group

# 查看文件前两行内容
[root@master ~]# head -2 /etc/group
root:x:0:
bin:x:1:

# 查看文件最后一行内容
[root@master ~]# tail -1 /etc/group
zw01:x:1004:

/etc/group 文件是Linux系统中用于存储系统中所有用户组的信息。

1.4.1.1 /etc/group 文件结构

/etc/group 每一行代表一个用户组,字段之间用冒号(:)分隔。

1.4.1.2 字段解释
  • 字段1-组名 (Group Name):用户组的名称,例如 developers
  • 字段2-组密码占位符 (Group Password Placeholder):通常为空或为x,表示系统不使用组密码。组密码通常不常用。
  • 字段3-组ID (GID):唯一标识用户组的数字ID,例如 1002。系统中每个组都有一个唯一的GID。
  • 字段4-组成员 (Group Members):属于该组的用户列表,用户用逗号分隔。例如 john,alice 表示 john 和 alice 是该组的成员。

1.4.2 组账号文件 /etc/gshadow

# 查看文件前两行内容
[root@master ~]# head -2 /etc/gshadow
root:::
bin:::

# 查看文件最后一行内容
[root@master ~]# tail -1 /etc/gshadow
zw01:!::

 /etc/gshadow 文件是Linux系统中用于存储有关组的敏感信息,如组密码和组成员。

1.4.2.1 /etc/gshadow 文件结构

/etc/gshadow 每一行包含一个用户组的密码信息,字段之间用冒号(:)分隔。

1.4.2.2 字段解释
  • 字段1-组名 (Group Name):用户组的名称,例如 developers
  • 字段2-组密码 (Group Password):组密码的加密形式,通常为空。组密码不常用,但如果设置,组密码会在此显示。
  • 字段3-组管理员 (Group Administrators):具有管理员权限的用户列表,用逗号分隔。管理员可以管理该组的成员。
  • 字段4-组成员 (Group Members):属于该组的普通成员,用逗号分隔。例如 john,alice

1.5 组账号管理

1.5.1 添加组账号(groupadd)

groupadd命令:用于创建一个新的工作组,新工作组的信息将被添加到系统文件中。

命令格式:groupadd [-g GID] 组账号名

常用命令:

  • -g:指定组名或组ID (GID)。
# 添加一个新组账号 market ,并指定 GID 为 10012
[root@master ~]# groupadd -g 10012 market

# 查看刚刚添加的组账号信息
[root@master ~]# tail -1 /etc/group
market:x:10012:

1.5.2 添加删除组成员(gpasswd)

gpasswd命令:是Linux下工作组文件/etc/group/etc/gshadow管理工具。

命令格式:gpasswd [选项] 用户名 组账号名

常用命令选项:

  • -a:向组内添加一个用户
  • -d:从组内删除一个用户成员
  • -M:定义组成员列表,以逗号分隔
# 向 market 组中添加 root 用户
[root@master ~]# gpasswd -a root market
Adding user root to group market

# 查看 market 组信息,发现 root 用户已经添加进去了
[root@master ~]# grep market /etc/group
market:x:10012:root


# 移除 market 组中的 root 用户
[root@master ~]# gpasswd -d root market
Removing user root from group market

# 再次查看 market 组信息,发现 root 用户已经被移除了
[root@master ~]# grep market /etc/group
market:x:10012:

1.5.3 删除组账号(groupdel)

groupdel命令:用于删除指定的工作组,本命令要修改的系统文件包括 /ect/group 和 /ect/gshadow。若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。

命令格式:groupdel 组账号名

# 删除 market 组账号
[root@master ~]# groupdel market

# 查看组账号文件,发现 market 组账号已经不存在了
[root@master ~]# grep market /etc/group

1.6 查询账号信息

1.6.1 查询用户身份标识(id)

id命令:打印真实以及有效的用户和所在组的信息

命令格式:id [用户名]

# 默认查看当前用户身份信息
[root@master ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

# 查看指定用户身份信息
[root@master ~]# id exam01
uid=1003(exam01) gid=100(users) groups=100(users)

1.6.2 查询用户所属的组(groups)

groups命令:打印指定用户所在组的名称。

命令格式:groups [用户名]

# 默认查看当前用户所属的组
[root@master ~]# groups
root

# 查看指定用户所属的组
[root@master ~]# groups exam01
exam01 : users

1.6.3 查询用户账号的详细信息(finger)

finger命令:用于查找并显示用户信息。包括本地与远端主机的用户皆可,帐号名称没有大小写的差别。单独执行finger指令,它会显示本地主机现在所有的用户的登陆信息,包括帐号名称,真实姓名,登入终端机,闲置时间,登入时间以及地址和电话。

命令格式:finger [用户名]

# 需要注意,在 CentOS 系统中,默认是没有安装 finger 命令的,
# 下面是使用 kali 系统查看的
┌──(root㉿piloteer-101)-[~]
└─# finger     
Login     Name       Tty      Idle  Login Time   Office     Office Phone
root      root       tty7           Sep 11 21:58 (:0)
                                                                                                              
┌──(root㉿piloteer-101)-[~]
└─# finger root
Login: root                             Name: root
Directory: /root                        Shell: /usr/bin/zsh
On since Wed Sep 11 21:58 (CST) on tty7 from :0
   51 seconds idle
No mail.
No Plan.

1.6.4 查询已登录到主机的用户信息(users、w、who)

users 命令:打印当前主机所有登陆用户的名称。

命令格式:users

[root@master ~]# users
root root

w 命令:显示目前登入系统的用户信息。

命令格式:w

[root@master ~]# w
 21:55:32 up  9:03,  4 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     :0       :0               09:09   ?xdm?   7:49   0.83s /usr/libexec/gnome-ses
root     pts/2    :0               14:10    4.00s  0.88s  0.03s w

who 命令:显示当前所有登陆用户的信息。

命令格式:who

[root@master ~]# who
root     :0           2024-09-11 09:09 (:0)
root     pts/2        2024-09-11 14:10 (:0)

二、管理目录和文件的属性

2.1 文件/目录的权限和归属

2.1.1 访问权限

每种用户类别都有三种权限:

  • 读(Read, r):允许用户查看文件内容或列出目录中的文件。
  • 写(Write, w):允许用户修改文件内容或向目录中添加/删除文件。
  • 执行(Execute, x):允许用户执行文件或进入目录

2.1.2 归属(所有权)

Linux系统中的每个文件和目录都有三种类型的访问权限,分别对应三种用户类别:

  • 文件所有者(Owner):文件的创建者,默认拥有该文件。
  • 文件所属组(Group):文件的所属用户组。
  • 其他用户(Others):系统中除了文件所有者和所属组成员之外的所有用户。

2.2 查看目录或文件的属性

2.2.1 权限表示

文件和目录的权限通常以三组字符的形式表示,每组代表一种用户类别的权限。例如,对于一个文件,权限 -rw-r--r-- 表示:

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

2.2.2 权限数字表示

权限也可以用数字来表示,每组权限对应一个数字,每个权限的值如下:

  • 读(r):4
  • 写(w):2
  • 执行(x):1

这些数字可以相加来表示一组权限。例如,du)

这些数字可以相加来表示一组权限。例如,rwx(读、写、执行)的权限可以用数字7表示(4+2+1),r-x(读、执行)可以用数字5表示(4+1),---(无权限)可以用数字0表示。

# ls -l 查看文件/目录详细信息
[root@master ~]# ls -l work.log 
-rw-r--r--. 1 root root 0 Sep 11 23:07 work.log

2.3 设置目录或文件的权限(chmod)

chmod 命令:用来变更文件或目录的权限

命令格式:

  • chmod [ugoa] [+-=] [rwx] 文件/目录
    • u、g、o、a 分别表示 属主、属组、其他用户、所有用户
    • +、-、= 分别表示 增加、去除、设置权限
  • chmod nnn 文件/目录
    • nnn:3位八进制数

常用命令选项:

  • -R:递归修改指定目录下所有子项的权限
# 给属组添加写权限
[root@master ~]# chmod g+w work.log 

# 查看详细列表
[root@master ~]# ls -l work.log 
-rw-rw-r--. 1 root root 0 Sep 11 23:07 work.log

# 将 work.log 文件,所有用户的权限都添加上
[root@master ~]# chmod 777 work.log 

# 查看详细列表
[root@master ~]# ls -l work.log 
-rwxrwxrwx. 1 root root 0 Sep 11 23:07 work.log

# 将 data 目录下的所有文件权限设置为744
[root@master ~]# chmod 744 -R data

# 遍历查看 data 目录列表
[root@master ~]# ls -Rl data
data:
total 0
-rwxr--r--. 1 root root 0 Sep 11 23:13 1.txt
-rwxr--r--. 1 root root 0 Sep 11 23:13 2.txt

2.4 设置目录或文件的归属(chown)

chown命令:改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户D,用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。

命令格式:chown 属主:属组 文件/目录

常用命令选项:

  • -R:递归修改指定目录下所有文件、子目录的归属
# 查看 work.log 文件的详细信息,发现属主为 root 属组为 root
[root@master ~]# ls -l work.log
-rw-r--r--. 1 root root 0 Sep 12 09:22 work.log

# 更改属主为 exam01
[root@master ~]# chown exam01 work.log 

# 查看 work.log 文件的详细信息,发现属主更改为 exam01
[root@master ~]# ls -l work.log
-rw-r--r--. 1 exam01 root 0 Sep 12 09:22 work.log

# 更改属组为 zw01 
[root@master ~]# chown :zw01 work.log 

# 查看 work.log 文件的详细信息,发现属组更改为 zw01
[root@master ~]# ls -l work.log 
-rw-r--r--. 1 exam01 zw01 0 Sep 12 09:22 work.log

# 更改属主和属组分别为 root:root
[root@master ~]# chown root:root work.log 

# 查看 work.log 文件的详细信息,发现属主更改为 root 属组更改为 root
[root@master ~]# ls -l work.log 
-rw-r--r--. 1 root root 0 Sep 12 09:22 work.log

三、总结

3.1 知识梳理

  • 用户账号管理(useradd、passwd、usermod、userdel)
  • 组账号管理(groupadd、gpasswd、groupdel)
  • 用户账号文件与组账号文件 查询账号相关信息的命令(groups、id、finger、w)
  • 设置目录与文件权限(chmod)
  • 设置目录与文件归属(chown)

3.2 本章结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值