用户和用户组

用户/用户组

【1】、 用户分类

  • 一般看用户名,本质要看用户uid,gid.
  • uid user id 用户id 相当于身份证号码. 也是我们最关注。
  • gid group id 组id,相当于户口本号码.
用户分类 uid 说明
root 固定是 0 权限高 /root/
普通用户 一般是>=1000 权限低,只能管理自己家目录 /home/xxx
虚拟用户(傀儡用户) 一般1-999之间,但实际上可以修改 无法登录,让服务,进程正常运行

用户的分类本质要看uid和命令解释器。

在Linux中可以允许同时登录多个系统

【2】、用户相关文件

/etc/passwd

sh 复制代码
[root@kylin-xu ~]# head -5 /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
第1列 第2列 第3-4列 第5列 第6列 第7列
用户名 x 密码标记 密码存放在/etc/shadow里 UID:GID 说明信息(可以为空) 用户家目录(root,普通用户即可) 命令解释器 /bin/bash 可以登录系统 /sbin/nologin 虚拟用户

/etc/shadow

sh 复制代码
[root@kylin-xu ~]# head -5 /etc/shadow
root:$6$h1B0FEVoIVn0B3in$SOWTbnl.z/rzXmiZYxnswdLiQduLYwXAguj3W1D3pON.8ptxGuedBD29BPGUVnOTobTOJAtDl5dDq9kcIGsT01::0:99999:7:::
bin:*:18699:0:99999:7:::
daemon:*:18699:0:99999:7:::
adm:*:18699:0:99999:7:::
lp:*:18699:0:99999:7:::

补充

常用的命令解释器

  • /bin/bash

  • /bin/sh

  • /bin/dash #ubt,debian命令解释器

    sh 复制代码
    xu@xu-ubuntu:~$ ll /bin/bash /bin/sh /bin/dash
    -rwxr-xr-x 1 root root 1396520 Mar 14  2024 /bin/bash*
    -rwxr-xr-x 1 root root  125688 Mar 23  2022 /bin/dash*
    lrwxrwxrwx 1 root root       4 Mar 23  2022 /bin/sh -> dash*
  • /sbin/nologin 虚拟用户

  • ..... /bin/csh /bin/tcsh /bin/xxxx

【3】、用户增删改查的命令

1、增加用户

  • 添加用户

  • 设置密码

  • 切换用户

  • 检查.

  • kylin、redhat

sh 复制代码
useradd  tom
grep  --color tom  /etc/passwd  /etc/shadow  /etc/group   /etc/gshadow 

# 设置密码,在kylin中给用户设置的密码,必须满足规定的复杂度要求
passwd   # 修改当前用户的密码
passwd 用户名  # 指定修改某一用户的密码,只能root用户使用

[root@kylin-xu ~]# passwd tom
更改用户 tom 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

# 切换用户,从root切换到普通用户,不管该普通用户的是否设置了密码,都是不需要输入密码的,但是从普通用户切换回root是需要密码的
# 切换用户后,如何退出?   快捷键:CTRL+d   命令:logout
# 查看当前系统的登录用户相关命令
# id命令
# whoami命令
[root@kylin-xu ~]# su - tom
[tom@kylin-xu ~]$ whoami
tom
[tom@kylin-xu ~]$ id
用户id=1000(tom) 组id=1000(tom) 组=1000(tom)
[tom@kylin-xu ~]$ su - root
密码:
上一次登录: 二 11月  5 11:46:43 -03 2024 tty1 上

[root@kylin-xu ~]# 注销
[tom@kylin-xu ~]$ logout
[root@kylin-xu ~]# 
  • Ubuntu
sh 复制代码
useradd 的时候不创建家目录,命令解释器是/bin/sh(/bin/dash)
# 虽然我们创建了用户,而且在 /etc/passwd中也有相关信息,但是他会在系统中去创建家目录,需要我们在创建用户时额外指定,家目录
# 而且我们可以看到在 Ubuntu 中用户的解释器默认是 sh,在Ubuntu中 /bin/sh  -->  /bin/dash,这和我们经常使用的bash 解释器是有区别的,因此我们还需要自己在创建用户时自己制定 解释器为 /bin/bash
root@xu-ubuntu:~# useradd tom
root@xu-ubuntu:~# grep tom /etc/passwd
tom:x:1001:1001::/home/tom:/bin/sh
root@xu-ubuntu:~# ll /home/tom
ls: cannot access '/home/tom': No such file or directory

useradd 
-s 指定命令解释器   
-m 表示在创建用户时同时创建家目录   用户  

useradd    -s /bin/bas -m   tom
root@xu-ubuntu:~# ll /home/tom -d
drwxr-x--- 2 tom tom 4096 Nov  6 07:00 /home/tom/
root@xu-ubuntu:~# grep tom /etc/passwd
tom:x:1001:1001::/home/tom:/bin/bash
useradd 说明
-s 指定命令解释器
-m 创建家目录
-M 不创建家目录
-u 指定uid,不指定uid的话,就是从上一个uid顺延 +1
-c 添加用户的增加说明信息
  • 添加 虚拟用户(命令解释器/sbin/nologin,不创建家目录),uid12306, abc
sh 复制代码
# kylin  redhat
useradd -u 12306  -s /sbin/nologin  -M abc  
[root@kylin-xu ~]# useradd -u 12306  -s /sbin/nologin  -M abc
[root@kylin-xu ~]# grep abc /etc/passwd
abc:x:12306:12306::/home/abc:/sbin/nologin
[root@kylin-xu ~]# ll /home/abc -d
ls: 无法访问 '/home/abc': 没有那个文件或目录

# ubuntu,在Ubuntu中由于它在创建用户时默认是自动创建家目录的,所以我们可以不加 -M 选项
root@xu-ubuntu:~# useradd -u 12306 -s /sbin/nologin abc
root@xu-ubuntu:~# grep abc /etc/passwd
abc:x:12306:12306::/home/abc:/sbin/nologin
root@xu-ubuntu:~# ll /home/abc -d
ls: cannot access '/home/abc': No such file or directory
  • su 与su -区别
sh 复制代码
su命令切换用户,一些环境变量没有更新
su - 的时候环境变量就更新。
  • passwd 红帽类系统 非交互改密码,只能 root 使用
sh 复制代码
echo   '0207xrzh!'  |passwd --stdin tom
  • passwd ubt,debian passwd命令没有--stdin需要使用chpasswd
sh 复制代码
# 首先需要把用户名和对应的密码写入文件中
echo "tom:123" > passwd.txt
cat passwd.txt | chpasswd

用户模板

在我们创建新的用户后,用户的家目录下是存在文件的

sh 复制代码
[root@kylin-xu ~]# ll /home/tom -a
总用量 20
drwx------ 2 tom  tom   97 11月  5 11:51 .
drwxr-xr-x 3 root root  17 11月  5 11:42 ..
-rw------- 1 tom  tom   27 11月  5 11:51 .bash_history
-rw-r--r-- 1 tom  tom   75  8月 25  2022 .bash_logout
-rw-r--r-- 1 tom  tom   71  8月 25  2022 .bash_profile
-rw-r--r-- 1 tom  tom  138  8月 25  2022 .bashrc
-rw-r--r-- 1 tom  tom  204  3月 22  2022 .zshrc

# 新创建的用户家目录下存在什么文件,取决于/etc/skel目录下的文件,/etc/skel 相当于是用户家目录的模板
# 我们可以修改/etc/skel下的内容,这样新创建的用户的家目录也就会发生改变
[root@kylin-xu ~]# cd /etc/skel/
[root@kylin-xu skel]# ls
[root@kylin-xu skel]# echo hello > readme.txt
[root@kylin-xu skel]# cd 
[root@kylin-xu ~]# useradd jerry
[root@kylin-xu ~]# ll /home/jerry/
总用量 4
-rw-r--r-- 1 jerry jerry 6 11月  5 14:26 readme.txt
[root@kylin-xu ~]# cat /home/jerry/readme.txt 
hello

2、删除

  • userdel 删除用户,默认不删除家目录。
  • userdel -r 删除用户与家目录。
  • 修改/etc/passwd用户名前加上 #号(注释)
sh 复制代码
userdel abc
userdel -r abc # 删除用户时,同时删除用户家目录


# 直接修改 /etc/passwd 删除用户,在对应行前加注释
[root@kylin-xu ~]# vim /etc/passwd
[root@kylin-xu ~]# id abc
id: "abc":无此用户
[root@kylin-xu ~]# vim /etc/passwd
[root@kylin-xu ~]# id abc
用户id=12306(abc) 组id=12306(abc) 组=12306(abc)

3、查看用户信息

  • whoami
  • id 查看用户uid,gid,查看用户是否存在,用户属于哪些组、附加组
  • w 查看谁登录了正在干啥,负载信息...
sh 复制代码
[root@kylin-xu ~]# w
# 2 users:有两个用户正在登录系统
# load average:平均负载,和CPU核心数进行比较  最近一分钟  最近五分钟  最近十五分钟
# up 13:12:运行时间
# TTY:虚拟终端,本地叫tty1,远程交pts
 12:22:21 up 13:12,  2 users,  load average: 0.01, 0.03, 0.04
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1      11:46   35:33   0.06s  0.06s -bash
root     pts/2     11:17    1.00s  0.13s  0.01s w
[root@kylin-xu ~]# tty
/dev/pts/2


# 云服务器
root@xu-ecs:~# w
 15:22:12 up 1 day, 10 min,  2 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
ecs-assi pts/1    -                Tue15   24:06m  0.01s  0.01s sudo su -
root     pts/2    60.28.43.165     15:22    1.00s  0.01s  0.00s w
  • last 查看用户登录情况
sh 复制代码
[root@kylin-xu ~]# last
root     tty1                          Tue Nov  5 11:46   still logged in
root     pts/2        192.168.121.1    Tue Nov  5 11:17   still logged in
。。。
reboot   system boot  4.19.90-52.22.v2 Mon Nov  4 07:22 - 14:40  (07:17)
。。。
  • lastlog 查看所有用户登录情况
sh 复制代码
[root@kylin-xu ~]# lastlog
用户名           端口     来自             最后登录时间
root             pts/0    192.168.121.1    二 11月  5 12:31:22 -0300 2024
bin                                        **从未登录过**
daemon                                     **从未登录过**
adm                                        **从未登录过**
lp                                         **从未登录过**
sync                                       **从未登录过**
shutdown                                   **从未登录过**
halt                                       **从未登录过**
mail                                       **从未登录过**
operator                                   **从未登录过**
games                                      **从未登录过**
ftp                                        **从未登录过**
nobody                                     **从未登录过**
systemd-coredump                           **从未登录过**
systemd-network                            **从未登录过**
systemd-resolve                            **从未登录过**
systemd-timesync                           **从未登录过**
tss                                        **从未登录过**
libstoragemgmt                             **从未登录过**
rpc                                        **从未登录过**
dbus                                       **从未登录过**
polkitd                                    **从未登录过**
unbound                                    **从未登录过**
named                                      **从未登录过**
setroubleshoot                             **从未登录过**
apache                                     **从未登录过**
cockpit-ws                                 **从未登录过**
chrony                                     **从未登录过**
abrt                                       **从未登录过**
dhcpd                                      **从未登录过**
rpcuser                                    **从未登录过**
sshd                                       **从未登录过**
pesign                                     **从未登录过**
tcpdump                                    **从未登录过**
nginx                                      **从未登录过**
tom              pts/2                     二 11月  5 11:47:09 -0300 2024
abc                                        **从未登录过**

4、修改

  • 对已有的用户修改信息.useradd.
  • usermod修改。

参数和useradd命令的参数类似

【4】、用户安全防护

1、sudo

提权,给普通用户使用

  • 普通用户可以临时成为root,去运行对应的命令。

  • 类似于皇帝给大臣发尚方大宝剑.

  • root用户去配置,普通用户进行使用。

  • 授权xu用户,以root权限运行tail,cat,less,head.more,grep

sh 复制代码
[root@kylin-xu ~]# passwd xu
更改用户 xu 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
  • root授权,visudo 相当于运行 vi /etc/sudoers,我们建议使用visudo去进行修改他可以对我们的修改进行,不建议使用/etc/sudoers,
sh 复制代码
# 在root用户进行授权,具体授权的命令我们需要写绝对路径,多个命令之间使用逗号和空格分开
[root@kylin-xu ~]# visudo 
xu      ALL=(ALL)       /bin/tail, /bin/less, /bin/more
[root@kylin-xu ~]# su - xu
上一次登录: 二 11月  5 16:00:10 -03 2024 pts/0 上
[xu@kylin-xu ~]$ sudo -l   # 通过 sudo -l 查看当前可以执行什么命令

我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

[sudo] xu 的密码:
匹配 %2$s 上 %1$s 的默认条目:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE
    KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION
    LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE
    LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

用户 xu 可以在 kylin-xu 上运行以下命令:
    (ALL) /bin/tail, /bin/less, /bin/more


# 在使用被授权的命令时,需要加上 sudo。
[xu@kylin-xu ~]$ sudo tail -1 /var/log/secure  
Nov  5 16:21:58 kylin-xu sudo[190100]: pam_unix(sudo:session): session closed for user root

在对普通用户进行授权时,不要给很大,需要啥给啥

小结:

  • 给普通用户配置sudo权限。
  • root用户通过visudo进行授权,vi/vim /etc/sudoers
  • 普通用户:sudo + 命令

ubt配置visudo 默认使用的是nano编辑器

在Ubuntu中修改 /etc/sudoers 时默认使用的时nano编辑器,这是可以修改的

ini 复制代码
Defaults        env_editor,editor=/bin/vim
:wq!  强制保存退出
sh 复制代码
# 之后就可以使用 visudo 打开了
root@xu-ubuntu:~# visudo 
visudo: /etc/sudoers.tmp unchanged

授权xu所有命令并不需要输入密码

sudo -k : 清除缓存,如果没有设置免密,在第一次输入密码后,会有缓存,在一定时间内也是不需要输入密码

sh 复制代码
visudo
xu      ALL=(ALL)       NOPASSWD: ALL
# ALL=(ALL)
# 所有主机=(任何用户)
[xu@kylin-xu ~]$ sudo -k
[xu@kylin-xu ~]$ sudo -l 
匹配 %2$s 上 %1$s 的默认条目:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE
    KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION
    LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE
    LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

用户 xu 可以在 kylin-xu 上运行以下命令:
    (ALL) NOPASSWD: ALL
  • 小结:
    • 给普通用户配置sudo权限。
    • root用户通过visudo进行授权,vi/vim /etc/sudoers
    • 普通用户:sudo + 命令
    • 配置写/etc/sudoers最后