ThankNeko's Blog ThankNeko's Blog
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)

Hoshinozora

尽人事,听天命。
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)
  • 操作系统

    • Linux基础

      • 服务器与Linux介绍
      • VMware虚拟机安装
      • 查看系统信息
      • 开机挂载与自启
      • 系统运行级别
      • 变量与命令别名
      • 网卡配置
      • 文件系统inode与block详解
      • 系统优化
      • 文件管理
      • 用户管理
        • 用户管理介绍
          • 用户的作用
          • 用户组的作用
          • 用户的分类
          • 用户相关文件
        • 系统用户相关命令
          • 创建用户命令
          • 设置用户密码命令
          • 修改用户命令
          • 删除用户命令
          • 切换用户命令
          • 查看用户信息
          • 用户组管理命令
          • 提权命令
        • 用户与文件权限管理
          • 文件权限介绍
          • 文件权限测试
          • 目录权限介绍
          • 目录权限测试
          • 文件访问过程
          • 默认权限命令
          • 修改属主属组命令
          • 修改权限命令
      • 文本处理三剑客
      • 定时任务
      • 磁盘分区
      • 其他基础命令
    • Linux服务

    • Windows Server笔记

    • Shell笔记

    • Ansible笔记

  • 虚拟化服务

  • 数据库服务

  • 监控服务

  • Web服务

  • 数据处理

  • Ops
  • 操作系统
  • Linux基础
Hoshinozora
2023-02-27
目录

用户管理

# 用户管理介绍

# 用户的作用

系统会以用户UID来识别不同的用户,我们可以利用用户登录系统、权限管理、进程管理等。

$UID变量记录了当前用户UID。

# 用户组的作用

分组能方便对用户权限的管理,一个用户可以对应多个组,多个用户也可以对应一个组。

# 用户的分类

在Linux中用户可以分为以下三类:

超级管理员用户,最高权限,可登录系统,UID为0。

虚拟用户,可管理进程,但不能登录系统,UID为1到999。

普通用户,可管理指定进程、数据,可登录系统,UID为1000及以上。

在命令提示符中,#为root用户,$为普通用户。

# 用户相关文件

/etc/skel/目录

/etc/skel目录是用户的家目录文件样板,用户创建时会复制该目录文件到新用户家目录,我们可以放一些运维操作规范说明文件。

该目录下默认有以下几个隐藏文件:

.bash_logout:当系统退出登录状态会执行的命令。

.bahsrc:别名和环境变量 (针对用户)。

.bash_profile:别名和环境变量 (针对用户)。

/etc/passwd文件

该文件是系统的用户信息文件。

例如root : x : 0 : 0 : root : /root : /bin/bash

信息之间以:作为分隔符,各列分别代表以下信息:

  1. 用户名信息。

  2. 用户密码信息,早期unix用于存放密码,后面因为安全问题改成x。

  3. 用户的uid信息。

  4. 用户的gid信息。

  5. 用户的注释信息。

  6. 用户家目录信息。

  7. 用户登录系统方式。

    /bin/bash:bash解释器

    /sbin/nologin:无法登录系统

/etc/shadow文件

该文件是系统的用户密码文件,第二列是加密的密码。

/etc/group文件

该文件是用户组记录文件。

/etc/gshadow文件

该文件是用户组密码信息。

# 系统用户相关命令

# 创建用户命令

useradd [参数] [用户名]

相关参数:

-u [UID] 指定用户的UID数值。

-g [主要用户组] 指定用户的主要用户组。

-G [扩展用户组] 指定用户的扩展用户组。

-c 添加用户的注释信息。

-s /sbin/nologin 指定用户的登录方式。

-M 不创建用户家目录。

例如:

# 创建一个普通用户。
useradd test01

# 创建一个虚拟用户,指定不可登录、无家目录即可。
useradd nobodyone -s /sbin/nologin -M

# 一次创建多个用户方法一
seq 10 | sed -r 's#(.*)#useradd test\1 && echo "123456" | passwd --stdin test\1#g' | bash

# 一次创建多个用户方法二
for num in {1..20};do useradd test$num;done

# 同时创建用户并设置密码,stdin可能会不安全,记得清除历史命令
useradd test ;echo "123456" | passwd --stdin test
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 设置用户密码命令

passwd [参数] [用户名]

参数:

--stdin 标准输入设置密码 (注意:history会有记录)。

例如:

# 给test用户设置密码
passwd test

# 免交互设置密码,stdin可能会不安全,记得清除历史命令
echo "123456" | passwd --stdin test
1
2
3
4
5

注意:

企业中设置的密码要复杂,12位以上的字母数字及特殊符号。

# 修改用户命令

usermod [参数] [用户名]

参数:

-s 修改用户的登录方式。

-g 修改用户的主要组信息。

-G 修改用户的扩展组信息。

-u 修改用户的UID。

-c 修改用户的注释信息。

# 删除用户命令

userdel [参数] [用户名]

删除用户时也会同时删除用户的组,如果用户的组还有其他用户,则组会保留。

参数:

-r 删除用户的同时删除该用户的家目录。

# 切换用户命令

通过su [用户名]命令可以进行用户切换。

env 显示系统环境变量。

su 仅会改变用户家目录的环境变量。

su - 会完全切换到用户的环境变量。

# 查看用户信息

id [用户名]命令显示用户信息。

last命令可以查看用户登录的历史时间和IP。

w命令显示正在登录的用户信息。

登录用户名 登录方式 登录源IP 登录时间 空闲使用时间 消耗CPU资源的时间 用户执行的操作

登录方式:pts/x表示远程登录。tty/x表示本地登录。

# 用户组管理命令

groupadd [参数] [用户名]创建用户组命令。

groupmod [参数] [用户名]修改用户组信息命令。

groupdel [参数] [用户名]删除用户组命令。

# 提权命令

在Linux中root用户可以赋予其他用户或用户组特定权限,使其可以执行特定命令。

visudo

该命令同等于vi /etc/sudoers但visudo有语法检查,我们可以在其给其他用户配置特定权限。

参考格式:授权的用户名 ALL=(ALL) 要授权的命令路径

/bin/ls, /bin/rm 多个命令授权用", "逗号空格间隔。

/sbin/*, !/sbin/visudo 授权整个命令目录,同时排除部分的命令授权,!加在命令前表示排除。

NOPASSWD: /bin/ls, /bin/rm 加上 NOPASSWD: 使用户sudo时不需要输入用户密码。

例如:centos ALL=(ALL) NOPASSWD:ALL

-c参数可以检查sudoers文件是否有语法错误。

sudo

可以通过sudo [命令]来使用被赋予权限的命令,通过sudo -l可以查看可用命令列表。

# 用户与文件权限管理

# 文件权限介绍

r 可读取文件内容。

w 可编辑文件内容。

x 可执行文件 (需有r权限才有意义)。

# 文件权限测试

root用户可改变任何文件的权限。

---:可读、可写。

--x:可执行文件。

属主和其他用户。

---:不可读、不可写。

r--:可读、不可写。

但是如果用户对所在目录有wx权限则可以强制写入,相当于删除或移动源文件后,新建一份在其中写入。

-w-:不可读、可写(可>>追加)。

--x:无法执行、需要同时有r读权限才能执行。

# 目录权限介绍

r 可读取目录中的文件名、属性(需有x权限)等。

w 可对目录中的文件进行添加、删除、移动、复制。

x 可进入目录、读取目录中文件的属性。

读、写权限都必须配合执行权限才能发挥作用。

# 目录权限测试

root用户,root可以改变所有目录的权限。

---:对目录有所有权限,可增删改查等。

属主和其他用户。

---:不可查看、创建、删除目录内的文件。

r--:只可查看文件名 (因为没有x执行权限)。

-w-:同等于无权限 (因为没有x执行权限)。

--x:可进入目录 ,但无法查看目录下文件信息,可直接通过文件名访问目录中文件。

rw-:同等于只有r权限。

r-x:可切换目录、可读取中的所有信息,如文件名、文件属性等。

-wx:可切换目录,无法通过ls查看文件夹内的文件,但可以直接指定文件名进行操作。

rwx:读取目录中的文件名、属性、可增删改查文件。

# 文件访问过程

例如:我们需要cat /home/test.txt文件。

  1. 会先从根目录开始读取,查看用户有没有根目录的执行权限。
  2. 如果有,则在/根目录根据文件名home找到它的inode号,再根据inode号找到它block指针。
  3. 然后访问home目录,系统会查看用户有没有home目录的执行权限。
  4. 如果有则顺利进入home目录,并在home目录中找到其user的inode号和block指针。
  5. 然后尝试进入user目录,系统再判断用户是否有对user目录的执行权限。
  6. 如果有,则进入user目录,并根据test文件的inode号找到block信息,并尝试进行读取。
  7. 系统再判断用户是否有test文件的读权限,如果有则正常读取,如果没有则报错。

# 默认权限命令

Linux文件和目录的默认权限:

普通文件:644,保证属主用户可以对文件进行编辑,保证其他用户可以读取文件内容。

目录文件:755,保证属主用户可以对目录进行编辑,保证其他用户可以读取目录中的信息,可以进入到目录中。

默认权限受umask的值影响,我们如果想修改默认权限,可以通过umask [值]命令来临时修改,永久修改需要修改/etc/profile文件内原有的。

默认umask值为022:

文件:666 - 022(umask) = 644

目录:777 - 022(umask) = 755

对于文件来说:

umask数值是奇数时结果会+1:666 - 033(umask) = 633 + 011 = 644

umask数值是偶数时不+1:666 - 022 = 644

对于目录来说:

umask数值是偶数或奇数都不+1:777 - 022(umask) = 755

# 修改属主属组命令

我们可以通过chown命令来设置文件属主和属组。

命令格式中属主和属组的分隔符:和.都行。

# 设置test文件的属主和属组为user
chown user:user test

# 同等于上面
chown user. test

# 递归修改目录内文件的属主和属组
chown -R user. test
1
2
3
4
5
6
7
8

# 修改权限命令

我们可以通过chmod命令来设置文件的权限位,该命令可以通过字符或数值来进行修改。

字符修改

u:属主(user)

g:属组(group)

o:其他用户(other)

a:等于以上所有(all)

# 属主追加执行权限。
chmod u+x test

# 属组移除读权限。
chmod g-r test

# 属组追加读写权限。
chmod g+rw test

# 其他人设为读取、执行权限。
chmod o=rx test

# 同等于ugo=rwx。
chmod a=rwx test
1
2
3
4
5
6
7
8
9
10
11
12
13
14

通过数值进行修改 (更灵活)

# 同等于ugo=rwx。
chmod 777 /home/test

# 同等于u=rwx、go=r。
chmod 744 /home/test
1
2
3
4
5

特殊权限位

Linux系统中文件除了9个权限位外,实际还有3个特殊权限位,用于实现特殊的需求。

我们可以通过chmod命令来设置他们。

# setuid:将文件属主拥有的权限分配给其他人,例如属主是root,那么其他人也会获得该文件的root权限,设置好会在属主权限位显示s。
chmod u+s test.txt # 或chmod 4777 test.txt

# setgid:将文件属组拥有的能力分配给所有组,设置好会在属组权限位显示s。
chmod g+s test.txt # 或chmod 2777 test.txt

# 粘滞位(sticky bit):一般由共享文件夹使用,使用户即使有目录的777权限,也只能查看目录内他人的文件内容、而无法执行修改、删除、移动、强制保存等操作,当然自己的文件可以操作,有权限写的文件也可以写。
# 另外tmp文件默认有粘滞位权限,如果修改了,某些服务可能会出问题。
chmod o+t test.txt #或chmod 1777 ./tesst
1
2
3
4
5
6
7
8
9

在一些文件设置了特殊权限后,字母不是小写的s或者t,而是大写的S和T,那代表此文件的特殊权限没有生效,是因为你尚未给它对应用户的x权限。

#Linux#用户管理
文件管理
文本处理三剑客

← 文件管理 文本处理三剑客→

最近更新
01
二〇二五年四月十七日随笔
04-17
02
二〇二五年四月十六日随笔
04-16
03
二〇二五年四月九日随笔
04-09
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Hoshinozora | MIT License
湘ICP备2022022820号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式