Centos7_用户与组

149 阅读6分钟

[toc]

一、用户与组介绍

1、什么是用户?

用户时操作系统提供的一种安全机制
用户是权限的化身

2、为何要有用户?

划分权限,增强安全性
每启动一个进程,都会与一个用户关联
进程 --》 用户 --》 权限(权限作用在文件身上)

3、查看用户相关信息

命令用来干啥
id查看当前用户信息
whoami查看当前用户是谁
who查看所有登录的用户
ps -aux | grep [s]sh每一个进程都有其用户
[root@manager ~]# id
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@manager ~]# whoami
root
[root@manager ~]# who
root     pts/0        2021-08-21 15:12 (192.168.31.15)
[root@manager ~]# ps -aux | grep [s]sh
root      1088  0.0  0.1 112900  4312 ?        Ss   8月18   0:00 /usr/sbin/sshd -D
root     31110  0.1  0.1 158904  5752 ?        Ss   15:12   0:01 sshd: root@pts/0
root     31114  0.0  0.1 158904  5512 ?        Ss   15:12   0:00 sshd: root@notty
root     31143  0.0  0.0  72252  2852 ?        Ss   15:12   0:00 /usr/libexec/openssh/sftp-server

4、linux系统的用户角色划分

linux系统中用户分为管理员和其他用户
管理员拥有最高权限,其他用户根据管理员的分配拥有不同的权限
uid 与 gid
    uid :用户id,唯一标识一个系统用户的账号,uid在系统中是唯一的,uid -》身份证号  用户名-》名字
    gid :组id,标识一个组

centos7 系统关于uid的约定:
0      超级管理员,最高权限
1~200    系统用户,用来运行系统自带的进程,默认已创建
201~999   系统用户,用来运行安装的程序,所以此类用户无需登录系统
1000+    普通用户,可以正常登录到系统的用户,权限较小,能执行的任务有限

5、root用户

默认是root用户,其uid、gid均是0,root用户在每台unix/linux操作系统中都是唯一且真实存在的,通过它可以登录系统,可以操作系统中任何文件和命令,拥有最高的管理权限

6、组的概念

主组:用户本身所在的组
附加组:为用户添加的组
用户与组的关系:
    一对一:一个用户默认在自己的主组下
    一对多:一个用户可以属于多个组,用户只有一个主组,但可以为用户添加多个附加组
    多对多:多个用户可以属于多个组

总结: linux将权限分为了三类: 属主 属组 其他人

二、用户与组相关文件

与用户和组相关的文件:

/etc/passwd        用户相关
/etc/shadow        用户相关
/etc/group          组相关
/etc/gshadow        组相关
/home/...          默认的用户家目录
/var/spool/mail/...        用户mail文件

/etc/passwd

[root@manager ~]# cat /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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin

# 释义
以:为分隔符,分为七列
    第一字段    用户名  
    第二字段    密码(在例子中我们看到x,其实密码被映射到/etc/shadow文件中  
    第三字段    uid  
    第四字段    gid  
    第五字段    描述信息(可为空)  
    第六字段    用户家目录所在的位置  
    第七字段    用户登录后第一个启动的程序,通常为shell  

/etc/shadow

[root@manager ~]# cat /etc/shadow
root:$6$b0GUj/CGVJqRU95Y$nKQhiX/QXUxzLL8###wkCFni1.AK1Z/2EbV.::0:99999:7:::
bin:*:18353:0:99999:7:::
daemon:*:18353:0:99999:7:::
adm:*:18353:0:99999:7:::
lp:*:18353:0:99999:7:::
sync:*:18353:0:99999:7:::
shutdown:*:18353:0:99999:7:::
halt:*:18353:0:99999:7:::
mail:*:18353:0:99999:7:::
operator:*:18353:0:99999:7:::
games:*:18353:0:99999:7:::
ftp:*:18353:0:99999:7:::
nobody:*:18353:0:99999:7:::
systemd-network:!!:19577::::::
dbus:!!:19577::::::
polkitd:!!:19577::::::
sshd:!!:19577::::::
postfix:!!:19577::::::
chrony:!!:19577::::::

# 释义
以:为分隔符,分为九列(可使用man shadow查看详细信息)
    第一字段    用户名
    第二字段    密码(密文,!!表示没有密码,x表示这个用户不能登录到系统,这个字段是非空的)
    第三字段    上次修改密码的时间(这个时间是从1970-1-1到上次修改口令的天数)
    第四字段    两次修改密码的最小间隔天数(若为0则表示禁用此功能)
    第五字段    两次修改密码的最大间隔天数(此项能增强用户口令的时效性)
    第六字段    提前多少天提醒用户密码即将过期
    第七字段    密码过期多少天后禁用此用户
    第八字段    用户过期日期(此字段指定了用户作废的天数(从1970-1-1开始的天数)若此项为空,则账户永久可用)
    第九字段    保留字段
 ```

### /etc/group

```bash
[root@manager ~]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:
cdrom:x:11:
mail:x:12:postfix
man:x:15:
dialout:x:18:
floppy:x:19:
games:x:20:
tape:x:33:
video:x:39:
ftp:x:50:
lock:x:54:
audio:x:63:
nobody:x:99:
users:x:100:
utmp:x:22:
utempter:x:35:
input:x:999:
systemd-journal:x:190:
systemd-network:x:192:
dbus:x:81:
polkitd:x:998:
ssh_keys:x:997:
sshd:x:74:
postdrop:x:90:
postfix:x:89:
chrony:x:996:

# 释义
    以:为分隔符,分成四列
    第一字段    用户组的名称
    第二字段    用户组的密码占位符
    第三字段    用户组的gid
    第四字段    显示该用户组作为哪些用户的附加组,多个用逗号分隔
 ```

### /etc/gshadow

```bash
[root@manager ~]# cat /etc/gshadow
root:::
bin:::
daemon:::
sys:::
adm:::
tty:::
disk:::
lp:::
mem:::
kmem:::
wheel:::
cdrom:::
mail:::postfix
man:::
dialout:::
floppy:::
games:::
tape:::
video:::
ftp:::
lock:::
audio:::
nobody:::
users:::
utmp:!::
utempter:!::
input:!::
systemd-journal:!::
systemd-network:!::
dbus:!::
polkitd:!::
ssh_keys:!::
sshd:!::
postdrop:!::
postfix:!::
chrony:!::

# 释义
以:为分隔符,分成四列
    第一字段    用户组的名称
    第二字段    用户组密码(可以为空或!,表示没有密码)
    第三字段    用户组管理者(可以为空,如果有多个用户组管理者,用,分割)
    第四字段    显示该用户组作为哪些用户的附加组,多个用,分割

/etc/skel/...

用户家的模板

/home/...

用户的家目录

/var/spool/mail/...

用户的邮箱文件

三、用户管理命令:

命令用来干啥
useradd添加用户
userdel删除用户
usermod修改用户信息

1、创建用户

# 创建名为devin的用户
[root@manager ~]# useradd devin

2、查看用户

[root@manager ~]# id devin
uid=1000(devin) gid=1000(devin) 组=1000(devin)

3、删除用户

[root@manager ~]# userdel -r devin

# userdel
# 删除用户,但不删除用户家目录和mail

# userdel -r
# 使用-r命令,删除更加彻底

4、useradd命令详解

参数用来干啥
-u指定用户的uid
-g指定用户所属的主组
-G指定用户所属的附加组
-d指定用户的家目录
-c指定用户的备注信息
-s指定用户使用的shell
-e修改过期时间
-m不创建家目录(系统账户一般不配备家目录)
-r创建系统账户,uid处于系统用户范围内,默认没有家目录

5、usermod命令

与useradd命令的参数基本一致,只不过useradd是添加用户,usermod是修改
参数用来干啥
-u修改指定用户的uid
-g修改指定用户的主组
-a将用户添加到附加组,仅与-G参数一起使用
-G修改指定用户的附加组,多个使用,隔开,覆盖原有附加组
-d修改指定用户的家目录
-c修改指定用户的注释信息
-s修改指定用户的bash shell
-m将用户的主目录移动到新位置,如果当前主目录不存在,则不创建新的主目录
-l修改指定用户的用户名
-L锁定指定的用户
-U解锁指定的用户

6、设置于修改密码

# 默认给当前用户设置密码
[root@manager ~]# passwd

# 给指定用户设置密码(root用户可以给自己及其他用户设置密码,普通用户只能给自己设置密码)
# passwd + 用户名
[root@manager ~]# passwd devin

# 非交互式设置密码
echo "密码" | passwd --stdin 用户名

ps

# 使用系统内置变量生成随机字符串
[root@manager ~]# echo $RANDOM | md5sum | cut -c 1-10

四、组管理

1、组管理命令

命令用来干啥
groupadd添加组
groupmod修改组
groupdel删除组
gpasswd设置组密
newgrp切换主组(临时切换到该组下,获取相应的权限)

2、创建组

[root@manager ~]# groupadd devin-g

3、修改组

# 修改 devin-g 组的gid为4000
[root@manager ~]# groupmod -g 4000 devin-g

4、删除组

如果一个组是用户的主组,那么改组不能被删除,删除用户会默认一起删除他的主组
[root@manager ~]# groupdel devin-g

5、组成员管理

对于用户来说,组分为两类:
    1、主组,用户只能又一个主组,可以通过-g指定,如未指定则常见一个默认的主组(于用户名同名)
    2、附加组,主组不能满足授权需求,创建附加组,将用户加入该组,用户可以属于多个附加组,加入一个组后就拥有了改组的权限
我们可以为组设置密码,然后让一些非组成员通过newgrp命令临时切换到组内并输入密码获取组用户的权限

五、手动创建用户

需要创建用户请使用 useradd 命令,以下操作纯属没事找事

1、/etc/passwd

[root@manager ~]# cat /etc/passwd
devin:x:1000:1000:键落惊风雨 回车泣鬼神:/home/devin:/bin/bash

2、/etc/shadow

# 生成密码密文
[root@manager ~]# openssl passwd -1 -salt 'devin-passwd'
Password:
$1$devin-pa$zjeyM21tLlHltHI/wyiLq.

[root@manager ~]# cat /etc/shadow
devin:$1$devin-pa$zjeyM21tLlHltHI/wyiLq.::0:99999:7:::

3、/etc/group

[root@manager ~]# cat /etc/group
devin:x:1000:

4、/etc/gshadow

[root@manager ~]# cat /etc/gshadow
devin:!::

5、创建用户家目录,并用模板装修一下,注意权限

[root@manager ~]# mkdir /home/devin
[root@manager ~]# cp -r /etc/skel/.[!.]* /home/devin
[root@manager ~]# chmod 700 /home/devin
[root@manager ~]# chown -R devin.devin /home/devin/

6、/var/spool/mail/df  用户邮箱文件

[root@manager ~]# touch /var/spool/mail/devin
[root@manager ~]# chmod 600 /var/spool/mail/devin
[root@manager ~]# chown devin.devin /var/spool/mail/devin

7、账户登录测试

嘎嘎好使!

PS:制作密码

openssl passwd 选项 密码
    选项:
    -1    表示使用的是md5加密算法
    -salt    指定salt值,不使用随机产生的salt,(在使用加密算法进行加密时,即使密码一样,salt不一样,所计算出来的hash值也不一样;除非密码一样,salt也一样,计算出来的hash值才一样,salt值为8字节的字符串)