zoukankan      html  css  js  c++  java
  • liunx之用户管理

    用户管理

    ==============================================================
    groupadd,groupdel
    useradd,usermod,userdel
    passwd,chage
    ==============================================================
    内容提要:
    用户管理 useradd usermod userdel
    组管理 groupadd groupdel
    用户密码管理 passwd chage
    通过 su sudo 给普通用户提权
    ==============================================================
    Linux 是一个可以实现多用户登陆的操作系统,允许多个用户同时登陆到系统上使用资源。系统根据账户来区分每个用户的文件、进程、任务,给每个用户提供特定的工作环境。
    对用户组的管理主要包括:添加、修改、删除以及配置访问系统的资源。

    1.1 Linux 用户组基本概念

    Users and groups:
    . Every process (running program) on the system runs as a particular user.
    . Every file is owned by a particular user.
    . Access to files and directories are restricted by user.
    . The user associated with a running process determines the files and directories accessible to that process.

    用户组group,就是具有相同特征的用户的集合体。
    查看当前登录的用户信息:
    [root@localhost ~]# id
    uid=0(root) gid=0(root) groups=0(root)

    查看文件的owner:
    [root@localhost ~]# ll /home/
    drwx------. 4 alice alice 4096 Jun 2 15:59 alice
    drwx------. 2 root root 16384 Jun 1 23:09 lost+found
    drwxr-xr-x 2 root root 4096 Jun 2 15:33 localhost

    查看运行进程的username:
    [root@localhost ~]# ps aux |less
    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    root 1 0.0 0.0 19360 1536 ? Ss 13:29 0:00 /sbin/init
    root 2 0.0 0.0 0 0 ? S 13:29 0:00 [kthreadd]
    root 3 0.0 0.0 0 0 ? S 13:29 0:00 [migration/0]
    root 4 0.0 0.0 0 0 ? S 13:29 0:00 [ksoftirqd/0]

    和用户组相关的一些文件:
    (1)用户账号文件:

     /etc/passwd

    root:x:0:0:root:/root:/bin/bash

    用户名:x:uid:gid:描述:HOME:shell
    (2)用户密码文件

    /etc/shadow

    root:$1$MYG2NDG6$a1wtyr5GDM2esAPjug0YP0:15636:0:99999:7:: :
    登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

      参数一: sp_namp 用户名称

      参数二: sp_pwdp 用户加密后的密码

      参数三: sp_lstchg 用户密码最近一次修改时间,算法是今天的时间减去1,1,1970得到的时间间隔

      参数四: sp_min  用户最少多少天后才能改密码的天数(默认为0,表示可以在任何时间修改,有啥意义?有种需求叫密码永不变= =。)

      参数五: sp_max 用户最多多少天后一定要修改密码的天数,系统会强制用户修改密码(默认为99999,改为1 也能让密码改不了)

      参数六: sp_warn 过期前多少天时间会被警告(改为-1 则永远不会提示)

      参数七: sp_inact 过期后多少天内账号变为inactive状态,可登陆,但不能操作

      参数八: sp_expire 多少天后账号会过期,无法登陆

      参数九: sp_flag 保留参数

    例:test01:$6$h6vM4nLR$baO2kmPoSYLHRhAvIjBHZF7Kf6vAT4fIlb.HRjJaF4dBGHb3Wsj8oBpXHujk9dXlFZy0W4VjiotrnR1p1.2nn.:18186:0:99999:7:::

    查看最近一次修改密码是在那一天。

    [root@localhost backup]# date -d "1970-01-01 18186 days" +%Y/%m/%d
    2019/10/17

    设置用户每次更新密码7天内禁止修改密码

    [root@localhost backup]# passwd -n 7 test01

    [root@localhost ~]# chage -d 7 test01

    设置用户90天内必须修改密码

    [root@localhost backup]# passwd -x 90 test01

    设置用户密码过期前3天给出通知

    [root@localhost ~]# passwd -w 3 test01

    设置用户密码过期5天后禁止登陆系统

    [root@localhost ~]# passwd -i 5 test01

    设置用户初次登陆时强制修改密码

    [root@localhost ~]# passwd -e test01

    (3)用户组账号文件

    /etc/group

    root:x:0:
    (4)用户组密码文件

    /etc/gshadow

    [root@localhost ~]# man 5 passwd
    [root@localhost ~]# man 5 shadow
    [root@localhost ~]# man 5 group
    [root@localhost ~]# man 3 crypt

    加密算法$id:
    $1: MD5
    $5: SHA-256
    $6: SHA-512

    1.2 Linux 用户组分类

    1 用户分类

    Linux系统中存在三种用户:root用户、系统用户(也称之为伪用户)、普通用户
    系统约定: RHEL6
    uid: 0 特权用户
    uid: 1~499 系统用户
    uid: 500+ 普通用户

    The root user

    . uid is 0
    . all power
    . This user has the power to override normal privileges on the file system
    . installing or removing software and to manage system files and directorie
    . Most devices can only be controlled by root

    RHEL6普通用户的UID 从500开始,RHEL7则是从1000开始;

    系统约定: RHEL7
    uid: 0 特权用户
    uid:1-999为系统用户
    uid:1000+为本地用户

    2 组分类

    基本组(私有组)
    附加组(公有组)
    系统组


    根据账户功能,用户组可以分为:
    超级用户组:root gid为0
    系统用户组:gid 1-999
    本地用户组:gid 1000+

    1.3 Linux 用户组管理

    如果要在图形化界面下管理用户与组,需安装包:system-config-users
    用户组:
    [root@localhost ~]# groupadd hr
    [root@localhost ~]# groupadd sale
    [root@localhost ~]# groupadd it
    [root@localhost ~]# groupadd fd
    [root@localhost ~]# groupadd market
    [root@localhost ~]# groupadd net01 -g 2000 //添加组net01,并指定gid 2000
    [root@localhost ~]# grep 'net01' /etc/group //查看/etc/group中组net01信息
    [root@localhost ~]# groupdel net01 //删除组net01

    用户:
    useradd creates users
    ==创建用户 未指定选项==
    [root@localhost ~]# useradd user01
    . 未指定该用户的主组 默认和用户同名
    . 未指定该用户的附加组 默认不添加附加组
    . 未指定用户的HOME 默认 /home/username
    . 未指定用户的SHELL 默认 /bin/bash
    . 未指定用户的UID...
    [root@localhost ~]# grep 'user01' /etc/passwd /etc/shadow /etc/group
    /etc/passwd:user01:x:507:512::/home/user01:/bin/bash
    /etc/shadow:user01:!!:16589:0:99999:7:::
    /etc/group:user01:x:512:

    [root@localhost ~]# id user01
    uid=507(user01) gid=512(user01) groups=512(user01)

    [root@localhost ~]# ls /var/spool/mail/user01
    /var/spool/mail/user01

    小结:
    如果创建一个用户时,未指定任何选项,系统会创建一个和用户名相同的组作为用户的Primary Group.

    ==创建用户 指定选项==
    [root@localhost ~]# useradd user02 -u 503 //创建用户usr02,指定uid
    [root@localhost ~]# useradd user03 -d /aaa //创建用户user03 指定家目录
    [root@localhost ~]# useradd user05 -s /sbin/nologin //创建用户并指定shell
    [root@localhost ~]# useradd user07 -G hr,it,fd //创建用户,指定附加组
    [root@localhost ~]# useradd user10 -u 4000 -s /sbin/nologin

    userdel deletes users
    ==删除用户==
    [root@localhost ~]# userdel user10 //删除用户user10,但不删除用户家目录和mail spool
    [root@localhost ~]# ll -d /home/user10/
    drwx------ 3 506 510 4096 09-01 21:14 /home/user10/
    [root@localhost ~]# ll /var/spool/mail/user10
    -rw-rw---- 1 506 mail 0 09-01 21:14 /var/spool/mail/user10

    [root@localhost ~]# userdel -r user2 //删除用户user2,同时删除用户家目录和mail spool

    ==用户密码==
    [root@localhost ~]# passwd alice
    [zhuzhu@localhost ~]$ passwd


    usermod modifies existing users
    ==组成员管理==
    注意:只针对已存在的用户
    [root@localhost ~]# usermod -G hr niuniu2 //覆盖原有的附加组
    [root@localhost ~]# usermod -G fd,it niuniu2
    [root@localhost ~]# usermod -aG hr niuniu2 //增加新的附加组

    修改用户 usermod
    1、修改用户名 user1---User1: usermod -l User1 user1
    2、增加描述信息 :usermod -c "install rpm" User1
    3、修改登录shell :usermod -s /sbin/nologin User1
    4、修改主目录: -d
    5、设置过期日期: -e
    6、锁定账号:-L 等价于 passwd -l
    7、解锁账号:-U 等价于 passwd -u
    8、-u,-g
    ==其它选项管理==
    [root@localhost ~]# usermod -s /sbin/nologin niuniu2

    1.4 扩展知识

    useradd创建用户时,参照的文件...
    [root@localhost ~]# vim /etc/login.defs
    MAIL_DIR /var/spool/mail
    PASS_MAX_DAYS 30
    PASS_MIN_DAYS 0
    PASS_MIN_LEN 5
    PASS_WARN_AGE 7
    CREATE_HOME yes
    ENCRYPT_METHOD SHA512

    [root@localhost ~]# vim /etc/default/useradd
    SHELL=/sbin/nologin

    Password aging

    # chage -m 0 -M 90 -W 7 -I 14 username
    chage -d 0 username will force a password update on next login.
    chage -l username will list a username's current settings.
    chage -E YYYY-MM-DD will expire an account on a specific day.

    手动创建用户示例:
    [root@localhost~]# useradd maomao100
    [root@localhost~]# echo 123456 |passwd --stdin maomao100
    [root@localhost~]# chage -d 0 maomao100 //强制用户在下一次登录时修改密码

    将多个用户加入到指定的组:
    [root@localhost~]# gpasswd -a jack wheel //usermod -aG hr zhuzhu
    [root@localhost~]# gpasswd -M zhuzhu,maomao100 hr
    [root@localhost~]# gpasswd -d zhuzhu hr

    1.5 给普通用户提权

    以下两种方式都可以将普通用户提升为root
    1)

    Switching users with su

    [alice@localhost ~]$ useradd u1
    -bash: /usr/sbin/useradd: 权限不够
    [alice@localhost ~]$ su - root
    password:
    [root@localhost ~]# useradd u1

    管理员切换为普通用户不需要输入密码;
    普通用户切换其他用户需要输入目标用户密码;

    su的优缺点
    su 命令的确为管理带来方便,但通过su切换到root后,也有不安全因素。

    2)

    Running commands as root with sudo

    sudo配置文件/etc/sudoers
    (1)别名规则
    别名规则的定义格式:
    Alias_Type NAME = item1, item2, ...
    或者
    Alias_Type NAME = item1, item2, item3 : NAME = item4, item5
    其中:
    Alias_Type是指别名类型,包括四种:Host_Alias、User_Alias、Runas_Alias和Cmnd_Alias。NAME就是别名;
    NAME的命名是包含大写字母、下划线以及数字,但必须以一个大写字母开头,比如ADMIN、SYS1和NETWORKING都是合法的,而sYS和6ADMIN是非法的;

    ① Host_Alias
    定义主机别名的例子如下:
    Host_Alias HT1=localhost,ztg,192.168.0.0/24
    主机别名是HT1,“=”号右边是成员。
    Host_Alias HT1= localhost,ztguang,192.168.10.0/24:HT2=ztg2,ztg3
    定义了两个主机别名HT1和HT2,别名之间用“:”号隔开。

    ② User_Alias
    用户别名,别名成员可以是用户,用户组(前面要加%号)。
    User_Alias ADMIN=ztg,ztguang
    定义用户别名ADMIN,有两个成员ztg和ztguang,这两个成员要在系统中确实存在。
    User_Alias PROCESSES= ztg1
    定义用户别名PROCESSES,有一个成员ztg1,这个成员要在系统中确实存在。

    ③ Runas_Alias
    用来定义runas别名,这个别名是指sudo允许切换到的用户;
    Runas_Alias RUN_AS = root
    定义runas别名RUN_AS,有一个成员root。

    ④ Cmnd_Alias
    定义命令的别名,这些命令必须是系统存在的文件,要用绝对路径,文件名可以用通配符表示。
    Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
    Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall

    (2)授权规则

    授权规则的定义格式:
    授权用户  主机=命令动作
    或者
    授权用户  主机=[(切换到哪些用户或用户组)]  [是否需要密码验证]  命令1,[(切换到哪些用户或用户组)]  [是否需要密码验证]  [命令2],[(切换到哪些用户或用户组)]  [是否需要密码验证]  [命令3] …
    这三个要素缺一不可,但在动作之前也可以指定切换到特定用户下,在这里指定切换的用户要用( )号括起来,如果不需要密码直接运行命令的,应该加
    NOPASSWD:参数,但这些可以省略。

    sudo的客户端应用
    sudo -l:列出当前用户可以执行的命令。只有在sudoers里的用户才能使用该选项。
    sudo -u 用户名 命令:以指定用户的身份执行命令。后面的用户是除root以外的,可以是用户名,也可以是UID。
    sudo -k:清除存活期时间,下次再使用sudo时要再输入密码。
    sudo -b 命令:在后台执行指定的命令。
    sudo -p 提示语 <操作选项>:可以更改询问密码的提示语,其中%u会代换为使用者账号名称,%h会显示主机名称。


    实例:授权规则举例
    student ALL=(root) /bin/chown,/bin/chmod


    以root身份授权普通用户
    [root@localhost ~]# vim /etc/sudoers
    %wheel ALL=(ALL) NOPASSWD: ALL

    [root@localhost ~]# useradd yangyang -G wheel
    [root@localhost ~]# id yangyang
    uid=504(yangyang) gid=504(yangyang) 组=504(yangyang),10(wheel)

    [yangyang@localhost ~]$ useradd gougou10
    -bash: /usr/sbin/useradd: 权限不够
    [yangyang@localhost ~]$ sudo useradd gougou10
    [yangyang@localhost ~]$ id gougou10
    uid=505(gougou10) gid=505(gougou10) 组=505(gougou10)

    本节作业:

    1. 完成课堂中学习的所有内容

    2.

    用户管理命令练习
    增加两个用户并设置好密码(写2行):John、Lucy
    查看各用户的基本信息(相关文件在/etc中)
    查看各用户的密码信息(相关文件在/etc中)
    查找用户summer并显示其相关信息
    将当前用户切换到John(进入其主目录)
    显示当前登录用户名
    将John的登录密码改为:mima1234
    将John的帐号有效期设为2017年12月31号
    将John加入到summer组中
    将用户名John改为Jack
    将Jack的用户全名改为:Jack.Willianmus
    用户切换到Lucy,删除Lucy的密码
    删除用户Lucy

    4. 组管理命令练习
    增加以一个student组
    查看所有组的基本信息(相关文件在etc中)
    查看summer组中包含哪些用户名?
    将student组名改为teacher
    删除teacher组

  • 相关阅读:
    【容斥】Four-tuples @山东省第九届省赛 F
    【树形dp入门】没有上司的舞会 @洛谷P1352
    【贪心】LIS @The 15th Zhejiang Provincial Collegiate Programming Contest E
    【map离散&容斥】Ghosts @Codeforces Round #478 (Div. 2) D
    PCA & whitening
    Autoencoders and Sparsity(二)
    Autoencoders and Sparsity(一)
    Regularized logistic regression
    Regularization —— linear regression
    Logistic Regression and Newton's Method
  • 原文地址:https://www.cnblogs.com/anttech/p/10597537.html
Copyright © 2011-2022 走看看