03 用户权限和基本操作

  一、Linux 用户                            

  1.1 用户分类      

  Linux是一个多用户与多任务的分时操作系统,意味着多个用户可以同时使用同一台机器而不会相互干扰。Linux 的用户主要分为以下三类:

(1)超级用户 root            
  • root 用户在 Linux 操作系统中拥有最高的权限,可以执行任何操作,包括修改系统文件、关闭系统、管理所有用户等。由于 root 用户的权限过大,应避免直接使用 root 登录,以免误操作导致系统损坏。
  • 用户数据存储在 /root文件下,其 UID(用户ID)为 0
  • 使用 sudo 执行的命令会以 root 用户的身份进行。在使用 apt 安装软件时文件会存储在系统目录下,所以必须以 root 用户身份进行操作,这就是需要 sudo 来安装软件的原因。

(2)系统用户                  

  • 系统用户也称为伪用户,这些用户由系统或相关程序创建,用于执行系统服务或进程,例如 www-data 用户用于运行 web 服务器,mysql 用户用于运行 MySQL 数据库等。
  • 系统用户遵循了 “最小权限原则”,其权限被严格限制在其服务范围内,极大地增强了系统安全性。其 UID 通常在一个较低的范围内(如 1-999)。
  • 系统用户通常禁止登录,但不要随意删除这些用户,以免系统运行出现问题。

(3)普通用户

  • 普通用户通常为管理员为不同的使用者创建的账户,分配不同的权限,保障多个用户可以同时使用一台机器而互不干扰。
  • 权限受限,只能在自己的家目录/home/username和特定公共目录中进行操作,普通用户无法直接修改系统配置,也无法为系统环境安装或卸载软件。他们的 UID 通常从 1000 开始。
  • 普通用户是系统的主要使用者,进行日常工作和计算任务。当需要执行需要系统权限的任务时(比如安装软件),就需要使用 sudo 命令向 root申请临时权限。

  1.2 用户信息      

  Linux操作系统中与用户相关的配置文件有两个,分别是 /etc/passwd/etc/shadow/etc/passwd文件专门用于存放操作系统中所有用户的账号信息,而且所有用户都有权限查看此文件的内容,但是只有root管理员才能进行修改。基于这种特性,早期一些黑客很容易地获取到密码字符串进行暴力破解,所以之后专门对此文件进行了改进,将密码专门存放到/etc/shadow文件中,并做了严格的权限控制,而/etc/passwd文件中关于密码的那一段内容改用占位符x做标识。

  可以通过查看 /etc/passwd 文件,来得到系统中用户的配置信息。

# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
---省略部分内容---
tcpdump:x:72:72::/:/sbin/nologin
xiaozhou:x:1000:1000:xiaozhou:/home/xiaozhou:/bin/bash
noylinux:x:1001:1001::/home/noylinux:/bin/bash 

  在此文件中,每一行都代表一个用户,每行内容用:作为分隔符划分成7个字段,每个字段都有各自所代表的含义如下:

image

  /etc/shadow文件中存放着用户的密码信息,只有root用户能够读取其中的内容。

# cat /etc/shadow
root:$65JQrTGnEj3ndRUiwa$Pf5/gKwrjjADVuaUJ1QQwHdXQi18kQSV.lmz5mLWlZoPzJk.:18847
bin:*:18397:0:99999:7:::
---省略部分内容---
xiaozhou:$657/w.37JMhvkICq43j3yEZBesZ5LEIHVEMCoGhn5wPLkWXOMwbKSvQbKav/:0:99999:7:::
noylinux:!!:18867:0:99999:7:::

  同样,在/etc/shadow文件中每一行代表一个用户,使用:作为分隔符将每行用户信息划分为9个字段,每个字段都有各自所代表的含义:

image

  二、用户组介绍       

  2.1 用户与用户组的关系      

  用户组是用户的集合,给用户分组是Linux操作系统对用户进行集中管理和控制访问权限的一种手段,通过自定义用户组,可以简化用户管理工作。

用户与用户组之间有以下4种对应关系:

  (1)一对一:一个用户只归属在一个用户组中,是组中的唯一成员。

  (2)一对多:一个用户可以是多个用户组中的成员,此用户具有多个用户组的共同权限。

  (3)多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限。

  (4)多对多:多个用户可以存在于多个用户组中,也就是以上3种关系的扩展。

  可以使用 groups 命令,查看自己所属的用户组:

# groups
bailu adm cdrom sudo dip plugdev lxd 

  可以看到,自己建立的用户 bailu 从属于多个用户组,包括一个与其名字相同的初始用户组。

  2.2 用户组信息         

  与用户组相关的配置文件也有两个,分别是/etc/group/etc/gshadow/etc/group文件专门用于存放系统中所有用户组的信息,而且所有用户都有权限查看这个文件的内容,但是只有 root管理员才能进行修改。与用户密码一样,组密码也专门存放到/etc/gshadow文件中,并且也做了严格的权限控制,这个文件只有root用户才能读取其中的内容,其他用户没有任何权限,这就保证了用户组密码的安全性。

  可以通过查看/etc/group文件,来得到系统中用户组的配置信息。

# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
---省略部分内容---
xiaozhou:x:1000:
noylinux:x:1001:

  在/etc/group文件中,每一行代表一个用户组,每行内容用:作为分隔符划分成4个字段,每个字段都有各自所代表的含义:

image

  • 用户组密码:root管理员可以给用户组指定组管理员,使用用户组密码进行登录,该组的组管理员可以替代root管理员进行操作。但是这个功能目前已经很少使用了,因为现在有sudo命令, 管理时基本不会设置组密码。
  • 初始组与附加组:在一般情况下,初始组就是在创建用户的时候操作系统自动创建的和用户名同名的组,若需要把用户加入其他组,就需要以附加组的形式添加进入,每个用户都可以加入多个附加组。

  同样,/etc/gshadow文件中存放着用户组的密码信息,只有root用户能够读取其中的内容。

# cat /etc/gshadow
root:::
bin:::
daemon:::
---省略部分内容---
xiaozhou:!::
noylinux:!::

  /etc/gshadow文件中的每一行代表一个用户组,每行内容用:作为分隔符划分成4个字段,每个字段都有各自所代表的含义:

image

  三、用户的基本操作   

  打印当前用户 whoami 和 who am i  

  描述:打印当前有效的用户ID对应的名称。

  • whoami命令:
# whoami
root
  • who am i命令:
# who am i
root   pts/0       2024-11-13 14:36 (127.0.0.1)

  打印所有用户 who 和 w  

  描述:显示当前所有登录用户的信息。

  • who命令:
# who
root     pts/0        2024-12-19 10:30 (192.168.1.50)
user1    pts/1        2024-12-19 11:15 (192.168.1.60)
  • w命令:
# w
 11:20:15 up 15 days,  3:05,  3 users,  load average: 0.12, 0.18, 0.21
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.1.50     10:30    5.00s  0:15   0.01s top
user1    pts/1    192.168.1.60     11:15    0.00s  0:02   0.01s vim test.txt
user2    tty2     -                09:20    1:20m  0:01   0.00s -bash

其中各列含义如下:

  • USER:登录用户;
  • TTY:终端;
  • FROM:远程登录主机;
  • LOGIN@:登录时间;
  • IDLE:用户空闲时间;
  • JCPU:在此终端的所有进程占用时间;
  • PCPU:当前进程占用时间;
  • WHAT:当前正在执行的命令。

  打印用户ID id  

  语法格式:

id 用户名

  描述:打印真实、有效的用户和所在组的信息。

  示例:查询用户user2的用户ID和相关用户组ID。

# id user2
uid=1003(user2) gid=1003(user2) 组=1003(user2),1004(group1)

  使用root执行命令 sudo    

  sudo命令可以让你以另一个用户的身份执行指定的命令,最常见的用途就是不加入其他参数,让普通用户以 root 的身份执行命令。

使用格式为:

sudo 命令

  想要以 root 之外的用户的身份执行命令就需要在sudo后面加上 -u 用户名 即可。

$ sudo -u nobody id   # 用 nobody 用户的身份执行id
uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)

   sudo 的配置存储在 /etc/sudoers 文件中,仅 root 用户有权查看和修改。不要直接修改此文件。对这个文件的任何修改,都应该使用 visudo 这个命令去做。在 sudoers 文件中,一般配置如下:

# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL

  若想无密码执行sudo,修改成以下内容即可:

%sudo ALL=(ALL:ALL) NOPASSWD:ALL

  切换用户 su  

  语法格式:

 sudo su 用户名

  描述:su 命令用于直接切换用户。如果没有用户名这个参数,则切换到 root 用户。

$ sudo su
Password:
(自己的密码)
# id
uid=0(root) gid=0(root) groups=0(root)
# exit

  也可以使用 sudo -i(与 sudo su - 等价),获得一个有着 root 权限 shell。

  添加用户 useradd  

  语法格式:

useradd [选项] 用户名

  描述:用来建立用户账号。

  useradd命令的常用选项:

image

  示例:创建新用户,暂时先不设置密码。

# useradd user1
# tail -n 1 /etc/passwd
user1:x:1002:1002::/home/user1:/bin/bash
# tail -n1 /etc/shadow
user1:!!:18868:0:99999:7:::

  使用useradd命令创建用户的详细过程如下:

  1. 读取默认配置文件。操作系统首先读取 /etc/login.defs 和 /etc/default/useradd 这两个配置文件,这些文件中存放的是创建用户时的默认配置参数。
  2. 添加用户和组信息。根据配置文件中定义的默认参数添加用户,自动创建对应的初始用户组,在/etc/passwd/etc/group/etc/shadow/etc/gshadow 这4个系统文件中添加用户和组的相关信息。
  3. 创建用户家目录。自动在 useradd 配置文件中设定的目录下建立用户的家目录默认目录:/home/用户名
  4. 复制骨架文件。复制 /etc/skel 目录中的所有文件到此用户的家目录中, /etc/skel/ 目录包含新用户的默认配置文件,这些文件是隐藏文件,需要使用 ls -a 命令查看。

  创建用户过程中涉及的几个文件如下:

  • /etc/login.defs:设置用户账号限制相关的配置文件。
# egrep -v "^#|^$" /etc/login.defs
MAIL_DIR         /var/spool/mail    #创建用户时要在此目录创建一个用户 mail 文件
UMASK            022                #权限掩码初始化值
HOME_MODE        0700               #用户家目录的权限
PASS_MAX_DAYS    99999              #密码的最长有效期
PASS_MIN_DAYS    0                  #密码最短修改时间间隔
PASS_MIN_LEN5                       #密码的最小长度
PASS_WARN_AGE    7                  #提前多少天警告用户需要修改密码
UID_MIN        1000           #普通用户标识号(UID)的最小值
UID_MAX        60000          #普通用户标识号(UID)的最大值
SYS_UID_MIN     201            #系统用户标识号(UID)的最小值
SYS_UID_MAX      999            #系统用户标识号(UID)的最大值
GID_MIN        1000            #普通用户组标识号(GID)的最小值
GID_MAX        60000           #普通用户组标识号(GID)的最大值
SYS_GID_MIN     201            #系统用户组标识号(GID)的最小值
SYS_GID_MAX     999            #系统用户组标识号(GID)的最大值
CREATE_HOME_yes               #使用 useradd 命令创建用户时自动创建家目录
USERGROUPS_ENAB_yes            #删除用户时是否同时删除初始用户组
ENCRYPT_METHOD SHA512           #用户密码采用的加密方式,默认使用 SHA512
  • /etc/default/useradd
# cat /etc/default/useradd.
GROUP=100        #若使用 useradd 命令创建用户时没有指定组,并且/etc/login.defs配置文件中的 USERGROUPS_ENAB 配置项为 no 或者 useradd 使用了 -N 选项,此配置项将在创建用户时使用此用户组 GID
HOME=/home        #默认创建用户时目录存放的位置
INACTIVE=-1       #是否启用账号过期,-1 表示不启用
EXPIRE=          #账号终止日期,不设置表示不启用
SHELL=/bin/bash     #新用户默认所用的 shell 类型
SKEL=/etc/skel      #新用户目录中的默认环境文件存放路径
CREATE_MAIL_SPOOL=yes #创建邮箱 (mail)文件
  • /etc/skel目录下的隐藏文件。
# ls -a /etc/skel/
.bash_logout    #用户每次退出登录时执行此配置文件
.bash_profile   #用户每次登录时执行此配置文件
.bashrc         #用户每次进入新的 Bash 环境时执行此配置文件

  设置修改密码 passwd  

  语法格式:

passwd [选项] 用户名

  描述:用useradd命令创建完用户后还无法登录,因为没有设置密码, passwd命令就是用来设置用户的认证信息的,包括用户密码、密码过期时间等,除此之外还可以用此命令重置用户密码。

  passwd命令的常用选项:

image

  普通用户和超级权限用户都可以使用passwd命令,但普通用户只能更改自己的用户密码,而超级权限用户可以更改所有用户的密码。

  示例:

  • 普通用户重置密码 
$ passwd
更改用户 user1 的密码。
Current password:   #输入当前密码
新的 密码:        #输入新密码
重新输入新的 密码;    #确认新密码
passwd: 所有的身份验证令牌已经成功更新
  • 使用root用户强行重置普通用户的密码
# passwd user1
更改用户 user1 的密码。
新的 密码:         #直接输入新密码
重新输入新的 密码;     #确认新密码
passwd:所有的身份验证令牌已经成功更新

  修改用户属性 usermod  

  语法格式:

usermod [选项] 用户名

  描述:用于修改用户的各种属性。

  usermod命令的常用选项:

image

  示例:将用户user1的登录Shell修改为sh,主目录改为“/home/tttt”,并将此用户附加到noylinux用户组中。 

# 原用户文件
# tail -n 1 /etc/passwd
user1:x:1002:1002::/home/user1:/bin/bash
# tail -n 2 /etc/group
noylinux:x:1001:
user1:x:1002:

# 更改用户配置
# cd home
# mkdir tttt
# usermod -s /bin/sh -d /home/tttt -G noylinux user1

#更改后的用户文件
# tail -n 1 /etc/passwd
user1:x:1002:1002::/home/tttt:/bin/sh
# tail -n 2 /etc/group
noylinux:x:1001:user1
user1:x:1002:

  删除用户 userdel  

  语法格式:

userdel [-r] 用户名

  描述:用于删除给定的用户以及与用户相关的文件。若不加选项,则仅删除用户账号,而不删除相关文件。-r 选项表示删除用户的同时,删除与用户相关的所有文件。

  示例: 删除用户user2并且连同user2的家目录一起删除。

# userdel -r user2

  四、用户组的基本操作       

  查询用户组 groups  

  语法格式:

groups 用户组名

  描述:用于查询用户所属的用户组。

  示例:查询用户user2所属的用户组

# groups user2
user2 : user2 group1 

  创建用户组 groupadd  

  语法格式:

groupadd [选项] 组名

  描述:用于创建一个新的用户组,新用户组的信息将被添加到系统文件中。

  groupadd命令的常用选项:

image

  示例:添加用户组user5。

# groupadd user5
# tail -n 1 /etc/group
user5:x:1002:

  修改用户属性 groupmod  

  语法格式:

groupmod [选项] 组名

  描述:用于修改用户组的各种属性。

  groupmod命令的常用选项:

image

  示例:将用户组user5的组名修改为user9。 

# groupmod -n user9 user5
# tail -n 1 /etc/group
user9:x:1002:

  删除用户组 groupdel  

  语法格式:

groupdel 组名

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

  示例:删除用户组user9。

# groupdel user9
# tail -n 1 /etc/group
noylinux:x:1001:

  管理用户组 gpasswd  

  语法格式:

gpasswd [选项] 组名

  描述:用于管理用户组。是组文件/etc/group和/etc/gshadow的管理工具。

  gpasswd命令的常用选项:

image

   示例:

  • 将用户 user1 加入 group1 组
# gpasswd -a user1 group1
  • 将用户 user1 从 group1 组中移除
# gpasswd -d user1 group1
  • 将 user1 设置为 group1 组的组管理员
# gpasswd -A user1 group1
  • 将 user1, user2同时加入 group1 组
# gpasswd -M user1,user2 group1

 

 

 

 

 

 

 

 

 

posted @ 2025-12-17 14:45  夏沫゛烟雨  阅读(5)  评论(0)    收藏  举报