用户管理与用户组管理

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 

 

posted @ 2018-03-30 18:44  QiaoZhi  阅读(1127)  评论(0编辑  收藏  举报