一.账户与组的概念
Linux系统对账户与组的管理通过ID实现。在Linux中,用户ID被称为UID,组ID被称为GID、其中UID为0,代表超级管理员,也成root用户,1~4777会被保留,创建的普通用户ID从500算起。
Linux组有基本组和附加组,一个用户只能加入一个基本组,但同时可以加入多个附加组,创建用户时,系统默认创建同名的组,并设置用户加入该基本组里
用户:
超级用户:root,UID为0
系统用户:用来管理和运行服务,系统用户的shell为/sbin/noligin,不让该用户登录,UID为201-999
普通用户:1000-60000,添加一般用户时,默认用户创建主目录和邮箱(/home/用户名)(/var/mail/用户名)
二.创建用户和组
使用useradd创建用户,groupadd创建组用户(注:创建账户及组时需要管理员权限)
2.1 useradd:创建新的Linux用户
语法:useradd [选项] 用户名
-c comment,用户的描述,短用户名,一般为账户全称
-d 指定用户的家目录,默认为/home/用户名
-e 设置账户失效时期,格式为YYYY-MM-DD
-g 指定用户的基本组
-G 指定用户的附加组,多个附加组用逗号隔开
-M 不创建账户家目录,一般与-s结合使用
-s 指定用户的shell,默认为bash
-u 指定uid
[root@localhost ~]# cat /etc/passwd
#看最后一行就是用户
rhcsa:x:1000:1000:rhcsa:/home/rhcsa:/bin/bash
[root@localhost ~]# useradd wyy
rhcsa:x:1000:1000:rhcsa:/home/rhcsa:/bin/bash
wyy:x:1001:1001::/home/wyy:/bin/bash
#设置系统账号为admin,全称为administrator,家目录为/home/admin,用户失效时间为2022年7月14日,账户基本组为root,附加组为bin,adm,mail
[root@localhost ~]# useradd -c administrator -d /home/admin -e 2022-7-14 -g root -G bin,adm,mail admin
#创建无法不能登陆操作系统的用户(就不配有家目录)
[root@localhost ~]# useradd -s /sbin/nologin -M zhangsan
2.2 groupadd:创建组用户
语法:groupadd [选项] 组名称
选项:
-g 设置组ID
[root@localhost ~]# groupadd tom
[root@localhost ~]# groupadd -g 1001 jerry
2.3 id:显示账户及组信息
语法:id 用户名
[root@localhost ~]# useradd wyy -G tom 用户存在,加不进去
useradd: user 'wyy' already exists
[root@localhost ~]# useradd xiaolan -G tom
[root@localhost ~]# id xiaolan
uid=1004(xiaolan) gid=1005(xiaolan) groups=1005(xiaolan),1004(tom)
2.4 用户切换
当普通用户需要超级用户的权限时,怎样进行切换管理工作呢?
命令一:
su:切换用户身份的命令
语法:su [选项] [-c 命令] [username]
选项:
- 单纯使用,如:“su -”,代表使用login-shell的变量文件读取方式来登录系统;如果用户名没有写,代表切换到root用户
-l 与-相似,但后面需要加切换的用户账号
-m 跟-p一样,表示使用当前环境边设置,而不读取新用户的配置文件
-c 仅进行一次命令,所以-c后面可以加命令
我们以普通用户登录系统后,当要是系统中执行useradd添加用户时,会发现用户没有权限,只有root才能使用,怎么办呢?
解决办法:
1)退出用户,重新以root用户登录
2)在用户下使用su来切换到root下进行添加用户的工作,等工作完成后,再退出root用户
[root@localhost ~]# useradd wyy
[root@localhost ~]# su - wyy
[wyy@localhost ~]$ exit
logout
[root@localhost ~]# su - wyy
Last login: Thu Jul 14 07:52:50 EDT 2022 on pts/0
[wyy@localhost ~]$ su - root #看他要密码啦
Password:
#su跟su - 不一样,su到root下,su -到家目录下
[root@localhost ~]# su wyy
[wyy@localhost root]$ exit
exit
[root@localhost ~]# su - wyy
Last login: Thu Jul 14 07:54:50 EDT 2022 on pts/0
[wyy@localhost ~]$ exit
logout
[root@localhost ~]# su - wyy
Last login: Thu Jul 14 07:54:59 EDT 2022 on pts/0
[wyy@localhost ~]$ ls -a
. .. .bash_history .bash_logout .bash_profile .bashrc
[wyy@localhost ~]$ su - root -c "cat /etc/shadow"
Password:
root:$6$rGVB3x285aWsiH5I$aKNdnypA7BuHseNumAuvrk3kF5.kdwZCFHuEHVUX2M8MkZ7YulF384UvtPWU.fmZ8omW5BmvYCL7rJP.m79dK0:19187:0:99999:7:::
bin:*:18367:0:99999:7:::
daemon:*:18367:0:99999:7:::
adm:*:18367:0:99999:7:::
lp:*:18367:0:99999:7:::
sync:*:18367:0:99999:7:::
命令二:
sudo:切换用户
su致命缺点:
1)普通用户需要知道root密码才能切换到root用户,密码就泄露了,被刀都不知道啥时候刀的
2)使用su切换身份,无法对切换后的身份做精细控制,拿到超级权限的人可以为所欲为,甚至更改root密码,让真正管理员无法再拥有root权限
那么怎么办呢?这时候sudo命令就诞生了,可以对超级用户权限分类有针对性的授权给普通用户,并且普通用户不需要知道root密码
#使用超级用户来执行命令(一般时root用户),想要使用sudo在/etc/sudoers中添加用户,先利用su - 进入root用户,在输入vim sudo编写sudoers文件
[root@localhost ~]# vi /etc/sudoers
## Sudoers allows particular users to run various commands as
## users or groups.
##
## This file must be edited
......
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL #root代表用户,ALL代表主机,括号里的是以什么身份运行,最后一个ALL,是要执行什么命令
redhat ALL=(ALL) /usr/sin/useradd #要写全路径,这一行我补的
......
[root@localhost ~]# whereis useradd #怎么看路径
useradd: /usr/sbin/useradd /usr/share/man/man8/useradd.8.gz
三.修改账户及组
3.1 passwd:更新账户认证信息
语法:passwd [选项] [账户名称]
选项:
-l 锁定账户,仅root使用
--stdin 从文件或管道读取信息
-u 解锁账户
-d 快速清空账户密码,仅root使用
[root@localhost ~]# echo "12345" | passwd --stdin wyy #有弊端,看历史命令能力看到密码
Changing password for user wyy.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# history
47 echo "12345" | passwd --stdin wyy
48 history
[root@localhost ~]# passwd
Changing password for user root.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
Sorry, passwords do not match.
New password:
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]# passwd -l wyy
Locking password for user wyy.
passwd: Success
[root@localhost ~]# passwd -u wyy
Unlocking password for user wyy.
passwd: Success
3.2 gpasswd:修改组用户
语法:gpasswd [选项] [组名]
选项:
-a 添加用户到组
-d 将指定用户移出本组(从附加组移出)
-M 设置组成员列表
-A 指定组管理员为那个用户
-r 删除组密码
[root@localhost ~]# id xiaolan
uid=1004(xiaolan) gid=1005(xiaolan) groups=1005(xiaolan),1004(tom)
[root@localhost ~]# gpasswd -a wyy tom
Adding user wyy to group tom
[root@localhost ~]# id wyy
uid=1001(wyy) gid=1001(wyy) groups=1001(wyy),1004(tom)
[root@localhost ~]# gpasswd tom
Changing the password for group tom
New Password:
Re-enter new password:
3.3 newgrp:登录一个新组
语法:newgrp [组名]
退出登录的组:exit
[root@localhost ~]# mkdir 111file
[root@localhost ~]# newgrp tom
[root@localhost ~]# mkdir 123
[root@localhost ~]# ll #注意看这里,111file组用户是root,而123组用户是tom
total 3196
drwxr-xr-x. 2 root root 6 Jul 14 07:22 111file
drwxr-xr-x. 2 root tom 6 Jul 14 07:23 123
-rw-------. 1 root root 1563 May 31 03:22 anaconda-ks.cfg
-rw-r--r--. 1 root root 0 Jun 21 02:16 file2
-rw-r--r--. 2 root root 10 Jun 21 02:02 filebak
-rw-r--r--. 2 root root 10 Jun 21 02:02 filebak1
-rw-r--r--. 1 root root 447041 Jul 12 01:41 'WPSͼƬƴͼ(2).png'
-rw-r--r--. 1 root root 2809450 Jul 12 01:21 wyy.tar.bz2
[root@localhost ~]# exit #必须要退出,必须要退出
exit
[root@localhost ~]# #退出之后是这个,再退就退出登陆了,用的是第三方软件的话
3.4 usermod:修改账户信息(跟useradd相同)
语法:usermod [选项] 账户名称
选项:
-d 修改账户家目录
-e 修改账户失效信息
-g 指定用户的基本组
-G 指定用户的附加组,多个附加组用逗号隔开
-s 指定用户的shell,默认为bash
-u 指定uid
3.5 groupmod:修改组用户
语法:groupmod -n 新组名 -g gid 原组名
选项:
-n 指定新组名
-g 修改gid信息
[root@localhost ~]# id wyy
uid=1001(wyy) gid=1001(wyy) groups=1001(wyy),1004(tom)
[root@localhost ~]# id xiaolan
uid=1004(xiaolan) gid=1005(xiaolan) groups=1005(xiaolan),1004(tom)
[root@localhost ~]# groupmod -n tom1 tom
[root@localhost ~]# id xiaolan
uid=1004(xiaolan) gid=1005(xiaolan) groups=1005(xiaolan),1004(tom1)
[root@localhost ~]# id wyy
uid=1001(wyy) gid=1001(wyy) groups=1001(wyy),1004(tom1)
四.删除账户及组
4.1 userdel:删除账户及组相关信息
语法:userdel [选项] 账户名称
选项:
-r 删除账户及相关文件(删的是家目录)
[root@localhost ~]# userdel xiaolan
[root@localhost ~]# id xiaolan id: ‘xiaolan’: no such user
[root@localhost ~]# ls /home/ admin bbb rhcsa rhcsacd wyy
[root@localhost ~]# userdel -r wyy
[root@localhost ~]# ls /home/ admin bbb rhcsa rhcsacd
4.2 groupdel:删除组用户
语法:groupdel 组名
[root@localhost ~]# groupdel tom1
[root@localhost ~]# id wyy uid=1001(wyy) gid=1001(wyy) groups=1001(wyy)
五.账户与组文件解析
5.1 账户信息文件
账户信息文件被保存在/etc/passwd文件中,通过cat来查肯文件如下:
[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
文件以:分隔符
第一列 root 为用户名称,第二列为密码占位符
第二列 x 要用密码登录,为空时,需要密码即可登录
第三列 0 UID
第四列 0 GID
第五列 root 为用户附加基本信息,一般为储存账户名全称、联系方式等信息
第六列 /root 用户家目录位置
第七列 /bin/bash 账户登录shell,/bin/bash账户可登录,/sbin/nologin表示账户无法登录系统
5.2 账户密码文件
账户密码文件在/etc/shadow文件中,通过cat来查看文件如下:
[root@localhost ~]# cat /etc/shadow
root:$6$rGVB3x285aWsiH5I$aKNdnypA7BuHseNumAuvrk3kF5.kdwZCFHuEHVUX2M8MkZ7YulF384UvtPWU.fmZ8omW5BmvYCL7rJP.m79dK0:19187:0:99999:7:::
bin:*:18367:0:99999:7::
daemon:*:18367:0:99999:7:::
adm:*:18367:0:99999:7:::
lp:*:18367:0:99999:7:::
sync:*:18367:0:99999:7:::
shutdown:*:18367:0:99999:7:::
halt:*:18367:0:99999:7:::
………………
文件以:分隔符
第一列 用户名称
第二列 密码(当密码为!!,设置密码后加密显示)
第三列 上次修改密码的时间到1970年1月1号的时间距离
第四列 密码最短的有效天数(0代表无限制)
第五列 密码最长的有效天数(默认为99999可以理解为永不过期)
第六列 过期的告诫天数(提前7天警告,进去警告日期后仍可以使用旧密码登录)
第七列 密码过期后的宽限天数(会预留几天改密码,但无法使用旧密码)
第八列 用户失效时间(从1970年1月1号起开始多少天时效)
第九列 暂时保留使用
5.3 组账户信息文件
账户信息文件被保存在/etc/proup文件中,通过cat来查肯文件如下:
[root@localhost ~]# cat /etc/group
root:x:0:
bin:x:1:admin
daemon:x:2:
sys:x:3:
adm:x:4:admin
tty:x:5:
disk:x:6:
lp:x:7:
………………
文件以:分隔符
第一列 组用户名称
第二列 密码占位符
第三列 GID
第四列 组成员信息(注:仅显示附加,基本成员不显示)
5.4 组账户密码文件
账户信息文件被保存在/etc/gshadow文件中,通过cat来查肯文件如下:
[root@localhost ~]# cat /etc/gshadow
root:::
bin:::admin
daemon:::
sys:::
adm:::admin
tty:::
disk:::
lp:::
mem:::
文件以:分隔符
第一列 组用户名称
第二列 密码
第三列 组管理员
第四列 组成员信息(注:仅显示附加,基本成员不显示)
通过设置组密码,添加组管理员
[root@localhost ~]# gpasswd wyy
Changing the password for group wyy
New Password:
Re-enter new password:
[root@localhost ~]# gpasswd -A wyy wyy