用户/用户组
【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
[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
[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命令解释器
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
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
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 directoryuseradd
-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
# 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 -区别
su命令切换用户,一些环境变量没有更新
su - 的时候环境变量就更新。
- passwd 红帽类系统 非交互改密码,只能 root 使用
echo '0207xrzh!' |passwd --stdin tom
- passwd ubt,debian passwd命令没有--stdin需要使用chpasswd
# 首先需要把用户名和对应的密码写入文件中
echo "tom:123" > passwd.txt
cat passwd.txt | chpasswd
用户模板
在我们创建新的用户后,用户的家目录下是存在文件的
[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用户名前加上 #号(注释)
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 查看谁登录了正在干啥,负载信息...
[root@kylin-xu ~]# w
# 2 users:有两个用户正在登录系统
# load average:平均负载,和CPU核心数进行比较 最近一分钟 最近五分钟 最近十五分钟
# up 13:12:运行时间
# TTY:虚拟终端,本地叫tty1,远程交pts12: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:~# w15: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 查看用户登录情况
[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 查看所有用户登录情况
[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
[root@kylin-xu ~]# passwd xu
更改用户 xu 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
- root授权,visudo 相当于运行 vi /etc/sudoers,我们建议使用
visudo
去进行修改他可以对我们的修改进行,不建议使用/etc/sudoers,
# 在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 HISTSIZEKDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATIONLC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGELINGUAS _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编辑器,这是可以修改的
Defaults env_editor,editor=/bin/vim
:wq! 强制保存退出
# 之后就可以使用 visudo 打开了
root@xu-ubuntu:~# visudo
visudo: /etc/sudoers.tmp unchanged
授权xu所有命令并不需要输入密码
sudo -k : 清除缓存,如果没有设置免密,在第一次输入密码后,会有缓存,在一定时间内也是不需要输入密码
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 HISTSIZEKDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATIONLC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGELINGUAS _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最后