Linux账号组账号 和 文件权限管理

Linux账号/组账号和文件权限管理

用户账号和组账号概念

一. 用户账号(User Account)/ 管理用户账号

1.作用
  • 标识用户身份(如登录名、用户ID)。
  • 分配权限(通过文件/目录的所有权和访问权限)。
  • 隔离用户操作环境(每个用户有独立的家目录)。
2. 分类
  • 普通用户:由管理员创建,权限受限(默认 UID ≥ 1000)。
  • 系统用户(Service Accounts):供系统服务或进程使用(UID 1-999),无登录权限。
  • Root 用户(超级用户):UID=0,拥有最高权限。
3. 用户信息存储
  • /etc/passwd
    存储用户基本信息

  • 每行格式:
    用户名:密码占位符(x):UID:GID:描述:家目录:默认Shell
    示例:

    dufu:x:1000:1000::/home/dufu:/bin/bash
    
  • /etc/shadow (影子文件)
    存储加密密码及其他安全信息(仅 root 可读),

  • 每行格式:
    用户名 :加密密码:最后修改时间:密码最小有效期:密码最大有效期:警告期:失效宽限期:账号失效时间
    示例:

    dufu:$6$OVoBHlr995vVyxn/$Kj3uyWR9NpgQY6J2DctccO.j.kbD7DSdeWoiopPDNzqkLjc20XHUXsZjXHGQD9OBij6kS0w1TA7BCSABxI/hz1:20185:0:99999:7:::
    
4. 关键命令
  • 创建用户:useradd

    useradd    [选项]   用户名
    

    常用选项

    选项 说明
    **-u ,–uid ** 指定用户的唯一 ID(User ID),需为未被占用的整数(普通用户默认从 1000 开始)。
    -g , --gid GROUP 指定用户的主组(Primary Group),组名或 GID,该组需已存在。
    -G, --groups GROUP 指定用户的附加组(Secondary Groups),多个组用逗号分隔(无需提前创建,会自动处理)。
    -d, --home HOME_DIR 指定用户的主目录路径(默认 /home/用户名)。
    -s, --shell SHELL 指定用户登录后的默认 shell(如 /bin/bash/sbin/nologin)。
    -c, --comment COMMENT 添加用户注释(如全名、联系信息等),通常用引号包裹空格内容。
    -m, --create-home 自动创建用户主目录(默认不创建,建议加上此选项)。
    -r, --system 创建系统用户(无交互式登录权限,主目录默认不创建,UID 通常小于 1000)。
    -e, --expiredate YYYY-MM-DD 设置账户过期日期(如 2025-4-23,过期后无法登录)。
    -f, --inactive DAYS 设置密码过期后账户的非活跃天数(0 表示密码过期即锁定,-1 表示禁用此功能)。
    p, --password PASSWORD 直接设置加密后的密码(需使用 openssl passwd -1 生成密文,不建议明文存储)。
    -K, --key KEY=VALUE 修改默认配置文件(如 /etc/login.defs)中的参数(较少用,需谨慎)。

    示例:

    [root@localhost ~]# useradd -M -s /sbin/nologin -u 6666 libai  ###这里我们对libai用户创建时设置了
                                                                   ### —M不创建家目录 
                                                                   ### -s 不允洗登录系统
                                                                   ### -u 指定uid
    [root@localhost ~]# tail -1 /etc/passwd
    libai:x:6666:6666::/home/libai:/sbin/nologin
                                                           ###通过tail命令可以看我们对libai用户的设置是有效的
    
  • 修改用户:usermod

    usermod     [选项]   用户名
    

    常用选项

    选项 说明
    -u, --uid UID 修改用户的唯一 ID(需为未被占用的整数,修改后需同步文件所有权)。
    -g, --gid GROUP 修改用户的主组(Primary Group,组名或 GID,组需已存在)。
    -G, --groups GROUP 修改用户的附加组(Secondary Groups,覆盖原有附加组,多个组用逗号分隔)。 若需保留原有附加组,需添加 --append(如 -aG group)。
    -d, --home HOME_DIR 修改用户的主目录路径(需手动创建目录,默认不迁移文件,需配合 -m 迁移)。
    -m, --move-home -d 配合使用,将原有主目录内容迁移到新路径。
    -s, --shell SHELL 修改用户登录后的默认 shell(如 /bin/bash/sbin/nologin)。
    -c, --comment COMMENT 修改用户注释(如全名、联系信息,用引号包裹空格内容)。
    -l, --login NEW_LOGIN 修改用户名(原主目录和邮箱不会自动更名,需手动处理)。
    -e, --expiredate YYYY-MM-DD 设置账户过期日期(过期后无法登录,格式同 useradd)。
    -L, --lock 锁定用户账户(禁止登录,仅锁定密码,不影响已登录会话)。
    -U, --unlock 解锁用户账户(恢复登录权限)。
    -a, --append -G 配合,向附加组中添加组(不覆盖原有组)。
    -f, --inactive DAYS 修改密码过期后账户的非活跃天数(0 表示密码过期即锁定)。
    -p, --password PASSWORD 设置加密后的密码(需用 openssl passwd -1 生成密文,不建议明文)。

    示例 :

    [root@localhost home]# usermod -s /bin/bash -d /home/dufu -u 8888 libai     ###这里用usermod命令对用户基本信息进行了一些更改
    [root@localhost home]# tail -1 /etc/passwd                                  ### -s更改shell
    libai:x:8888:6666::/home/dufu:/bin/bash                                     ### -d指定用户家目录
             																	### -u指定用户的唯一uid
    

删除用户:userdel

userdel  [选项]  用户名

常用选项

选项 说明
-r 彻底删除用户:删除用户账户的同时,删除其主目录(/home/用户名)和邮件池(/var/mail/用户名)。
-f 强制删除:即使用户当前登录或有进程在运行,强制删除账户(需谨慎,可能导致服务异常)。
配合 -r 可强制删除正在使用的主目录。

示例 :

[root@localhost ~]# tail -1 /etc/passwd                   
dufu:x:1000:1000::/home/dufu:/bin/bash 											
[root@localhost ~]# userdel -r dufu 							### 这里使用了 -r 删除用户账户的同时,删除其主目录(家目录目录)
[root@localhost ~]# tail -1 /etc/passwd 
chrony:x:995:992::/var/lib/chrony:/sbin/nologin
  • 管理用户密码(修改,锁定,设置密码策略等):passwd

    passwd    [选项]    用户名
    

    常用选项

    选项 说明
    -l, --lock 锁定用户账户(禁止密码登录,但允许密钥登录或管理员解锁)。
    -u, --unlock 解锁已锁定的用户账户。
    -d, --delete 删除用户密码(允许无密码登录,危险操作,慎用)。
    -e, --expire 强制用户下次登录时修改密码(常用于密码过期或初始密码场景)。
    -S, --status 查看用户账户的密码状态(是否锁定、密码过期时间等)。
    –stdin 从标准输入读取密码(用于脚本或自动化工具,配合 echo 传递密码)。
    -f, --force 强制修改密码(绕过某些限制,如密码复杂度检查,需谨慎)。
    -n, --minimumdays 设置密码最短使用天数(即密码多少天内不可修改,默认 0)。
    -x, --maximumdays 设置密码最长使用天数(超过后必须修改,默认由 /etc/login.defs 定义)。
    -w, --warndays 密码过期前提前通知的天数(如提前 7 天提醒用户修改密码)。

    示例 :

    [root@localhost ~]# passwd -l dufu
    锁定用户 dufu 的密码 。
    passwd: 操作成功
    [root@localhost ~]# passwd -S dufu									###-l锁定用户密码
    dufu LK 2025-04-07 0 99999 7 -1 (密码已被锁定。)						### -u解锁用户密码
    [root@localhost ~]# passwd -u dufu									### -S 查看用户密码状态
    解锁用户 dufu 的密码。
    passwd: 操作成功
    [root@localhost ~]# passwd -S dufu
    dufu PS 2025-04-07 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
    
    • 查看用户信息:id usersw ,who, echo $USER

二、组账号(Group Account)/管理组账号

每创建一个用户都会默认创建一个(基本组)也就是gid ,gid和uid一样 但一个用户只能有且只有一个基本组但是可以有多个附加组

1. 作用
  • 简化权限管理:将用户分组,统一分配权限。
  • 每个用户至少属于一个主组(Primary Group),可加入多个附加组。
2. 组信息存储
  • /etc/group
    存储组信息,每行格式:
    组名:组密码占位符(x):GID:组成员列表
    示例:

    [root@localhost ~]# tail -1 /etc/group
    dufu:x:1000:
    
  • /etc/gshadow
    存储组密码和安全信息(仅 root 可读)。

    示例 :

    [root@localhost ~]# tail -1 /etc/gshadow
    dufu:!::
    
3. 关键命令
  • 创建组:groupadd

    groupadd   [选项]    组名
    

    常用选项

    选项 说明
    -g, --gid GID 指定组的唯一 GID(Group ID),需为未被占用的整数(普通组默认从 1000 开始,由 /etc/login.defs 定义)。
    -r, --system 创建系统组(GID 小于 1000,通常用于运行服务,如 ftpnobody)。
    -o, --non-unique 允许创建 GID 重复的组(通常不建议,GID 应唯一,仅特殊场景使用)。
    -f, --force 强制创建组:若组已存在则静默忽略错误;若与 -g 配合,可强制覆盖已有 GID(需谨慎)。

    示例 :

    [root@localhost ~]# groupadd -g 9999 test
    [root@localhost ~]# tail -1 /etc/group
    test:x:9999:
    
  • 修改组:groupmod

    `groupmod`  [选项]   组名
    

    常用选项

    选项 说明
    -n, --new-name NEW_NAME 修改组名(原组名必须存在,新组名需唯一)。
    -g, --gid GID 修改组的 GID(需为未被占用的整数,普通组默认 GID ≥ 1000)。
    -o, --non-unique 允许修改后的 GID 与其他组重复(极不推荐,可能导致权限混乱)。
    -f, --force 强制操作:若目标 GID 已被占用,覆盖已有组的 GID(危险,慎用)。

    示例 :

    [root@localhost ~]# tail -1 /etc/group
    test:x:9999:
    [root@localhost ~]# groupmod -g 8838  test   ###-g 修改组id
    [root@localhost ~]# tail -1 /etc/group
    test:x:8838:
    
  • 删除组:groupdel ### 不能删除正在被用户作为主组使用的组

    groupdel [选项] 组名

常用选项

选项 说明
无选项 直接删除组(若组是用户的附加组,或空组,可直接删除)。
-f, --force 强制删除(仅在部分场景生效,如系统组,需谨慎,可能导致服务异常)。

示例 :

[root@localhost ~]# tail -1 /etc/group
test:x:8838:
[root@localhost ~]# groupdel test                ###删除test组
[root@localhost ~]# tail -1 /etc/group
dufu:x:1000:
  • 管理组成员:gpasswd (添加用户到组)
gpasswd  [选项]   用户名   组名

常用选项

选项 说明
-a 用户名 将用户添加到组(作为附加组,保留原有成员)。
-d 用户名 将用户从组中移除(仅移除附加组关系,不影响主组)。
-A 用户名 1, 用户名 2 设置组管理员(允许这些用户使用 gpasswd 管理组,无需 sudo)。
-M 用户名列表 覆盖组的成员列表(用逗号分隔,清除原有成员,仅保留指定用户)。

示例 :

[root@localhost ~]# tail -1 /etc/group
test:x:8838:
[root@localhost ~]# gpasswd -a dufu test                   ### -a 将用户dufu添加到名为test的附加组
正在将用户“dufu”加入到“test”组中
[root@localhost ~]# tail -1 /etc/group
test:x:8838:dufu

文件权限管理

一、chmod:修改文件 / 目录权限

1. 核心概念
  • 权限对象:
    • 所有者(User, u):文件 / 目录的创建者或通过 chown 指定的用户。
    • 所属组(Group, g):文件 / 目录所属的用户组(存储在 /etc/group 中)。
    • 其他用户(Others, o):非所有者且非所属组的用户(a 代表所有用户,即 u+g+o)。
  • 权限类型:
    • 读(Read, r):允许查看文件内容或列出目录中的文件(对目录有效)。
    • 写(Write, w):允许修改文件内容或在目录中创建 / 删除文件(对目录有效)。
    • 执行(Execute, x):允许运行可执行文件或进入目录(对目录有效,即 cd 操作)。
2. 权限表示方法
  • 更改文件或目录权限chmod

    chmod    模式   [选项]  文件或目录名
    

    示例

    [root@localhost ~]# ll
    总计 4
    -rw-r--r--. 1 root root    0  4715:43 1.txt
    -rw-r--r--. 1 root root    0  4715:43 2.txt
    -rw-r--r--. 1 root root    0  4715:43 3.txt
    -rw-------. 1 root root 1086 202547日 anaconda-ks.cfg
    [root@localhost ~]# chmod u+x 1.txt    ### 给拥有者添加执行权限
    [root@localhost ~]# chmod go-rw 2.txt  ### 移除所属组和其他用户的读写权限
    [root@localhost ~]# chmod a=rw 3.txt  ### 所有用户都有读写权限
    [root@localhost ~]# ll
    总计 4
    -rwxr--r--. 1 root root    0  4715:43 1.txt
    -rw-------. 1 root root    0  4715:43 2.txt
    -rw-rw-rw-. 1 root root    0  4715:43 3.txt
    -rw-------. 1 root root 1086 202547日 anaconda-ks.cfg
    
    • u(所有者)、g(所属组)、o(其他用户)、a(所有用户)。

    • +(添加权限)、-(移除权限)、=(精确设置权限)。

  • 数字模式(Numeric Mode):

  • 解释:将权限转换为 八进制数字(每位代表 r/w/x,有权限为 1,无权限为 0):

    • r=4, w=2, x=1,组合后如 rwx=7, rw-=6, r-x=5

    chmod [数字] 文件名

    示例 :

    [root@localhost ~]# ll
    总计 4
    -rw-r--r--. 1 root root    0  4715:57 1.txt
    -rw-------. 1 root root 1086 202547日 anaconda-ks.cfg
    [root@localhost ~]# chmod 700 1.txt            ### 拥有者rwx(7) 所属主和其他用户 0 
    [root@localhost ~]# ll
    总计 4
    -rwx------. 1 root root    0  4715:57 1.txt
    -rw-------. 1 root root 1086 202547日 anaconda-ks.cfg
    
    chmod 755 directory  # 拥有者:rwx(7),所属组和其他用户:r-x(5)
    chmod 644 file.txt   # 拥有者:rw-(6),所属组和其他用户:r--(4)
    
常用选项
选项 说明
-R, --recursive 递归修改目录及其子文件 / 目录的权限(慎用,避免误操作)。
-v, --verbose 显示权限修改的详细信息。

示例 :

[root@localhost ~]# ll
总计 8
-rwx------. 1 root root    0  4715:57 1.txt
drwxr-xr-x. 3 root root 4096  4716:04 aaa
-rw-------. 1 root root 1086 202547日 anaconda-ks.cfg
[root@localhost ~]# chmod -R 700 aaa        ### -R递归 对当前目录和其下的子目录都进行同样的操作
[root@localhost ~]# ll
总计 8
-rwx------. 1 root root    0  4715:57 1.txt
drwx------. 3 root root 4096  4716:04 aaa
-rw-------. 1 root root 1086 202547日 anaconda-ks.cfg

二、chown:修改文件 / 目录的所有者和所属组

1. 核心概念
  • 所有者(User):文件 / 目录的拥有者,决定了基础权限(存储在 /etc/passwd 中)。
  • 所属组(Group):文件 / 目录关联的用户组,用于批量权限管理(存储在 /etc/group 中)。
2. 命令格式
chown [选项] [拥有者][:所属组] 文件名/目录名

常用选项

选项 说明
-R, --recursive 递归修改目录及其子文件 / 目录的所有者和所属组(慎用)。
-h, --no-dereference 仅修改符号链接本身的所有者(而非链接指向的文件)。
-v, --verbose 显示修改的详细信息。
–reference = 文件 复制参考文件的所有者和所属组到目标文件。

示例 :

[root@localhost ~]# chown dufu:root test/
[root@localhost ~]# ll
总计 8
-rw-------. 1 root root 1086 202547日 anaconda-ks.cfg
drwxr-xr-x. 2 dufu root 4096  4716:15 test
[root@localhost ~]# ll
总计 12
-rw-------. 1 root root 1086 202547日 anaconda-ks.cfg
drwxr-xr-x. 2 dufu root 4096  4716:15 test
drwxr-xr-x. 2 root root 4096  4716:22 test2
[root@localhost ~]# chown libai test
[root@localhost ~]# ll
总计 12
-rw-------. 1 root  root 1086 202547日 anaconda-ks.cfg
drwxr-xr-x. 2 libai root 4096  4716:15 test
drwxr-xr-x. 2 root  root 4096  4716:22 test2
# 将 test 的所有者改为 libai
[root@localhost ~]# chown libai test
[root@localhost ~]# ll
总计 12
-rw-------. 1 root  root 1086 202547日 anaconda-ks.cfg
drwxr-xr-x. 2 libai root 4096  4716:15 test
drwxr-xr-x. 2 root  root 4096  4716:22 test2
[root@localhost ~]# chown  :libai test
[root@localhost ~]# ll
总计 12
-rw-------. 1 root  root  1086 202547日 anaconda-ks.cfg
 # 将 test 目录的所属组改为 libai

核心区别与注意事项

功能 chmod chown
作用对象 文件 / 目录的权限(读 / 写 / 执行)。 文件 / 目录的所有者和所属组。
权限要求 普通用户可修改自己文件的权限,管理员可修改所有文件。 仅管理员(或拥有 chown 权限的用户)可修改所有者 / 组。
典型场景 设置文件可执行(chmod +x)、禁止写入(chmod -w)。 转移文件所有权(如用户离职后转移文件给其他用户)。

注意事项

  1. 权限与安全:

    • chmod 777 会导致文件对所有用户可读、写、执行,存在安全风险,仅测试环境使用。
    • chown 递归修改目录时,确保路径正确,避免误删系统文件(如 chown -R root / 会导致系统崩溃)。
  2. 符号链接与硬链接:

    • chown 默认修改符号链接指向的文件,加 -h 仅修改链接本身。
    • 硬链接与原文件共享所有者和权限,修改其中一个会影响另一个。

你可能感兴趣的:(linux,运维,服务器)