用户管理与用户组管理
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文件:
语法格式:
用户名 主机=命令(绝对命令)
- 在/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