02-用户管理

一、什么是用户

# 指能够正常登陆操作系统.

二、为什么要有用户

# 2.1) 进程需要依赖一个特定用户的身份,才可以正常的运行.
# 2.2) 服务器可能会有多个用户, root的权限太大.

三、用户分类

"""
    类型        名称    ID编号
    超级管理员   root    0
    系统用户             1~999            <--为系统正常运转而使用的用户   [ 系统用户  | 虚拟用户 ]
    普通用户             1000+          <--能够正常登陆系统的用户   [ 普通用户 ]
"""
#  **** 进程能够以什么样的方式去访问一个文件或目录,  取决于进程运行的 "用户身份" 对该文件或目录是否拥有对应的权限

1、查用户

[root@oldboy-pythonedu ~]# id root
uid=0(root) gid=0(root) 组=0(root)

2、创建用户

[root@oldboy-pythonedu ~]# useradd oldboy
[root@oldboy-pythonedu ~]# id oldboy
uid=1001(oldboy) gid=1001(oldboy) 组=1001(oldboy)

3、创建的用户信息存在哪?

root:x:0:0:root:/root:/bin/bash
oldboy:x:1001:1001::/home/oldboy:/bin/bash

"""
第一列: 用户名称
第二列: 密码占位符,密码存储在  /etc/shadow 文件中
第三列: 用户的UID
第四列: 用户的GID
第五列: 描述信息  commit 
第六列: 用户的家目录
第七列: 用户登录的Bash类型
"""

4、用户存储密码的文件

/etc/shadow
root:$6$QyNI5YH5XihOfDKY:18533:0:99999:7:::

5、创建用户参数

"""
-u: 指定用户的UID
-g: 指定用户的基本组 ( 不指定,默认创建与用户同名的组 )
-G: 指定附加组  ( 干爹 )
-c: 指定注释信息
-s: 指定登录的bash类型,默认是 /bin/bash
-r: 指定系统用户
-M: 不创建用户的家目录
"""

例:

5.1、创建用户

# 创建kkkedu用户,UID5001,基本组works,附加组sa 注释信息:2019 work,登陆shell:/bin/bash
[root@oldboy-pythonedu ~]# groupadd students
[root@oldboy-pythonedu ~]# groupadd sa
[root@oldboy-pythonedu ~]# useradd kkkedu -u 5001 -g works -G sa -c "2019 new work" -s /bin/bash

5.2、创建系统用户

创建mysql系统用户,-M不建立用户家目录 -s指定nologin使其用户无法登陆系统
[root@oldboy-pythonedu ~]# useradd mysql -r  -M -s /sbin/nologin 

5.3、删除用户

userdel -r username   删除用户,并删除用户的家目录
    不建议加-r: 因为很多情况下开发使用的用户家目录下有很多软件和配置文件

6、为用户设定密码

密码使用工具: lastpass

设定密码的方式: 仅root可以设定所有人的密码, 普通仅能设定自己的密码,并且密码的强度有要求.
交互式:
passwd [username]

6.1、非交互式

[root@oldboy-pythonedu ~]# echo "12" | passwd --stdin root #固定密码 
[root@oldboy-pythonedu ~]# echo $RANDOM | md5sum | cut -c 2-10 | tee 1.txt |passwd --stdin root #随机密码

批量创建用户及随机密码

[root@oldboy-pythonedu ~]# cat useradd.sh 
        #!/usr/bin/bash
        #1.如何批量创建用户
        for user_name in old-{1..100}
        do
            pass=$(echo $RANDOM | md5sum  | cut -c 2-10)
            
            # 判断用户是否存在,如果存在则不创建
            id $user_name &>/dev/null
            if [ $? -eq 0 ];then
                continue
            else
                # 创建用户
                useradd $user_name 
                # 设定密码
                echo "$pass" | passwd --stdin $user_name &>/dev/null        # 设定密码,将结尾打到空
                echo "Username: $user_name  Password: $pass ok.."            # 将用户名和密码输出到面板
                echo "Username: $user_name  Password: $pass ok.." >> user_password.txt        #将用户名和密码输出到文件中
            fi
        done

6.2、交互式

[root@oldboy-pythonedu ~]# cat useradd_2.sh 
#!/usr/bin/bash


read -p "请输入你要创建的用户名称: " User
read -p "请输入你要创建的用户数量: " Number


#1.如何批量创建用户
for i in $(seq $Number)
do
    user_name=$User-$i
    pass=$(echo $RANDOM | md5sum  | cut -c 2-10)
    
    # 判断用户是否存在,如果存在则不创建
    id $user_name &>/dev/null
    if [ $? -eq 0 ];then
        continue
    else
        # 创建用户
        useradd $user_name 
        # 设定密码
        echo "$pass" | passwd --stdin $user_name &>/dev/null
        echo "Username: $user_name  Password: $pass ok.."
        echo "Username: $user_name  Password: $pass ok.." >> user_password.txt
    fi 
done

7、用户组

7.1、组的分类

"""
所属组: 当创建一个用户时,如果不指定主组,会默认创建一个同名的组.
附加组: 创建用户时可以指定我想加入的附加组, 此时用户就可以具备附加的组的权限.
"""

7.2、创建组

"""
-g: 指定gid,默认不指定,则从1000+开始

[root@oldboy-pythonedu ~]# groupadd -g 5001 devops
"""

7.3、删除组

"""
[root@oldboy-pythonedu ~]# groupdel devops


[root@oldboy-pythonedu ~]# groupdel students
groupdel:不能移除用户“oldboyedu”的主组
[root@oldboy-pythonedu ~]# userdel -r oldboyedu 
[root@oldboy-pythonedu ~]# groupdel students

"""

四、用户提权

1、su切换身份

"""
需要知道用户的密码,才可以切换.
    su - root         #输入root的密码
            
问题:
    1.不希望给开发root的权限,容易造成故障.
    2.不给开发权限,有些任务又需要root权限.
"""

2、sudo提权

"""
1.快速给用户分配一个sudo的权限:
    [root@oldboy-pythonedu ~]# useradd -G wheel kkk
    [root@oldboy-pythonedu ~]# echo "123" | passwd --stdin kkk

2.验证权限:
    [kkk@oldboy-pythonedu ~]$ yum install wget -y
    已加载插件:fastestmirror
    您需要 root 权限执行此命令。


[kkk@oldboy-pythonedu ~]$ sudo yum install wget -y
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

[sudo] kkk 的密码:            # 普通自己的密码,不是root的密码
"""

3、通过/etc/sudoers文件为用户分配权限

vim /etc/sudoers
visudo -c 检查语法

"""
1.定义组名称  ( sudo里面的虚拟的 )
    
User_Alias DEV = kaifa1,kaifa2
User_Alias OPS = ops1,ops2


2.定义权限
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

## Installation and management of software
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

## Services
 Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig, /usr/bin/systemctl start, /usr/bin/systemctl stop, /usr/bin/systemctl reload, /usr/bin/systemctl restart, /usr/bin/systemctl status, /usr/bin/systemctl enable, /usr/bin/systemctl disable

## Updating the locate database
# Cmnd_Alias LOCATE = /usr/bin/updatedb

## Storage
Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount


## Processes
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall


2.将用户组与权限进行绑定   
root    ALL=(ALL)       NOPASSWD:ALL                #可以执行所有的命令,并且无需输入密码
DEV     ALL=(ALL)       NETWORKING,SOFTWARE,SERVICES
OPS     ALL=(ALL)       NETWORKING,SOFTWARE,SERVICES,PROCESSES,STORAGE
"""

创建对应的用户,并设定密码

[root@kxq-pythonedu ~]# useradd kaifa1
[root@kxq-pythonedu ~]# useradd kaifa2
[root@kxq-pythonedu ~]# useradd ops1
[root@kxq-pythonedu ~]# useradd ops2
[root@kxq-pythonedu ~]# echo "1" | passwd --stdin kaifa1
[root@kxq-pythonedu ~]# echo "1" | passwd --stdin kaifa2
[root@kxq-pythonedu ~]# echo "1" | passwd --stdin ops1
[root@kxq-pythonedu ~]# echo "1" | passwd --stdin ops2

使用 sudo -l 验证开发的权限和运维的权限是否不一致

"""
用户 kaifa1 可以在 kxq-pythonedu 上运行以下命令:
    (ALL) /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables,
        /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool, /bin/rpm,
        /usr/bin/up2date, /usr/bin/yum, /sbin/service, /sbin/chkconfig, /usr/bin/systemctl start,
        /usr/bin/systemctl stop, /usr/bin/systemctl reload, /usr/bin/systemctl restart,
        /usr/bin/systemctl status, /usr/bin/systemctl enable, /usr/bin/systemctl disable



用户 ops1 可以在 kxq-pythonedu 上运行以下命令:
    (ALL) /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables,
        /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool, /bin/rpm,
        /usr/bin/up2date, /usr/bin/yum, /sbin/service, /sbin/chkconfig, /usr/bin/systemctl start,
        /usr/bin/systemctl stop, /usr/bin/systemctl reload, /usr/bin/systemctl restart,
        /usr/bin/systemctl status, /usr/bin/systemctl enable, /usr/bin/systemctl disable,
        /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall, /sbin/fdisk, /sbin/sfdisk,
        /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount
"""
原文地址:https://www.cnblogs.com/kongxiangqun/p/13798872.html