Linux(1):用户(1)
Linux ben-u 5.13.0-35-generic #40~20.04.1-Ubuntu SMP
--
目录
序章
查看所有用户
查看所有用户密码
查看所有用户组
查看用户所属用户组
和sudo相关
序章
Linux用户、用户组
注,如未说明,均在 20.04.1-Ubuntu 下测试。ben发布于博客园
注,测试用的账号为 ben。
查看所有用户
$ cat /etc/passwd
每一行代表一个用户,每个用户的信息使用 英文冒号 分隔——6个冒号,分成7部分。ben发布于博客园
部分结果:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
...
sssd:x:126:131:SSSD system user,,,:/var/lib/sss:/usr/sbin/nologin
ben:x:1000:1000:ben,,,:/home/ben:/bin/bash
redis:x:127:134::/var/lib/redis:/usr/sbin/nologin
sshd:x:128:65534::/run/sshd:/usr/sbin/nologin
解读 root 账号 的信息:ben发布于博客园
root : x : 0 : 0 : root : /root : /bin/bash
账户名 : 密码 : UID : GID : 注释性描述 : 宿主目录 : 用户使用的shell
用户种类
1、超级用户(root,UID=0)
2、普通用户(UID 500-60000)
3、伪用户(UID 1-499)
使用 man passwd 命令可以查看:ben发布于博客园
这个是查看 passwd 命令的信息,不对,但是,在其 SEE ALSO 提到 passwd(5),使用下面的命令查看 /etc/passwd 文件的说明信息。
$ man 5 passwd
可以看到 /etc/passwd 文件的详细说明。
请看 参考资料#2。
查看所有用户密码
$ sudo cat /etc/shadow
每一行一个用户的密码信息,由英文逗号组成,共9个字段。ben发布于博客园
密码不是明文。
部分结果:
[sudo] password for ben:
root:!:18933:0:99999:7:::
daemon:*:18858:0:99999:7:::
bin:*:18858:0:99999:7:::
sys:*:18858:0:99999:7:::
sync:*:18858:0:99999:7:::
games:*:18858:0:99999:7:::
...
sssd:*:18858:0:99999:7:::
ben:$6$lui1juWYJ6YrOTt6$08.W9mHBkfiAKFvqS2vplQM2abWw2a8ytdndh171fE6xr1/Rs.Rp1VZeioe/oM6gm3Uh8Dd7qD9tshW9L88Yh1:18933:0:99999:7:::
systemd-coredump:!!:18933::::::
redis:*:18934:0:99999:7:::
sshd:*:18934:0:99999:7:::
git:!:18941:0:99999:7:::
输入 man shadow 命令可以查看说明信息:ben发布于博客园
第一个字段为用户名,第二个字段为密码,其中,其值为 !、* (英文符号)时表示该用户无法使用密码方式登录(但可以使用其它方式)。
If the password field contains some string that is not a valid result of crypt(3), for instance ! or *,
the user will not be able to use a unix password to log in (but the user may log in the system by other
means).
可以看到,root 等账号 是以 ! 作为第二个字段,而 ben 则是一串密码,以$6$开头的,表明是用SHA-512加密的。
其它字段可以看 man page。ben发布于博客园
查看所有用户组
执行 $ cat /etc/group 命令查看所有用户组。
每一行一个用户组,每个用户组由4部分组成:
group_name:password:GID:user_list
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog,ben
tty:x:5:syslog
disk:x:6:
...
lxd:x:132:ben
ben:x:1000:
sambashare:x:133:ben
systemd-coredump:x:999:
redis:x:134:
关于用户组:
- 每个用户都至少属于一个用户组;ben发布于博客园
- 每个用户组可以包括多个用户;
- 同一用户组的用户享有该组共有的权限。
使用$ man page 命令可以查看 /etc/group 文件详情:
注意,
不是每一个用户组的 第四个字段 user_list 没有显示 属于用户组的用户列表。
为什们呢?ben发布于博客园
用户属于多个用户组?用户组下用户太多?
查看用户所属用户组
一个用户可以属于多个用户组,怎么查询用户属于哪些用户组呢?
答案:使用 groups 命令。
示例:
# 查看当前登录用户的 用户组
ben@ben-u:/etc$ groups
ben adm cdrom sudo dip plugdev lpadmin lxd sambashare docker
ben@ben-u:/etc$
# 查询当前登录用户用户名
ben@ben-u:/etc$ whoami
ben
# 查询用户 ben 所属用户组
ben@ben-u:/etc$ groups ben
ben : ben adm cdrom sudo dip plugdev lpadmin lxd sambashare docker
ben@ben-u:/etc$ groups root
root : root
# 不存在的用户
ben@ben-u:/etc$ groups nothing
groups: ‘nothing’: no such user
执行$ man groups 查看命令详情:ben发布于博客园
还有 id 命令:ben发布于博客园
id - print real and effective user and group IDs
示例:
ben@ben-u:/etc$ id
uid=1000(ben) gid=1000(ben) groups=1000(ben),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),120(lpadmin),132(lxd),133(sambashare),135(docker)
ben@ben-u:/etc$ id ben
uid=1000(ben) gid=1000(ben) groups=1000(ben),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),120(lpadmin),132(lxd),133(sambashare),135(docker)
ben@ben-u:/etc$
ben@ben-u:/etc$ id nobody
uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
ben@ben-u:/etc$ id root
uid=0(root) gid=0(root) groups=0(root)
ben@ben-u:/etc$
ben@ben-u:/etc$ id nothing
id: ‘nothing’: no such user
和sudo相关
sudo是一个特殊的用户组:
$ cat /etc/group | grep sudo
sudo:x:27:ben,hadoop
说明,基于 参考资料#7 编写。
参考资料#8 引用:什么是 sudo?
sudo 表示 “superuser do”。
它允许已验证的用户以其他用户的身份来运行命令。
其他用户可以是普通用户或者超级用户。
然而,大部分时候我们用它来以提升的权限来运行命令。
更多详情,可以查看 man page:
哪些用户属于 sudo 用户组呢?
1、检查某个用户是否属于sudo
# 当前用户
$ sudo -l
# 指定用户
$ sudo -l -U user_name
2、检查某个用户是否属于sudo用户组
使用前面的 groups 命令、id命令即可
# ben 用于属于id组
$ id ben
uid=1000(ben) gid=1000(ben) groups=1000(ben),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare)
$ groups ben
ben : ben adm cdrom sudo dip plugdev lpadmin sambashare
# git用户不属于id组
$ id git
uid=1001(git) gid=1001(git) groups=1001(git)
$ groups git
git : git
3、查看系统中所有属于 sudo组的用户
使用$ getent group sudo 命令:
# 用户 ben、hadoop 属于 sudo组
$ getent group sudo
sudo:x:27:ben,hadoop
man getent:
注,getent命令还需进一步学习。TODO
小结
用户、用户组,知道存在在什么地方了。
用户/用户组 和 系统权限的关系是怎么建立的呢?
系统又哪些权限呢?
权限是指什么的权限呢?
下一步,怎么CRUD了。
参考资料
1、菜鸟教程:Linux 用户和用户组管理
https://www.runoob.com/linux/linux-user-manage.html
2、linux配置文件之/etc/passwd详解
https://zhuanlan.zhihu.com/p/127922840
by 夜郎西
3、Linux命令 - /etc/group文件详解
https://blog.csdn.net/qq_45988641/article/details/117218133
by EstherLty
4、Linux查看用户信息的几种方法
https://blog.csdn.net/Sn_Keys/article/details/126987262
by 狂龙骄子
5、Linux用户组-主组&附加组
https://juejin.cn/post/7051635397419499556
by 语冰Yubing
6、如何查看Linux哪些用户拥有sudo权限
https://www.51cto.com/article/606709.html
7、Linux 系统中 sudo 命令的 10 个技巧
https://zhuanlan.zhihu.com/p/36037822
by Linux中国
8、
ben发布于博客园