《Linux基础三》用户和文件权限管理

用户和文件权限管理

1,用户

管理员用户:

Root用户,也称根用户、超级用户、超级管理员

可对根目录执行读写和执行操作

具有系统中的最高、所有权限

普通用户

权限有限的用户

Root用户拥有系统的所有权限,等同于操作系统的权限,足以把整个系统的大部分文件删掉,导致系统完全毁坏,不能再次使用。所以,用root进行不当的操作是相当危险的,轻微的可以死机,严重的甚至不能开机。但是有时候也有一些需要root权限的应用,譬如广告阻挡。除非确实需要,一般情况下都不推荐使用root。最好单独建立一个普通的用户,作为日常之用。

Linux系统是一个多用户、多任务的操作系统,每个用户之间都是互相隔离的,每个用户是通过User Id (UID)来唯一标识的,相当于人类社会的身份证号码。

Linux中可以将一个或多个用户加入用户组中,组就是包含0个或多个用户的集合,用户组是通过Group
ID(GID) 来唯一标识的。

在这里插入图片描述

用户(组)分类:

用户类型 用户名 用户ID (uid) 作用
超级管理员**(组)** root(可自定义) 0 超级管理员
系统用户**(组)** 自定义 1-499(CentOS6及以前),
1-999(CentOS7及以后)
给后台程序使用,像nginx,mysql等
登录用户**(组)** 自定义 500+(CentOS6及以前),
1000+(CentOS7及以后)
给用户进行交互式登录

命令提示符#、$

# 管理员

$ 普通用户

范例:显示系统中现有用户的相关信息

[root@Rocky8 ~]# lslogins 
  UID USER               PROC PWD-LOCK PWD-DENY  LAST-LOGIN GECOS
    0 root                153        0        0       09:57 root
    1 bin                   0        0        0             bin
    2 daemon                0        0        0             daemon
    3 adm                   0        0        0             adm
    4 lp                    0        0        0             lp
    5 sync                  0        0        0             sync
    6 shutdown              0        0        0 Feb02/01:08 shutdown
    7 halt                  0        0        0             halt
    8 mail                  0        0        0             mail
   11 operator              0        0        0             operator
   12 games                 0        0        0             games
   14 ftp                   0        0        0             FTP User
   59 tss                   0        1        0             Account used for TPM access
   72 tcpdump               0        1        0             
   74 sshd                  0        1        0             Privilege-separated SSH
   81 dbus                  1        1        0             System message bus
   89 postfix               0        1        0             
  193 systemd-resolve       0        1        0             systemd Resolver
  991 setroubleshoot        0        1        0             
  992 unbound               0        1        0             Unbound DNS resolver
  993 chrony                0        1        0             
  994 cockpit-wsinstance    0        1        0             User for cockpit-ws instances
  995 cockpit-ws            0        1        0             User for cockpit web service
  996 sssd                  0        1        0             User for sssd
  997 libstoragemgmt        1        1        0             daemon account for libstoragemgmt
  998 polkitd               1        1        0             User for polkitd
  999 systemd-coredump      0        1        0             systemd Core Dumper
 1000 jett                  0        0        0             
65534 nobody                0        0        0             Kernel Overflow User

范例:

[root@Rocky8 ~]# who   #查看当前登录用户信息
root     pts/0        2023-02-02 09:57 (10.0.0.1)
[root@Rocky8 ~]# whoami #打印当前登录用户,相当于执行”id -un”指令
root
[root@Rocky8 ~]# id     #显示当前用户与用户组信息
uid=0(root) gid=0(root) groups=0(root)
[root@Rocky8 ~]# w      #显示目前登入系统的用户信息
 10:48:38 up 54 min,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    10.0.0.1         09:57    1.00s  0.04s  0.00s w

Linux用户和组的关系

在这里插入图片描述

用户和用户组的对应关系是:一对一、多对一、一对多或多对多

1.一对一:一个用户可以存在一个组中,是组中的唯一成员;

2.一对多:一个用户可以存在多个用户组中,此用户具有这多个组的共同权限;

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

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

一个用户至少有一个组,也可以有多个组;
一个组至少有0个用户,也可以有多个用户;
用户的主要组(primary group):又称私有组,一个用户必须属于且只有一个主组,创建用户时,默认会创建与其同名的组作为主组;
用户的附加组(supplementary group):又称辅助组,一个用户可以属于0个或多个附加组;

1.1 用户管理

1.1.1 用户管理主要配置文件

/etc/passwd:用户及其属性信息

/etc/shadow:用户密码及其相关属性

[root@Rocky8 ~]# man 5 passwd 查看帮助文档

[root@Rocky8 ~]# man 5 shadow 查看帮助文档

#/etc/passwd文件的每一行代表一个用户的信息,用冒号分隔的每一个字段分别代表不同的含义。
第一个字段:用户名
第二个字段:密码,这里的 x 仅仅是一个标识,真正的密码加密保存在 /etc/shadow 中
第三个字段:UID
第四个字段:GID
第五个字段:用户描述信息,可不填
第六个字段:用户家目录位置
第七个字段:默认shell,用 chsh 命令修改

[root@Rocky8 ~]# cat /etc/passwd |head -3
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

#/etc/shadow文件同样是一行一个用户的信息,每个字段有不同含义
第一个字段:用户名
第二个字段:密码。有密码的用户在这里都是一串加密过的字符。这里我填了两个叹号,表示没有密码。
第三个字段:从1970/01/01到最近一次密码修改经过的时间,以天为单位。
第四个字段:密码过多久可以被修改,0表示随时可改。
第五个字段:密码的有效期
第六个字段:密码要过期前多少天提醒用户,7就是提前一周提醒。
第七个字段:密码过期后多少天之内还能登录,但是要登录必须改密码。
第八个字段:密码的最长使用期限
第九个字段:系统保留字段

所有伪用户的密码都是 "!!""*",代表没有密码是不能登录的,新建用户还没设密码时为!!,禁用账号,可以直接在密码字段前加 !
[root@Rocky8 ~]# cat /etc/shadow |head -3
root:$6$cPKVQe4MwVWb9vCN$Rrx2WSze5G86tEOzWOCcY6TeptTN0aHNceSqIpWj.h4sF/df3CdYM8xBHjERxt19pvSUtJWyDPckgbzxdMyPe1::0:99999:7:::
bin:*:18700:0:99999:7:::
daemon:*:18700:0:99999:7:::


1.1.2 用户管理命令

useradd命令 – 创建并设置用户信息

newusers命令 – 更新和批量创建新用户

userdel命令 – 删除用户账户

passwd命令 – 设置和修改用户的密码值

chpasswd命令 – 批量更新用户密码

chage命令 – 修改帐号和密码的有效期限

usermod命令 – 修改用户账号信息

su命令 – 切换用户身份

who命令 – 查看当前登录用户信息

groups - 打印用户所在的组

getent命令 – 查看系统数据库中的记录信息

1.1.2.1 用户创建useradd、newusers

useradd命令来自于英文词组“User add”的全拼,其功能是用于创建并设置用户信息。

#语法:
useradd [options] LOGIN
useradd -D
useradd -D [options]
#常见选项
-u|--uid UID #指定UID
-g|--gid GID #指定用户组,-g groupname|--gid GID
-c|--comment COMMENT #新账户的 GECOS 字段
-d|--home-dir HOME_DIR #指定家目录,可以是不存在的,指定家目录,并不代表创建
家目录
-s|--shell SHELL #指定 shell,可用shell在/etc/shells 中可以查看,指定用户使用/sbin/nologin,无论是本地还是远程都不能登录系统,也无法实现系统管理,使用/sbin/nologin的shell的用户无法切换,ubnutn中使用/bin/false的shell的用户同样无法切换
-r|--system #创建系统用户,CentOS 6之前 ID<500,CentOS7 以后
ID<1000,不会创建登录用户相关信息
-m|--create-home #创建家目录,一般用于登录用户
-M|--no-create-home #不创建家目录,一般用于不用登录的用户
-p|--password PASSWORD #设置密码,这里的密码是以明文的形式存在
于/etc/shadow 文件中
-o|--non-unique #允许使用重复的 UID 创建用户
-G|--groups GROUP1[,GROUP2,...] #为用户指明附加组,组须事先存在
-N|--no-user-group #不创建同名的组,使用users组做主组
-D|--defaults #显示或更改默认的 useradd 配置,默认配置文件是
/etc/default/useradd
-e|--expiredate EXPIRE_DATE #指定账户的过期日期 YYYY-MM-DD 格式
-f|--inactive INACTIVE #密码过期之后,账户被彻底禁用之前的天数,0 表示密码过
期立即禁用,-1表示不使用此功能
-k|--skel SKEL_DIR #指定家目录模板,创建家目录,会生成一些默认文件,如果指定,就从该目录复制
文件,默认是/etc/skel/,要配合-m
-K|--key KEY=VALUE #不使用 /etc/login.defs 中的默认值,自己指定,比如
-K UID_MIN=100
-l|--no-log-init #不将用户添加到最近登录和登录失败记录,前面讲到的3a认证审计,就在此处
lastlog|lastb|cat /var/log/secure

范例:默认创建指定的用户

[root@Rocky8 ~]# useradd user1                #默认创建用户user1
[root@Rocky8 ~]# lslogins |grep user1         #查看用户user1信息
 1001 user1                 0        1        0                
[root@Rocky8 ~]# getent passwd user1          #查看本地的用户文件(/etc/passwd)中包含的指定用户user1信息
user1:x:1001:1001::/home/user1:/bin/bash
[root@Rocky8 ~]# getent shadow user1      #查看本地的用户密码文件(/etc/shadow)中包含的指定用户user1信息
user1:!!:19390:0:99999:7:::
[root@Rocky8 ~]# getent group user1       #查看本地的用户组文件(/etc/group)中包含的指定用户user1信息
user1:x:1001:
[root@Rocky8 ~]# getent gshadow user1     #查看本地的用户组密码文件(/etc/gshadow)中包含的指定用户user1信息
user1:!::
[root@Rocky8 ~]# ls -a /home/user1/       #用户user1默认家目录,来源于家目录模块文件/etc/skel。
.  ..  .bash_logout  .bash_profile  .bashrc



[root@Rocky8 ~]# ll /var/spool/mail/user1   
-rw-rw---- 1 user1 mail 0 Feb  2 11:42 /var/spool/mail/user1
[root@Rocky8 ~]# ls -a  /etc/skel    #家目录模板,修改此目录内容后,新创建的用户家目录中的内容会发生改变
.  ..  .bash_logout  .bash_profile  .bashrc
[root@Rocky8 ~]# useradd -D      #显示或更改默认的 useradd 配置,默认配置文件是/etc/default/useradd
GROUP=100     #useradd不指定组,且/etc/login.defs中的USERGROUPS_ENAB为no或useradd -N时,group 为100
HOME=/home    #此项表示将新建用户的主目录放在/home目录下
INACTIVE=-1   #此项表示是否启用帐号过期禁用,-1表示不启用,对应/etc/shadow文件第7列
EXPIRE=       #此项表示帐号过期日期,不设置表示不启用,对应/etc/shadow文件第8列
SHELL=/bin/bash  #此项指定了新建用户的默认shell类型
SKEL=/etc/skel   #此项用来指定用户主目录默认文件的来源,也就是说新建用户主目录下的文件都是从这个目录下复制而来的
CREATE_MAIL_SPOOL=yes  
[root@Rocky8 ~]# cat /etc/default/useradd 
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
/etc/default/useradd文件定义了新建用户的一些默认属性,比如用户的主目录、使用的shell等等,通过更改此文件,可以改变创建新用户的默认属性值


#/etc/login.defs文件用来定义创建一个用户时的默认设置,比如指定用户的UID和GID的范围,用户的过期时间、是否需要创建用户主目录等等。
[root@Rocky8 ~]# cat /etc/login.defs
#
# Please note that the parameters in this configuration file control the
# behavior of the tools from the shadow-utils component. None of these
# tools uses the PAM mechanism, and the utilities that use PAM (such as the
# passwd command) should therefore be configured elsewhere. Refer to
# /etc/pam.d/system-auth for more information.
#

# *REQUIRED*
#   Directory where mailboxes reside, _or_ name of file, relative to the
#   home directory.  If you _do_ define both, MAIL_DIR takes precedence.
#   QMAIL_DIR is for Qmail
#
#QMAIL_DIR	Maildir
MAIL_DIR	/var/spool/mail   #当创建用户时,同时在目录/var/spool/mail中创建一个用户mail文件
#MAIL_FILE	.mail

# Default initial "umask" value used by login(1) on non-PAM enabled systems.
# Default "umask" value for pam_umask(8) on PAM enabled systems.
# UMASK is also used by useradd(8) and newusers(8) to set the mode for new
# home directories if HOME_MODE is not set.
# 022 is the default value, but 027, or even 077, could be considered
# for increased privacy. There is no One True Answer here: each sysadmin
# must make up their mind.
UMASK		022

# HOME_MODE is used by useradd(8) and newusers(8) to set the mode for new
# home directories.
# If HOME_MODE is not set, the value of UMASK is used to create the mode.
HOME_MODE	0700

# Password aging controls:
#
#	PASS_MAX_DAYS	Maximum number of days a password may be used.
#	PASS_MIN_DAYS	Minimum number of days allowed between password changes.
#	PASS_MIN_LEN	Minimum acceptable password length.
#	PASS_WARN_AGE	Number of days warning given before a password expires.
#
PASS_MAX_DAYS	99999  #指定密码保持有效的最大天数
PASS_MIN_DAYS	0      #表示自从上次密码修改以来多少天后用户才被允许修改口令
PASS_MIN_LEN	5      #指定密码的最小长度
PASS_WARN_AGE	7      #表示在口令到期前多少天系统开始通知用户口令即将到期

#
# Min/max values for automatic uid selection in useradd
#
UID_MIN                  1000   #添加用户时,用户的UID 从1000开始
UID_MAX                 60000   #指定最大UID为60000
# System accounts
SYS_UID_MIN               201
SYS_UID_MAX               999

#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN                  1000  #添加组时,组的GID从1000开始
GID_MAX                 60000  #指定最大GID为60000
# System accounts
SYS_GID_MIN               201
SYS_GID_MAX               999

#
# If defined, this command is run when removing a user.
# It should remove any at/cron/print jobs etc. owned by
# the user to be removed (passed as the first argument).
#
#USERDEL_CMD	/usr/sbin/userdel_local

#
# If useradd should create home directories for users by default
# On RH systems, we do. This option is overridden with the -m flag on
# useradd command line.
#
CREATE_HOME	yes    #此项是指是否创建用户主目录,yes为创建,no为不创建。

# This enables userdel to remove user groups if no members exist.
#
USERGROUPS_ENAB yes  #会用和用户名相同的名字创建用户组

# Use SHA512 to encrypt password.
ENCRYPT_METHOD SHA512   #用sha512加密算法

#综上:新建用户的相关文件
/etc/default/useradd
/etc/skel/*
/etc/login.defs

范例:使用newusers命令批量创建用户

#使用命令之前需要创建包含新用户的文件,假如是/root/newuserfile,文件内容如下:
[root@Rocky8 ~]# vim /root/newuserfile 
[root@Rocky8 ~]# cat /root/newuserfile 
linuxcool0:x:520:520::/home/zhangsan0:/bin/bash
linuxcool1:x:521:521::/home/zhangsan1:/bin/bash
linuxcool2:x:521:521::/home/zhangsan2:/bin/bash
#使用此文件批量创建用户
[root@Rocky8 ~]# newusers /root/newuserfile 
[root@Rocky8 ~]# id linuxcool0
uid=520(linuxcool0) gid=520(linuxcool0) groups=520(linuxcool0)
[root@Rocky8 ~]# id linuxcool1
uid=521(linuxcool2) gid=521(linuxcool1) groups=521(linuxcool1)
[root@Rocky8 ~]# id linuxcool2
uid=521(linuxcool2) gid=521(linuxcool1) groups=521(linuxcool1)

范例:

#创建指定的用户信息,但不创建家目录,亦不让登录系统
[root@Rocky8 ~]# useradd -M -s /sbin/nologin user2
[root@Rocky8 ~]# id user2
uid=1002(user2) gid=1002(user2) groups=1002(user2)
#创建指定的用户信息,并自定义UID值
[root@Rocky8 ~]# useradd -u 6688 user3
[root@Rocky8 ~]# id user3
uid=6688(user3) gid=6688(user3) groups=6688(user3)
#创建用户前先建组,可以确保组ID是己知的
[root@Rocky8 ~]# groupadd -g 336 -r mysql
[root@Rocky8 ~]# getent group mysql
mysql:x:336:
[root@Rocky8 ~]# getent gshadow mysql
mysql:!::
#创建指定的用户信息,并追加指定组为该账户的扩展组
[root@Rocky8 ~]# useradd -G mysql user4
[root@Rocky8 ~]# id user4
uid=6689(user4) gid=6689(user4) groups=6689(user4),336(mysql)
#创建指定的用户信息,并指定过期时间
[root@Rocky8 ~]# useradd -e "2025/05/05" user5
[root@Rocky8 ~]# id user5
uid=6690(user5) gid=6690(user5) groups=6690(user5)
[root@Rocky8 ~]# getent passwd user5
user5:x:6690:6690::/home/user5:/bin/bash
[root@Rocky8 ~]# getent shadow user5
user5:!!:19390:0:99999:7::20213:
#创建多项定义的用户
[root@Rocky8 ~]# useradd -u 336 -g mysql -s /sbin/nologin -d /data/mysql -M -r mysql
[root@Rocky8 ~]# getent shadow mysql 
mysql:!!:19390::::::
[root@Rocky8 ~]# getent passwd mysql 
mysql:x:336:336::/data/mysql:/sbin/nologin
[root@Rocky8 ~]# getent group mysql 
mysql:x:336:user4
[root@Rocky8 ~]# getent gshadow mysql 
mysql:!::user4

1.1.2.2 用户属性修改usermod

usermod命令来自于英文词组“user modify”的缩写,其功能是用于修改用户帐户的属性。

语法:
usermod [options] LOGIN
#常见选项
-c|--comment COMMENT #修改注释
-d|--home HOME_DIR #修改家目录
-e|--expiredate EXPIRE_DATE #修改过期的日期,YYYY-MM-DD 格式
-f|--inactive INACTIVE #密码过期之后,账户被彻底禁用之前的天数,0 表示密码过期立即禁用,-1表示不使用此功能
-g|--gid GROUP #修改组
-G|--groups GROUPS #groupName|GID... 新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
-a|--append GROUP #将用户追加至上边 -G 中提到的附加组中,并不从其它组中删除此用户
-l|--lo
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值