• 用户管理与用户组管理


    1./etc/group文件      存放组的基本信息

    [root@iz2ze46xi6pjjj69ailg9lz ~]# cat /etc/group
    root:x:0:
    bin:x:1:
    daemon:x:2:
    sys:x:3:
    组名:组密码:GID:组成员
    字段 含义
    组名 用户登录时所在的组
    组密码 一般不使用
    GID 组标识号
    组内用户列表 属于该组的用户列表

     2./etc/gshadow  组密码配置

    [root@iz2ze46xi6pjjj69ailg9lz ~]# cat /etc/gshadow
    root:::
    bin:::

    例如:设置组密码并查看配置文件:

    [root@iz2ze46xi6pjjj69ailg9lz ~]# gpasswd mygroup  #给mygroup设置密码
    Changing the password for group mygroup
    New Password:
    Re-enter new password:
    [root@iz2ze46xi6pjjj69ailg9lz ~]# grep mygroup /etc/gshadow  #查看/etc/gshadow配置文件
    mygroup:$6$wUcog/rKn4p/$fWwlj9.ZQHnpQktuzUXI6iRj4E5I2Yyu3mOaAR9IdqkUhE1hLM8KmeI3
    zcIPgNFAyEmLuoWZN7aWXRpjYPjcX0::

      组设置密码的时候也是同用户设置密码一样,先写到/etc/group中,然后再写到/etc/gshadow中

    [root@iz2ze46xi6pjjj69ailg9lz ~]# grpunconv    #将/etc/gshadow的密码反写到/etc/group中
    [root@iz2ze46xi6pjjj69ailg9lz ~]# grep mygroup /etc/group  #查看/etc/group中的组密码
    mygroup:$6$wUcog/rKn4p/$fWwlj9.ZQHnpQktuzUXI6iRj4E5I2Yyu3mOaAR9IdqkUhE1hLM8KmeI3
    zcIPgNFAyEmLuoWZN7aWXRpjYPjcX0:888:

    3.组基本管理命令:

    • 添加用户组
    [root@iz2ze46xi6pjjj69ailg9lz ~]# groupadd -g 888 mygroup   #创建用户组mygroup,GID为888
    [root@iz2ze46xi6pjjj69ailg9lz ~]# grep mygroup /etc/group mygroup:x:888:
    •  删除用户组
    [root@iz2ze46xi6pjjj69ailg9lz ~]# groupdel mygroup    #删除用户组
    [root@iz2ze46xi6pjjj69ailg9lz ~]# grep mygroup /etc/group
    [root@iz2ze46xi6pjjj69ailg9lz ~]#
    • 修改用户组    groupmod 
    [root@iz2ze46xi6pjjj69ailg9lz ~]# groupmod -n mygroup2 mygroup    #将mygroup重新命名为mygroup2
    [root@iz2ze46xi6pjjj69ailg9lz ~]# grep mygroup /etc/group
    mygroup2:x:888:
    [root@iz2ze46xi6pjjj69ailg9lz ~]#
    • 用户组管理  gpasswd

    gpasswd命令是Linux下工作组文件/etc/group/etc/gshadow管理工具。

    语法:

    gpasswd(选项)(参数)

    选项:

    -a:添加用户到组;
    -d:从组删除用户;
    -A:指定管理员;
    -M:指定组成员和-A的用途差不多;
    -r:删除密码;
    -R:限制用户登入组,只有组中的成员才可以用newgrp加入该组。

     参数:

      组:指定要管理的工作组。

     

    (0)查看组中有哪些成员:

    [root@iz2ze46xi6pjjj69ailg9lz ~]# grep mygroup /etc/group
    mygroup:x:888:qlq
    组名:组密码:GID:组成员    最后的qlq则是组中的成员


    查看一个用户属于哪个组:
    [root@iz2ze46xi6pjjj69ailg9lz ~]# groups qlq #查看qlq属于哪个组
    qlq : qlq mygroup
    或者:
    [root@iz2ze46xi6pjjj69ailg9lz ~]# id qlq
    uid=1000(qlq) gid=1000(qlq) groups=1000(qlq),888(mygroup)
    groups和id如果不加后面的参数默认查询当前用户的组信息。


    (1)添加用户到组

    [root@iz2ze46xi6pjjj69ailg9lz ~]# gpasswd -a qlq mygroup    #添加qlq用户到mygroup组
    Adding user qlq to group mygroup
    [root@iz2ze46xi6pjjj69ailg9lz ~]# grep mygroup /etc/group  #查看mygroup组有哪些成员
    mygroup:x:888:qlq

    (2)从用户组中删除用户

    [root@iz2ze46xi6pjjj69ailg9lz ~]# gpasswd -d myuser2 root
    Removing user myuser2 from group root

     (3)设置组的密码:

    [root@iz2ze46xi6pjjj69ailg9lz ~]# gpasswd mygroup    #设置组密码
    Changing the password for group mygroup
    New Password:
    Re-enter new password:

    也可以将组密码写到/etc/gshadow或者/etc/group中:

    [root@iz2ze46xi6pjjj69ailg9lz ~]# grpunconv      #将密码反转到/etc/group
    [root@iz2ze46xi6pjjj69ailg9lz ~]# grep mygroup /etc/group  #查看/etc/group发现带上密码信息
    mygroup:$6$V/Mkh/dk/NdQk$iOr2BbG/m80pgdODkOxG.5bgQBjMEplhaMCzNgbaPPRd/vEwS8ZycxD
    DNeh/3Svek7Z1mraDStryYxndSJbUo0:888:
    [root@iz2ze46xi6pjjj69ailg9lz ~]# grep mygroup /etc/gshadow   #查看/etc/gshadow发现文件不存在
    grep: /etc/gshadow: No such file or directory
    [root@iz2ze46xi6pjjj69ailg9lz ~]# grpconv  #将密码转换到/etc/gshadow中
    [root@iz2ze46xi6pjjj69ailg9lz ~]# grep mygroup /etc/gshadow  #查看/etc/gshadow,发现带上密码信息
    mygroup:$6$V/Mkh/dk/NdQk$iOr2BbG/m80pgdODkOxG.5bgQBjMEplhaMCzNgbaPPRd/vEwS8ZycxD  
    DNeh/3Svek7Z1mraDStryYxndSJbUo0::
    [root@iz2ze46xi6pjjj69ailg9lz ~]# grep mygroup /etc/group  #查看/etc/group发现去掉加密密码,且变成密码位
    mygroup:x:888:
    • 其他基本管理操作

    (1)groups查看永不属于哪个组

    例如:

    [qlq@iz2ze46xi6pjjj69ailg9lz root]$ groups  #查看当前qlq用户属于哪个组
    qlq  
    [qlq@iz2ze46xi6pjjj69ailg9lz root]$ newgrp mygroup  #将当前qlq用户添加到mygroup组中,需要输入mygroup组的密码
    Password:
    [qlq@iz2ze46xi6pjjj69ailg9lz root]$ id  #查看当前用户的UID以及组信息
    uid=1000(qlq) gid=888(mygroup) groups=888(mygroup),1000(qlq)

    *  groups和id也可以加其他用户名查看其他用户的信息:

    [qlq@iz2ze46xi6pjjj69ailg9lz root]$ id root
    uid=0(root) gid=0(root) groups=0(root)
    [qlq@iz2ze46xi6pjjj69ailg9lz root]$ groups root
    root : root

     (2)grpck 检测用户组配置文件信息

    (3)vigr编辑/etc/group文件,且占用文件的锁,其他用户不能编辑文件。

     3.用户管理基本操作

    •  添加用户
    useradd(选项)(参数)

     选项:

    -c<备注>:加上备注文字。备注文字会保存在passwd的备注栏位中;
    -d<登入目录>:指定用户登入时的启始目录;
    -D:变更预设值;  (查看默认的配置)
    -e<有效期限>:指定帐号的有效期限;
    -f<缓冲天数>:指定在密码过期后多少天即关闭该帐号;
    -g<群组>:指定用户所属的群组;
    -G<群组>:指定用户所属的附加群组;
    -m:自动建立用户的登入目录;
    -M:不要自动建立用户的登入目录;
    -n:取消建立以用户名称为名的群组;
    -r:建立系统帐号;
    -s<shell>:指定用户登入后所使用的shell;
    -u<uid>:指定用户id

    参数:

       用户名:要创建的用户名。

    例子;

     (1)查看默认配置:

    [root@iz2ze46xi6pjjj69ailg9lz ~]# useradd -D
    GROUP=100
    HOME=/home
    INACTIVE=-1
    EXPIRE=
    SHELL=/bin/bash
    SKEL=/etc/skel
    CREATE_MAIL_SPOOL=yes 

     (2)添加用户

    [root@iz2ze46xi6pjjj69ailg9lz ~]# useradd -u 888 -g mygroup -c "my user" myuser  #添加用户指定UID与默认的组,同时添加描述信息
    [root@iz2ze46xi6pjjj69ailg9lz ~]# grep myuser /etc/passwd  #查看刚添加的用户信息
    myuser:x:888:888:my user:/home/myuser:/bin/bash
    [root@iz2ze46xi6pjjj69ailg9lz ~]# passwd myuser  #设定用户密码
    Changing password for user myuser.
    New password:
    BAD PASSWORD: The password is a palindrome
    Retype new password:
    passwd: all authentication tokens updated successfully.
    [root@iz2ze46xi6pjjj69ailg9lz ~]#

    也可以手工添加修改,修改/etc/passwd与/etc/shadow文件,同时创建宿主目录。

    •  修改用户   usermod

      usermod命令用于修改用户的基本信息。usermod命令不允许你改变正在线上的使用者帐号名称。当usermod命令用来改变user id,必须确认这名user没在电脑上执行任何程序。你需手动更改使用者的crontab档。也需手动更改使用者的at工作档。采用NIS server须在server上更动相关的NIS设定。

     语法;

    usermod(选项)(参数)

     选项:

    -c<备注>:修改用户帐号的备注文字;
    -d<登入目录>:修改用户登入时的目录;
    -e<有效期限>:修改帐号的有效期限;
    -f<缓冲天数>:修改在密码过期后多少天即关闭该帐号;
    -g<群组>:修改用户所属的群组;
    -G<群组>;修改用户所属的附加群组;
    -l<帐号名称>:修改用户帐号名称;
    -L:锁定用户密码,使密码无效;
    -s<shell>:修改用户登入后所使用的shell;
    -u<uid>:修改用户ID;
    -U:解除密码锁定。

    参数:

      登录名:指定要修改信息的用户登录名。

    例子:

    [root@iz2ze46xi6pjjj69ailg9lz ~]# usermod -l myuser2 -c "my  user2" myuser   #修改用户myuser为myuser2,同时修改描述信息
    [root@iz2ze46xi6pjjj69ailg9lz ~]# grep myuser /etc/passwd    #查看信息
    myuser2:x:888:888:my  user2:/home/myuser:/bin/bash
    [root@iz2ze46xi6pjjj69ailg9lz ~]# usermod -g sys myuser2  #修改myuser2用户的用户组为sys组
    [root@iz2ze46xi6pjjj69ailg9lz ~]# grep myuser /etc/passwd
    myuser2:x:888:3:my  user2:/home/myuser:/bin/bash
    •  删除用户    userdel

     语法:

    userdel(选项)(参数)

     选项:

     -f:强制删除用户,即使用户当前已登录;

     -r:删除用户的同时,删除与用户相关的所有文件。

    参数:

       用户名:要删除的用户名。

     例如:

    userdel -f qlq
    或者
    userdel -rf qlq

     

    • 其他管理命令

    (1)pwck检测/etc/passwd文件和/etc/shadow文件

    [root@iz2ze46xi6pjjj69ailg9lz ~]# pwck /etc/passwd
    user 'ftp': directory '/var/ftp' does not exist
    pwck: no changes

    或者:

    [root@iz2ze46xi6pjjj69ailg9lz ~]# pwck
    user 'ftp': directory '/var/ftp' does not exist
    pwck: no changes

      检测用户的基本信息和密码信息,宿主目录不存在不是粗,这些目录是伪用户的目录。

    (2)vipw 

      编辑/etc/passwd,在编辑的时候其他用户不能编辑,类似于word的只能单独打开一次文档。

    (3)finger    查看某个用户的详细登录信息

    [root@VM_0_12_centos ~]# finger qlq #查看qlq用户的详细信息
    Login: qlq                              Name:
    Directory: /home/qlq                    Shell: /bin/bash
    Last login Fri Mar 30 18:37 (CST) on pts/0 from 218.26.179.150
    No mail.
    No Plan.

      本地登录是tty,远程是pts

    (4)su切换(加-的时候环境变量也会跟着变)

    例如:不加-的时候切换的还是root的目录和环境变量

    [root@VM_0_12_centos ~]# su qlq
    [qlq@VM_0_12_centos root]$ pwd
    /root
    [qlq@VM_0_12_centos root]$ echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/mongodb-linux-x86_6
    4-3.0.6/bin/:/root/bin:/usr/local/mongodb-linux-x86_64-3.0.6/bin/

    加-的时候环境变量和目录页跟着变为当前用户的:

    [root@VM_0_12_centos ~]# su - qlq  #加-切换用户
    Last login: Fri Mar 30 19:40:18 CST 2018 on pts/0
    [qlq@VM_0_12_centos ~]$ pwd
    /home/qlq
    [qlq@VM_0_12_centos ~]$ echo $PATH
    /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/qlq/.local/bin:/hom
    e/qlq/bin

      注意:root切换普通用户的时候不需要输入密码,普通用户切换root用户需要输入密码。

         #代表的是超级用户,$代表的是普通用户。

    (5)查看一个用户的密码状态: passwd -S username 

    [root@VM_0_12_centos qlq]# passwd -S qlq
    qlq PS 2018-03-30 0 99999 7 -1 (Password set, MD5 crypt.)

      显示的是用户的密码信息以及是否锁定以及超时时间等信息。

    (6)锁定用户与解锁用户:

    第一种加锁与解锁的方法: (passwd -l与passwd -uf )

    • 锁定用户 passwd -l
    [root@VM_0_12_centos qlq]# passwd -l qlq #锁定用户
    Locking password for user qlq.
    passwd: Success
    [root@VM_0_12_centos qlq]# passwd -S qlq  #查看用户密码状态
    qlq LK 2018-03-30 0 99999 7 -1 (Password locked.)
    [root@VM_0_12_centos qlq]# grep qlq /etc/shadow  #查看/etc/shadow中的用户密码
    qlq:!!$1$en8QJp5f$00T1TAnX68yvu2LoWztoF0:17620:0:99999:7:::

    锁定用户:(发现用户密码前面加了两个感叹号)

      原理是通过修改/etc/shadow下对应用户的密码,导致密码验证失败。所以我们也可以手工修改/etc/shadow文件,修改用户对应的密码则会导致密码锁定。

    • 解锁用户: passwd -uf username
    [root@VM_0_12_centos ~]# passwd -uf qlq #解锁用户
    Unlocking password for user qlq.
    passwd: Success
    [root@VM_0_12_centos ~]# passwd -S qlq
    qlq PS 2018-03-30 0 99999 7 -1 (Password set, MD5 crypt.)
    [root@VM_0_12_centos ~]# grep qlq /etc/shadow  #查看/etc/shadow文件
    qlq:$1$en8QJp5f$00T1TAnX68yvu2LoWztoF0:17620:0:99999:7:::

    解锁用户:

      原理是通过将/etc/shadow下对应用户的密码前面的两个感叹号去掉密码验证通过。

    第二种加锁与解锁的方法;(usermod -L 与 usermod -U)

    [root@VM_0_12_centos ~]# passwd -S qlq  #锁定给用户
    qlq PS 2018-03-30 0 99999 7 -1 (Password set, MD5 crypt.)
    [root@VM_0_12_centos ~]# usermod -L qlq
    [root@VM_0_12_centos ~]# passwd -S qlq
    qlq LK 2018-03-30 0 99999 7 -1 (Password locked.)
    [root@VM_0_12_centos ~]# grep qlq /etc/shadow
    qlq:!$1$en8QJp5f$00T1TAnX68yvu2LoWztoF0:17620:0:99999:7:::
    [root@VM_0_12_centos ~]# usermod -U qlq  #解锁用户
    [root@VM_0_12_centos ~]# passwd -S qlq
    qlq PS 2018-03-30 0 99999 7 -1 (Password set, MD5 crypt.)
    [root@VM_0_12_centos ~]# grep qlq /etc/shadow
    qlq:$1$en8QJp5f$00T1TAnX68yvu2LoWztoF0:17620:0:99999:7:::

     注意: 

      这种方法锁定的时候选项是大写L与U,同时锁定的时候在/etc/shadow中用户棉麻前面加一个!,解锁去掉前面的一个!

    (7)who与w查看当前登录的用户信息

    •  w用法:(显示的信息更全)
    [qlq@iz2ze46xi6pjjj69ailg9lz ~]$ w
     20:06:44 up 1 day,  7:55,  2 users,  load average: 1.70, 1.94, 2.17
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    root     tty1                      11:58    1:24   0.00s  0.00s -bash
    qlq      pts/0    218.26.179.150   20:05    4.00s  0.00s  0.00s w

       显示了用户的登录时间,登录地址,空闲时间,与CPU信息,较who显示的信息更全。tty表示本机登录,pts表示远程登录。from表示从何处登录IDLE表示用户闲置时间。

    JCPU:以终端代号来区分,该中断所有的进程执行时,所有消耗的床铺时间会显示在这里。

    PCPU:CPU执行程序消耗的时间

    what:用户正在执行的动作。 

    load average:分别显示系统在过去1,5,15分钟内的平均负载值。0.8以下认为系统运行效率还行。

    • who用法:
    [qlq@iz2ze46xi6pjjj69ailg9lz ~]$ who
    root     tty1         2018-03-30 11:58
    qlq      pts/0        2018-03-30 20:05 (218.26.179.150)

    (8)chage    用来修改帐号和密码的有效期限。

    语法:
    chage [选项] 用户名

     选项:

    -m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。
    -M:密码保持有效的最大天数。
    -w:用户密码到期前,提前收到警告信息的天数。
    -E:帐号到期的日期。过了这天,此帐号将不可用。
    -d:上一次更改的日期。
    -i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
    -l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。

    例如:查看qlq信息:

    [root@iz2ze46xi6pjjj69ailg9lz qlq]# chage  -l qlq
    Last password change                                    : Mar 30, 2018
    Password expires                                        : never
    Password inactive                                       : never
    Account expires                                         : never
    Minimum number of days between password change          : 0
    Maximum number of days between password change          : 99999
    Number of days of warning before password expires       : 7

    (9)启动或停用shadow命令:

      pwconv/pwunconv

      grpconv/grpunconv

     

    也可以用authconfig进行修改:

    [root@iz2ze46xi6pjjj69ailg9lz qlq]# man authconfig | more
    AUTHCONFIG(8)               System Manager's Manual              AUTHCONFIG(8)
    
    
    
    NAME
           authconfig,  authconfig-tui  -  an  interface  for  configuring  system
           authentication resources
    
    SYNOPSIS
           authconfig
                  [options]   {--update|--updateall|--test|--probe|--restorebackup
                  <name>|--savebackup <name>|--restorelastbackup}
    
    DESCRIPTION
           authconfig  provides a simple method of configuring /etc/sysconfig/net‐
           work to handle NIS, as well as /etc/passwd and /etc/shadow,  the  files
           used  for shadow password support.  Basic LDAP, Kerberos 5, and Winbind
           client configuration is also provided.
    
           If --test action is specified, the authconfig just  reads  the  current
           settings  from the various configuration files and prints their values.

    命令行窗口修改的只能本次生效,如果想永久生效,可以修改/etc/sysconfig/authconfig ,默认配置如下:

    CACHECREDENTIALS=yes
    FORCELEGACY=no
    FORCESMARTCARD=no
    IPADOMAINJOINED=no
    IPAV2NONTP=no
    PASSWDALGORITHM=sha512
    USEDB=no
    USEECRYPTFS=no
    USEFPRINTD=no
    USEHESIOD=no
    USEIPAV2=no
    USEKERBEROS=no
    USELDAP=no
    USELDAPAUTH=no
    USELOCAUTHORIZE=yes
    USEMKHOMEDIR=no
    USENIS=no
    USEPAMACCESS=no
    USEPASSWDQC=no
    USEPWQUALITY=yes
    USESHADOW=yes
    USESMARTCARD=no
    USESSSD=yes
    USESSSDAUTH=no
    USESYSNETAUTH=no
    USEWINBIND=no
    USEWINBINDAUTH=no
    WINBINDKRB5=no

    四、批量添加用户:

    1.手动批量添加:

    (1)首选填写用户基本信息脚本:(格式类似于/etc/passwd的文件格式)

    [root@iz2ze46xi6pjjj69ailg9lz test]# cat ./user.info
    qlq1::1001:888::/home/qlq1:/bin/bash
    qlq2::1002:888::/home/qlq2:/bin/bash
    qlq3::1003:888::/home/qlq3:/bin/bash
    qlq4::1004:888::/home/qlq4:/bin/bash
    qlq5::1005:888::/home/qlq5:/bin/bash

    (2)newusers导入用户

    [root@iz2ze46xi6pjjj69ailg9lz test]# newusers < user.info  #导入用户信息
    [root@iz2ze46xi6pjjj69ailg9lz test]# tail -5 /etc/passwd #查看/etc/passwd最后五行
    qlq1:x:1001:888::/home/qlq1:/bin/bash
    qlq2:x:1002:888::/home/qlq2:/bin/bash
    qlq3:x:1003:888::/home/qlq3:/bin/bash
    qlq4:x:1004:888::/home/qlq4:/bin/bash
    qlq5:x:1005:888::/home/qlq5:/bin/bash

    (3)编写密码文件:(格式为  用户名:密码)

    [root@iz2ze46xi6pjjj69ailg9lz test]# cat user.pd
    qlq1:qlq1
    qlq2:qlq2
    qlq3:qlq3
    qlq4:qlq4
    qlq5:qlq5

    (4)关闭密码自动转换

    [root@iz2ze46xi6pjjj69ailg9lz test]# pwunconv

    (5)导入密码文件并查看/etc/passwd文件:

    [root@iz2ze46xi6pjjj69ailg9lz test]# chpasswd < user.pd
    [root@iz2ze46xi6pjjj69ailg9lz test]# tail -5 /etc/passwd
    qlq1:$6$PnYbXRveZyv2$S98zfhQzGV2gUHkj./gAV51R1VlQlIQBNarJ/FcfQEu2v4XURJ7luCRIYI2
    13NdzuJ9aH.n02lHr27CCbLRHM0:1001:888::/home/qlq1:/bin/bash
    qlq2:$6$PMy.cpjGEAFI$jU1U5wln2pu9TCVIAmtrwTFj/PDJljo9Q2pXgte.B.lIvsBZmaD4BJCBPpr
    DBvajnQ9N6zt8Uc3A1OJMl/UzV/:1002:888::/home/qlq2:/bin/bash
    qlq3:$6$tsOk0/bIkIxuw1f$8K4u5VnKhJt7Ih34yX0MDD/d58Ix9FTsLXkwzG4etbGLRRaMID1HOomm
    OKyxD6U4.oOuZq0z7TZnQ/jTaHO2v/:1003:888::/home/qlq3:/bin/bash
    qlq4:$6$Vm2wN8YdVN/6$sGGm53KKCPzwtw4NnzXSrTz.OI.3v.cNoV//yQo9P3lHjU8K22s7S5LC9nr
    1tkY8qC.bYLxHe7.MW/CptklvW0:1004:888::/home/qlq4:/bin/bash
    qlq5:$6$yG6E//cntTS$foihNqZpJyh0So9wflT9sjjGPNZv7GZuS5AJbtk0FdRsaFyu3Hc2U5Rha.7Y
    JiaTqmRD/dP1sD8CEJ8Bk3Xeq.:1005:888::/home/qlq5:/bin/bash

     (6)开启密码自动转换,密码写入/etc/shadow文件:

    [root@iz2ze46xi6pjjj69ailg9lz test]# pwconv  #开启密码转换
    [root@iz2ze46xi6pjjj69ailg9lz test]# tail -5 /etc/passwd
    qlq1:x:1001:888::/home/qlq1:/bin/bash
    qlq2:x:1002:888::/home/qlq2:/bin/bash
    qlq3:x:1003:888::/home/qlq3:/bin/bash
    qlq4:x:1004:888::/home/qlq4:/bin/bash
    qlq5:x:1005:888::/home/qlq5:/bin/bash

    2.利用ssh脚本自动添加用户;

    例如:C语言风格的for循环批量添加用户的脚本:

    #!/bin/bash
    #adduser batch
    echo "please input username:"
    read username
    echo "please input number to create:"
    read number
    #start to create user
    for(( i=1;i<="${number}";i++ ))
    do
            /usr/sbin/adduser "${username}${i}" > /dev/null 2> /dev/null
    done
    #add finished
    echo "add OK!"
    echo "please input passwd for users"
    read password
    for(( i=1;i<="${number}";i++ ))
    do
            /usr/sbin/usermod -p "${password}" "${username}${i}"  > /dev/null 2> /dev/null
    done

    结果:

    [root@VM_0_12_centos sshDemo]# ./addUserBatch.sh
    please input username:
    ppp
    please input number to create:
    20
    add OK!
    please input passwd for users
    123456
    [root@VM_0_12_centos sshDemo]# tail -5 /etc/passwd
    ppp16:x:1017:1017::/home/ppp16:/bin/bash
    ppp17:x:1018:1018::/home/ppp17:/bin/bash
    ppp18:x:1019:1019::/home/ppp18:/bin/bash
    ppp19:x:1020:1020::/home/ppp19:/bin/bash
    ppp20:x:1021:1021::/home/ppp20:/bin/bash
    [root@VM_0_12_centos sshDemo]# tail -5 /etc/shadow
    ppp16:123456:17622:0:99999:7:::
    ppp17:123456:17622:0:99999:7:::
    ppp18:123456:17622:0:99999:7:::
    ppp19:123456:17622:0:99999:7:::
    ppp20:123456:17622:0:99999:7:::

    例如:批量删除用户的脚本:

      解释:去passwd查找第一列过滤输入的关键词,然后在第一列中查找关键词,如果查到就输出给users,最后循环删除:$?用于判断上一次命令的返回状态码,如果返回0代表正常结束,否则就是失败!

    #!/bin/bash
    #delete user batch
    echo "please input username word to delete"
    read word
    #get All users like word*
    users=`/usr/bin/grep ${word} /etc/passwd | awk -F: -v word1=${word} 'index($1,wo
    rd1)>0 {print $1}'`
    if [ "${users}" = '' ]
     then
            echo "user is does not exist!"
            exit 1
    fi
    for username in ${users}
    do
            /usr/sbin/userdel -rf ${username} > /dev/null 2>/dev/null
    done
    if [ "0" = "$?" ]
            then
            echo "delete ok!"
    else
            echo "delete failed!"
    fi

     

       解释:

      一般在shell编程我们需要将一些打印输入重定向出来,如果我们不想看这些结果可以重定向到/dev/null ,  /dev/null是unix,linux的一个无底洞,我们重定向进去的东西将永远也找不回来。错误信息也可以使用  2> 重定向到/dev/null  ,如果我们希望自己可以查看信息,可以自己制定重定向的文件。

      我们在程序中可以使用"$?"判断上一个命令的执行结果,如果返回0就是执行成功,否则执行失败。

      >重定向覆盖模式,>>是追加模式。

    五、重要的用户权限管理

     1.限定某些人可以用su命令:(利用组管理权限)

      思路:将一个命令的others的权限去掉,更改命令的所属组,并将可以执行命令的用户添加到这个组中即可实现按组管理命令。

     (1)查看su的权限

    [root@iz2ze46xi6pjjj69ailg9lz qlq]# ll `which su`
    -rwsr-xr-x 1 root root 32096 Apr 13  2017 /bin/su

     (2)去掉su的o的x权限

    [root@iz2ze46xi6pjjj69ailg9lz ~]# chmod 4750 `which su`
    [root@iz2ze46xi6pjjj69ailg9lz ~]# ll `which su`
    -rwsr-x--- 1 root root 32096 Apr 13  2017 /usr/bin/su

    (3)此时qlq用户执行su命令报未授权:

    [qlq@iz2ze46xi6pjjj69ailg9lz ~]$ su root
    Password:
    su: Authentication failure

    (4)创建一个组并赋予将su所属组改为这个组:

    [root@iz2ze46xi6pjjj69ailg9lz qlq]# groupadd sugrp
    [root@iz2ze46xi6pjjj69ailg9lz qlq]# chgrp sugrp /bin/su
    [root@iz2ze46xi6pjjj69ailg9lz qlq]# ll `which su`
    -rwsr-x--- 1 root sugrp 32096 Apr 13  2017 /usr/bin/su

    (5)将qlq用户添加到这个组

    [root@iz2ze46xi6pjjj69ailg9lz qlq]# usermod -g sugrp qlq
    [root@iz2ze46xi6pjjj69ailg9lz qlq]# id qlq
    uid=1000(qlq) gid=1001(sugrp) groups=1001(sugrp)

    (6)qlq执行su命令:

    [qlq@iz2ze46xi6pjjj69ailg9lz ~]$ su root
    Password:
    [root@iz2ze46xi6pjjj69ailg9lz qlq]# ls

    (7)qlq11用户执行su命令没权限;(不在组内)

    [qlq11@iz2ze46xi6pjjj69ailg9lz qlq]$ id
    uid=1006(qlq11) gid=1006(qlq11) groups=1006(qlq11)
    [qlq11@iz2ze46xi6pjjj69ailg9lz qlq]$ su qlq
    bash: /usr/bin/su: Permission denied

    2.利用sudo命令来管理权限,防止su暴露root密码:   (sudo用法)

      更具体的参考:http://blog.51cto.com/chenfage/1830424

    (1)将su命令的others的权限置为0,所有用户不能执行su命令

    [root@VM_0_12_centos ~]# ll `which su`
    -rwsr-x--- 1 root root 32096 Apr 13  2017 /usr/bin/su

    (2)qlq11执行su命令:

    [qlq11@VM_0_12_centos root]$ su qlq
    bash: /usr/bin/su: Permission denied

    (3)编辑sudo命令,使qlq11可以使用sudo命令(重点)

    • 区别

    sudo:可以让普通用户拥有root权限去执行命令,sudo的配置文件是/etc/sudoers。

    visudo:通过visudo编辑/etc/sudoers,可以检查语法。

    • 参数说明      sudo

    -l:查看授权情况,列出用户在主机上可用的和被禁止的命令※

    -k:删除时间戳,时间戳默认5分钟也会失效

    -u:指定某个用户身份去执行特定的命令操作

    例如:root利用visudo编辑/etc/sudoers文件:

    语法格式:

      用户名    主机=命令(绝对命令)

     

    1. 在/etc/sudoers最后一行加入下列命令:
    [root@VM_0_12_centos ~]# tail -1 /etc/sudoers
    qlq11 ALL=/usr/bin/su     #qlq11可以在任何主机执行/usr/bin/su命令,多个命令可以用参数隔开

      上面的qlq11表示用户名,ALL是主机别名,表示在任何主机,后面的是命令的全路径,多个命令用逗号隔开,也可以具体到某个选项。

    注意:我们在/etc/sudoers中可以看到   下面root的配置,因此root可以不接收任何权限的限制。

    [root@VM_0_12_centos ~]# grep root /etc/sudoers
    ## the root user, without needing the root password.
    ## Allow root to run any commands anywhere
    root    ALL=(ALL)       ALL
    ## cdrom as root

    如果我们希望qlq用户用sudo执行任何命令可以加一会

    ## Allow root to run any commands anywhere
    qlq    ALL=(ALL)       ALL

        2.qlq11用户查看自己可以执行的sudo命令并执行su命令(不会暴露root的密码)

    [qlq11@VM_0_12_centos root]$ su   #直接执行会报错
    bash: /usr/bin/su: Permission denied
    [qlq11@VM_0_12_centos root]$ su root
    bash: /usr/bin/su: Permission denied     
    [qlq11@VM_0_12_centos root]$ /usr/bin/su root
    bash: /usr/bin/su: Permission denied
    [qlq11@VM_0_12_centos root]$ sudo -l   #查看自己可以以root身份执行的命令
    [sudo] password for qlq11:
    Matching Defaults entries for qlq11 on VM_0_12_centos:
        !visiblepw, always_set_home, match_group_by_gid, env_reset,
        env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
        env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
        env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
        env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
        env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
        secure_path=/sbin:/bin:/usr/sbin:/usr/bin
    
    User qlq11 may run the following commands on VM_0_12_centos:
        (root) /usr/bin/su
    [qlq11@VM_0_12_centos root]$ sudo su root    #以sudo执行sudo命令
    [root@VM_0_12_centos ~]#

      总结:sudo命令实际是去/etc/sudoers里面查看用户可以以sudo执行哪些命令,root用户配置了在任何地点以执行任何命令,因此root的权限不受限制,这也是root是最大的管理员的原因。

        sudo是让普通用户以root的身份执行一个命令,用sudo -l 也可以看到命令前面加的有(root),这个命令不一定是root才能使用的命令,也可以是一个普通的命令;

        sudo可以精确化,甚至可以具体到一个带参数与选项的命令。例如我们可以让一个用户立马关机命令,我们可以在/etc/sudoers里面配置: username ALL=/sbin/shutdown -h now 

  • 相关阅读:
    数据库设计
    Java各类格式转换
    Linux下如何查看tomcat是否启动/系统日志等
    string去空格
    Tomcat
    linux下的显示有中国农历的日历ccal
    Linux命令
    JSP学习-02隐式对象
    jQuery 遍历
    jQuery 隐藏效果
  • 原文地址:https://www.cnblogs.com/qlqwjy/p/8677995.html
Copyright © 2020-2023  润新知