用户/用户组
【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 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
# 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,远程交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 查看用户登录情况
[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 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编辑器,这是可以修改的
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 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最后