Linux 账号和权限管理(上)

在这里插入图片描述

前言

这篇文章详细介绍了Linux账号和权限管理的一部分即用户和组的相关知识,总结了用户账号和组账号的具体管理操作。管理目录和文件的属性会接着出,如果对你有帮助的话还请点个赞支持一下博主哟,感谢???

管理用户和主账号

用户和组账号概述

用户帐号
用户帐户是用户的身份标识,用户通过用户帐户可以登录到系统,并且访问已经被授权的资源。系统依据账户来区分属于每个用户的文件、进程、任务,并给每个用户提供特定的工作环境,使每个用户的工作都能各自独立不受干扰地工作。

  • 超级用户 //root
  • 普通用户 //自己新建的用户都属于普通用户
  • 程序用户 //权限最低,一般只能操作程序相关联的文件

组帐号
组群是具有相同特性的用户的逻辑集合,使用组群有利于系统管理员按照用户的特性组织和管理用户,提高工作效率。

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

组的特点:

在为资源授权时可以把权限赋予某个组群,组群中的成员即可自动获得这种权限。
一个用户账户至少属于一个用户组,当是多个组群的成员时,其中某个组群是该用户的主组群(私有组群),其他组群是该用户的附属组群(标准组群)

用户和组群ID
每一个用户都有一个唯一的身份标识,称为用户ID(UID);每一个用户组也有一个唯一的身份标识,称为用户组ID(GID)。这些都是系统在创建时就自动生成的。

用户账号管理

用户账号文件

文件/etc/shadow

保存用户名称、宿主目录、登录Shell等基本信息

  • 文件位置:/etc/passwd
  • 每一行对应一个用户的帐号记录
[root@localhost ~]# 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
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
saslauth:x:997:76:Saslauthd user:/run/saslauthd:/sbin/nologin

那每一行都包含了什么信息呢?
在这里插入图片描述
可以观察到root的UID和GID都是0
普通用户UID和GID默认从1000开始

文件/etc/shadow

我们之前观察到用户信息里有个密码占位符x,其真正的密码就在/etc/shadow文件里,它保存用户的密码、账号有效期等信息

  • 文件位置:/etc/shadow
  • 每一行对应一个用户的密码记录
[root@localhost ~]# cat /etc/shadow
root:$6$GrsORQwY6Wlm2Asp$Tjup.pBpS4fvA..IPSlgxTg3DWN6uPplRqk9P4f1iBKpoOB/QgGkLke6p06WR3laM/xtmIUIf64pGV.o9Raww1::0:99999:7:::
bin:*:17632:0:99999:7:::
daemon:*:17632:0:99999:7:::
adm:*:17632:0:99999:7:::
lp:*:17632:0:99999:7:::
sync:*:17632:0:99999:7:::
shutdown:*:17632:0:99999:7:::
halt:*:17632:0:99999:7:::
mail:*:17632:0:99999:7:::
operator:*:17632:0:99999:7:::
games:*:17632:0:99999:7:::
ftp:*:17632:0:99999:7:::
nobody:*:17632:0:99999:7:::
systemd-network:!!:18822::::::
dbus:!!:18822::::::
polkitd:!!:18822::::::
sshd:!!:18822::::::
postfix:!!:18822::::::
chrony:!!:18822::::::
saslauth:!!:19277::::::
[root@localhost ~]# cat /etc/shadow
root:$6$GrsORQwY6Wlm2Asp$Tjup.pBpS4fvA..IPSlgxTg3DWN6uPplRqk9P4f1iBKpoOB/QgGkLke6p06WR3laM/xtmIUIf64pGV.o9Raww1::0:99999:7:::
bin:*:17632:0:99999:7:::
daemon:*:17632:0:99999:7:::
adm:*:17632:0:99999:7:::
lp:*:17632:0:99999:7:::
sync:*:17632:0:99999:7:::
shutdown:*:17632:0:99999:7:::
halt:*:17632:0:99999:7:::
mail:*:17632:0:99999:7:::
operator:*:17632:0:99999:7:::
games:*:17632:0:99999:7:::
ftp:*:17632:0:99999:7:::
nobody:*:17632:0:99999:7:::
systemd-network:!!:18822::::::
dbus:!!:18822::::::
polkitd:!!:18822::::::
sshd:!!:18822::::::
postfix:!!:18822::::::
chrony:!!:18822::::::
saslauth:!!:19277::::::

字段1:用户帐号的名称
字段2:加密的密码字串信息
字段3:上次修改密码的时间
字段4:密码的最短有效天数,默认值为0
字段5:密码的最长有效天数,默认值为99999
字段6:提前多少天警告用户口令将过期,默认值为7
字段7:在密码过期之后多少天禁用此用户
字段8:帐号失效时间,默认值为空
字段9:保留字段(未使用)
默认只有root用户能够读取文件中的内容,并且不允许root直接编辑该文件中的内容
上次修改密码的时间,表示从1970年01月01日(可理解为Unix系统的诞生日)算起到最近一次修改密码时间隔的天数

添加用户账号 useradd

useradd命令

useradd  [选项]...  用户名
  • 常用命令选项
    • -u:指定 UID 标记号
    • -d:指定宿主目录,缺省为 /home/用户名
    • -e:指定帐号失效时间
    • -g:指定用户的基本组名(或GID号)(默认基本组同名)
    • -G:指定用户的附加组名(或GID号)
    • -M:不为用户建立并初始化宿主目录(不希望它登录系统,一般是程序用户)
    • -s:指定用户的登录Shell,/sbin/nologin为不可登陆,/bin/bash可以登录(默认可以登录系统)

现在如果指定mike的基本组为mike,并加入到ftpuser组,且指定家目录为/ftphome/mike,不允许mike通过本地登录服务器,则命令为

[root@localhost ~]# useradd -d /ftphome/mike -G ftpuser -s /sbin/nologin mike

设置/更改用户口令 passwd

passwd命令

passwd  [选项]...  用户名

常用命令选项
-d:清空用户的密码,使之无需密码即可登录
-l:锁定用户帐号
-S:查看用户帐号的状态(是否被锁定)
-u:解锁用户帐号(当解锁后需要重新修改密码或者清除密码) //centos 7不需要修改密码

修改用户账号的属性 usermod

usermod命令/主要修改已存在用户的信息

usermod  [选项]...  用户名

常用命令选项
-l:更改用户帐号的登录名称
-L:锁定用户账户
-U:解锁用户账户
以下选项与useradd命令中的含义相同
-u、-d、-e、-g、-G、-s

[root@localhost ~]# cat /etc/shadow
hushaotian:$6$Fy5k8CjT$ikrrPug0QZQ6p2Ph7Hc3vIB0PiMkWBtF/dKN9Lx7LSb4tCm39NRBN59.4sKePJD23QUzTQu15PoQdOQvNJjJ3/:19278:0:99999:7::25567:   
//只展示这个账户密码的信息,可以看到没有无效期限
[root@localhost ~]# usermod -e 2040-01-01 hushaotian
[root@localhost ~]# cat /etc/shadow
hushaotian:$6$Fy5k8CjT$ikrrPug0QZQ6p2Ph7Hc3vIB0PiMkWBtF/dKN9Lx7LSb4tCm39NRBN59.4sKePJD23QUzTQu15PoQdOQvNJjJ3/:19278:0:99999:7::25567:
//无效期有时间期限了

删除用户账号 userdel

userdel命令

userdel  [-r]  用户名
//添加 -r 选项时,表示连用户的宿主目录一并删除
[root@localhost ~]# useradd stu01
[root@localhost ~]# ls -ld /home/stu01/
drwx------ 2 stu01 stu01 4096 09-09 12:38 /home/stu01/
[root@localhost ~]# userdel -r stu01
[root@localhost ~]# ls -ld /home/stu01/
ls: /home/stu01/: 没有那个文件或目录

建议一般不要加-r,免得有些需要的数据丢失

用户账号的初始配置文件

  • 文件来源
    新建用户帐号时,从 /etc/skel 目录中复制而来(当我们需要在所有新建账户目录中都加东西时,可以在这里面创建)
  • 主要的用户初始配置文件(.开头的为隐藏文件,通过ls -a查看)
    ~/.bash_profile //用户登录时执行的脚本
    ~/.bashrc //用户切换是执行的脚本
    ~/.bash_logout //用户退出系统时执行的脚本
    以上三个文件从 /etc/skel 目录中复制而来
    /etc/profile //用户登录时执行的脚本
    /etc/bashrc //用户切换时执行的脚本

组账号管理

组账号文件

与用户帐号文件相类似
/etc/group:保存组帐号基本信息
/etc/gshadow:保存组帐号的密码信息

[root@localhost ~]# grep "adm" /etc/group
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
//adm是组账号名,root,adm,daemon是组成员列表

添加组账号 groupadd

groupadd命令

groupadd  [-g GID](非必须)  组账号名
//添加组帐号 chengdu
[root@localhost ~]# [root@localhost ~]# groupadd chengdu
[root@localhost ~]# cat etc/group
hushaotian:x:1000:

添加删除组成员 gpasswd

gpasswd命令
设置组帐号密码(极少用)、添加/删除组成员

gpasswd  [选项] 用户账号名  组帐号名

常用命令选项:
-a:向组内添加一个用户
-d:从组内删除一个用户成员
-M:定义组成员列表,以逗号分隔

[root@localhost ~]# gpasswd -a hushaotian chengdu
正在将用户“hushaotian”加入到“chengdu”组中
[root@localhost ~]# cat /etc/group 
chengdu:x:1001:hushaotian
//删除
[root@localhost ~]# gpasswd -d hushaotian chengdu
正在将用户“hushaotian”从“chengdu”组中删除
[root@localhost ~]# cat /etc/group
chengdu:x:1001:

删除组账号 groupdel

groupdel命令

groupdel  组帐号名
[root@localhost ~]# groupdel chengdu
//任何用户的基本组都不可以直接删除

查询账号信息

  • id命令 查询用户身份标识
id  [用户名]
[root@localhost ~]# id hushaotian
uid=1000(hushaotian) gid=1000(hushaotian)=1000(hushaotian)
  • groups命令 查询用户所属的组
groups  [用户名]
[root@localhost ~]# groups hushaotian
hushaotian : hushaotian
  • finger命令 查询用户帐号的详细信息
finger  [用户名]
[root@localhost ~]# finger hushaotian    
Login: hushaotian                       Name: 
Directory: /home/hushaotian             Shell: /bin/bash
Last login 五 1014 01:04 (CST) on tty1
No mail.
No Plan.
  • users、who、w命令 查询已登录到主机的用户信息
[root@localhost ~]# users
root
[root@localhost ~]# who
root     pts/0        2022-10-18 05:20 (192.168.133.1)
hushaotian tty1         2022-10-18 05:41
//pts 代表远程登录;tty 代表本地登录

版权声明:本文为weixin_54100601原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。