一、什么是用户
# 指能够正常登陆操作系统.
二、为什么要有用户
# 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 """