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:

 

关于用户组:

  1. 每个用户都至少属于一个用户组;ben发布于博客园
  2. 每个用户组可以包括多个用户;
  3. 同一用户组的用户享有该组共有的权限。

 

使用$ 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发布于博客园

 

posted @ 2022-12-15 20:19  快乐的凡人721  阅读(165)  评论(0编辑  收藏  举报