第十五章 用户管理
一、管理用户命令汇总
1、useradd:添加用户
2、userdel:删除用户及相关用户配置或文件
3、passwd:设置用户密码
4、chage:修改用户密码有效期限
5、usermod:修改用户登录名、家目录等
6、id:查看用户uid、gid及所归属的用户组
7、su:用户切换工具
8、sudo:通过另一个用户来执行命令
9、visudo:配置sudo权限的编辑/etc/sudoers文件命令,有语法检查
10、pwcov:同步用户从/etc/passwd到/etc/shadow
11、pwck:检验用户配置文件/etc/passwd和/etc/shadow文件内容是否合法或完整
12、pwunconv:pwcon的逆向操作,从/etc/shadow和/etc/passwd创建/etc/passwd,最后删除/etc/shadow文件
13、chfn:更改用户信息
14、chsh:更改用户登陆shell
15、finger:查看用户信息
16、sudoedit:类似于sudo
二、管理用户组命令汇总
1、groupadd:添加用户组
2、gpasswd:为用户组设置密码
3、groups:显示用户所属的用户组
4、newgrp:更改用户所属的有效用户组
5、grpck:
6、grpconv:通过/etc/group和/etc/gshadow文件内容来创建/etc/gshadow
7、grpnuconv:通过/etc/group和/etc/gshadow文件内容来同步或创建/etc/group,最后删除/etc/gshadow文件
三、相关目录和文件
1、/etc/skel目录
/etc/skel目录是一个样本目录,创建用户都是以这个为原型,然后按你的命令参数修改。当系统内增加新用户时,该目录下的所有文件都将被自动复制到该用户的主目录默认时,这些文件中的大部分都是以(.)文件。
通过修改、添加、删除/etc/skel目录下的文件,可以为新创建的用户提供统一的、标准的、初始化的用户环境。
ll -a /etc/skel
drwxr-xr-x. 4 root root 4096 Jan 1 23:58 .
drwxr-xr-x. 124 root root 12288 Jan 30 14:48 ..
-rw-r--r--. 1 root root 18 Jul 18 2013 .bash_logout
-rw-r--r--. 1 root root 176 Jul 18 2013 .bash_profile
-rw-r--r--. 1 root root 124 Jul 18 2013 .bashrc
-rw-r--r--. 1 root root 500 May 7 2013 .emacs
drwxr-xr-x. 2 root root 4096 Nov 12 2010 .gnome2
drwxr-xr-x. 4 root root 4096 Jan 1 23:33 .mozilla
-rw-r--r--. 1 root root 658 Nov 25 2013 .zshrc
2、/etc/login.defs文件
/etc/login.defs 是设置用户帐号限制的文件,如是否需要home目录、UID和GID的范围、用户及密码有效期限等。该文件里的配置对root用户无效。
如果/etc/shadow文件里有相同的选项,则以/etc/shadow里的设置为准,也就是说/etc/shadow的配置优先级高于/etc/login.defs.
man /etc/login.defs
cat /etc/login.defs | grep -v ^#
MAIL_DIR /var/spool/mail #创建用户时,要在目录/var/spool/mail中创建一个用户mail文件
PASS_MAX_DAYS 99999 #用户的密码不过期最多的天数
PASS_MIN_DAYS 0 #密码修改之间最小的天数
PASS_MIN_LEN 5 #密码最小长度
PASS_WARN_AGE 7
UID_MIN 500 #最小UID为500,也就是说添加用户时,UID是从500开始的
UID_MAX 60000 #最大UID为60000
GID_MIN 500 #GID是从500开始
GID_MAX 60000 #最大GID为60000
CREATE_HOME yes #是否创用户家目录,要求创建
UMASK 077
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512
3、/etc/default/useradd文件
/etc/default/useradd文件主要是定义默认家目录、环境配置文件目录、登入执行首个程序等内容。在使用useradd命令添加用户时会默认调用该配置文件。也可以使用useradd –D 参数,这样的命令格式来修改文件里面的内容。
cat /etc/default/useradd
# useradddefaults file
GROUP=100 #gid=100,表示可创建普通组
HOME=/home #把用户的家目录建在/home中;用户家目录的默认创建地
INACTIVE=-1 #是否启用帐号过期停权,-1表示不启用;宽限天数,0及以下数皆为无效数字
EXPIRE= #帐号终止日期,不设置表示不启用;帐号失效日期(如:20081212)
SHELL=/bin/bash #所用SHELL的类型;登录后执行的程序
CREATE_MAIL_SPOOL=yes #表示是否创建邮箱缓存 yes表示创建
SKEL=/etc/skel #用户家目录中的环境文件,默认添加用户的目录默认文件存放位置;也就是说,当我们用adduser添加用户时,用户家目录下的文件,都是从这个目录中复制过去的;
四、管理用户和组命令之一:添加用户命令useradd
1、概述
添加用户的命令有useradd和adduser,这两个命令的效果相同。当然也可以通过修改用户配置/etc/passwd和/etc/group及手动创建文件的办法来直接添加用户,不过不建议用手动方法直接创建,统一使用useradd命令。
2、-D参数说明(其它常用参数见常用命令56)
当执行useradd -D 参数时,是更改新建用户的默认配置值(更改/etc/default/useradd文件,永久生效),或是由命令列编辑的方式更新预设值。也就是用useradd -D命令来修改/etc/default/useradd文件。类似于visudo。
-D的参数选项:
-b default_home :指定用户家目录所在目录(也就是指定home目录)。使用-d后此选项失效
-edefault_expire_date :用户帐号停止日期
-fdefault_inactive :帐号过期几日后停权.0:立即停权 -1:关闭此功能(默认值-1)
-g default_group :新帐号的起始用户组名或ID(事先必须存在).
-s default_shell :指定登陆后的shell。useradd -s优于此默认配置
3、示例1:不加任何参数,直接添加用户
(1)操作命令:
useradd test
(2)查看家目录:
ls -ld/home/test
drwx------. 4test test 4096 Jan 31 11:40 /home/test
(3)查看/etc/passwd
grep test/etc/passwd
test:x:505:505::/home/test:/bin/bash
(4)查看/etc/group
grep test/etc/group
test:x:505:
(5)查看/etc/shadow
grep test/etc/shadow
test:!!:17197:0:99999:7:::
(6)查看/etc/gshadow
grep test/etc/gshadow
test:!::
(7)使用fihger查看用户信息
finger test
Login: test Name:
Directory:/home/test Shell:/bin/bash
Never logged in.
No mail.
No Plan.
4、示例2:使用-g,-u参数添加用户
useradd dba -uoracle -g oracle
useradd sa -u808 -g 801 -M -s /sbin/nologin
5、示例3:使用-e参数添加用户,并指定过期日期
(1)操作命令:
useradd test01-e "2017/02/01"
(2)使用chage查看用户信息
chage -l test01
Last passwordchange : Jan 31, 2017
Passwordexpires : never
Passwordinactive : never
Account expires : Feb 01,2017
Minimum numberof days between password change : 0
Maximum numberof days between password change :99999
Number of daysof warning before password expires : 7
(3)修改日期,模拟过期
date -s'2017-02-01'
date
Wed Feb 1 00:00:00 CST 2017
test01正常登陆
date -s'2017-02-01 13:27'
date
Wed Feb 1 13:27:00 CST 2017
test01登陆失败
Your account hasexpired; please contact your system administrator
date -s'2017-02-02'
date
Thu Feb 2 00:00:00 CST 2017
test01登陆失败
Your account hasexpired; please contact your system administrator
(4)过期后通过su切换
root用户:正常切换
普通用户:不能切换,报错
Your account hasexpired; please contact your system administrator
su: incorrectpassword
(5)查看/etc/shadow文件
tail -1/etc/shadow
test01:$6$Olk/T5Z2$X/RVDtt4XJRwFW...2njBx6S4x.a6/:17197:0:99999:7::17198:
其中的最后2个冒号:之前的17198就是失效日期。(时间是如何记录的???)
(4)结论
CentOS6中useradd -e参数是精确到时间了,创建用户时,不仅记录了日期,还记录了时间。
CentOS5中到期的后一天还可以登陆,后二天才不允许登陆。
无法登陆后,均可通过root用户su 切换到该用户,普通用户不能su切换。
用户的有效期记录是写在/etc/shadow文件中的倒数第二栏位中。
6、示例4:使用-c、-u、-G、-s、-d多个参数组合
(1)要求:
添加用户test02,并设置其用户注释为HandsomeBoy,UID指定为806,归属为用户组root、sa、oldboy、test成员,其shell类型为/bin/sh,设置home目录为/wddg/exp。
(2)操作命令:
useradd test02-u 806 -G root,sa,oldboy -s /bin/sh -c "HandsomeBoy" -d /wddg/exp
(3)查看/etc/passwd
tail -1/etc/passwd
test02:x:806:806:HandsomeBoy:/wddg/exp:/bin/sh
(4)id命令查看用户test02信息
id test02
uid=806(test02) gid=806(test02)groups=806(test02),0(root),502(oldboy),808(sa)
(5)查看家目录:
ls -ld /wddg/exp
drwx------. 4test02 test02 4096 Jan 31 15:04 .
drwxrwxrwx. 7root 99999 4096 Jan 31 15:04 ..
-rw-r--r--. 1test02 test02 18 Dec 22 2015 .bash_logout
-rw-r--r--. 1test02 test02 176 Dec 22 2015 .bash_profile
-rw-r--r--. 1test02 test02 124 Dec 22 2015 .bashrc
7、示例5:-D使用
(1)-s修改以后新建用户登陆后的shell
a、查看当前新建用户配置文件/etc/default/useradd
cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
b、操作命令:
useradd -D -s /bin/sh
c、再次查看当前新建用户配置文件/etc/default/useradd
cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/sh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
(2)-e统一设定以后新建用户的失效日期
a、操作命令:
useradd -D -e "2018/01/01"
b、查看当前新建用户配置文件/etc/default/useradd
cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=2018/01/01
SHELL=/bin/sh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
(3)新建用户test03,查看效果
a、操作命令:
useradd test03
b、查看/etc/passwd
grep test03 /etc/passwd
test03:x:807:807::/home/test03:/bin/sh
c、使用chage查看用户信息
chage -l test03
Last password change : Jan 31, 2017
Password expires :never
Password inactive : never
Account expires : Jan 01, 2018
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
(4)通过vi命令将useradd -D修改的内容还原
vi /etc/default/useradd
cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
五、管理用户和组命令之二:添加组命令groupadd
1、概述
与之相关的文件有/etc/group和/etc/gshadow。命令非常简单,生产环境使用较少,只需了解。
2、命令格式
groupadd [-g gid] [-o][-r][-f] groupname
3、参数
-g gid:指定用户组GID值。除非接-o参数,否则GID的值必须是唯一的数字(不能为负数),不指定-g,则gid默认从500开始。
-r:建立系统用户组。GID值会比/etc/login.defs中定义的UID_MIN值要小
-f:新增用户组时,可强制覆盖一个已存在的用户组帐号
4、示例1:使用-g参数添加用户组
groupadd k1 -g 1000
tail -1 /etc/group
k1:x:1000:
5、示例2:使用-r参数添加用户组
roupadd -r k2
tail -1 /etc/group
k2:x:482: #此时gid为482<500
4、示例3:使用-f参数添加用户组
groupadd k1
报错,提示k1组已存在groupadd: group 'k1' already exists
groupadd -f k1 #通过
六、管理用户和组命令之三:修改用户密码命令passwd
1、概述
passwd命令的用法有很多,但大多数用法在平时工作中都不经常使用,我们只关心日常工作中常用的用法。
普通用户和超级用户都可以运行passwd命令,但普通用户只能更改自身的密码,超级用户root则可以设置或修改所有用户的密码。
ll /etc/passwd
-rw-r--r--. 1root root 4138 Jan 31 15:41 /etc/passwd
ls -l `which passwd`
-rwsr-xr-x. 1root root 30768 Nov 3 2015 /usr/bin/passwd
对于/etc/passwd文件,普通用户只有只读权限,无法修改。但passwd命令上有特殊权限s,任何用户执行passwd命令,都相当于root用户在执行passwd命令。
2、命令格式
passwd :修改自身密码
passwd [参数]username :修改指定username用户的密码
3、参数
-k --keep-tokens :保留即将过期的用户在期满后仍能使用
-l --lock :锁定用户无权更改其密码,只能root才能操作
-u --unlock :解除锁定
-S --status :查看用户状态
-d --delete :删除用户密码,只能root才能操作
-f --force :强制操作,只能root才能操作
-n mindays :修改密码的最小天数,也就是mindays天内不能再次修改密码
-i inactivedays : 密码有效期
-w warndays :密码过期前warndays天警告时间
-x maximum :两次密码修改之间的天数,也就是maximum天内必须修改密码,只能root才能操作
--stdin :从stdin读入密码,不会有提示
4、示例1: --stdin参数,无提示操作
(1)无任何提示,直接修改test01用户密码
echo "123456" | passed --stdin test01
(2)传统交互式操作,有提示,需2次输入认证
passwd test01
Changing password for user test01.
New password:
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
5、示例2: -l参数,锁定用户
(1)锁定用户test01
passwd -l test01
Locking password for user test01.
passwd: Success
You have new mail in /var/spool/mail/root
(2)切换到用户test01,测试修改密码(无法修改test01密码,只有root才行)
su - test01
passwd
Changing password for user test01.
Changing password for test01.
(current) UNIX password:
passwd: Authentication token manipulation error #报错,
(3)查看/etc/shadow文件中test01用户,密码前多出!!,表示锁定状态
grep test01 /etc/shadow
test01:!!$6$lBqHfFNj$J25W2AM...uYd7sgb5og4f.OfvJY0xr1:17197:0:99999:7::17198:
6、示例3: -u参数,解锁用户
(1)解锁用户test01
passwd -u test01
Unlocking password for user test01.
passwd: Success
(2)切换到用户test01,测试修改密码(未成功,test01始终不能修改自身密码)
su - test01
passwd
报错是:passwd:Authentication token manipulation error
(3)查看/etc/shadow文件中test01用户,密码前没有!!,表示已解除锁定
grep test01 /etc/shadow
test01:$6$lBqHfFNj$J25W2AM...uYd7sgb5og4f.OfvJY0xr1:17197:0:99999:7::17198:
6、示例4: -S参数,查看用户状态
passwd --status test01
test01 PS 2017-01-31 0 99999 7 -1 (Password set, SHA512 crypt.)
7、示例5:-x、-n、-w、-i组合参数控制密码时效
(1)要求:
要求test01用户7天内不能更改密码,60天以后必须修改密码,过期前10天通知test01用户,过期30天后禁止用户登陆。
(2)查看用户test01情况
chage -l test01
Last passwordchange : Jan 31, 2017
Passwordexpires : never
Passwordinactive : never
Accountexpires : Feb 01, 2017
Minimum numberof days between password change : 0
Maximum numberof days between password change : 99999
Number of daysof warning before password expires : 7
(3)操作命令:
passwd -n 7 -x 60 -w 10 -i 30 test01
或
chage -m 7 -M 60 -W 10 -I 30 test01
(4)修改后,再次查看用户test01情况
chage -l test01
Last passwordchange : Jan 31, 2017
Passwordexpires :Apr 01, 2017
Passwordinactive : May 01,2017
Accountexpires : Feb 01, 2017
Minimum numberof days between password change : 7
Maximum numberof days between password change : 60
Number of daysof warning before password expires : 10
七、管理用户和组命令之四:修改密码有效期命令chage
1、概述
chage命令是用来修改用户密码有效期限的,是changeuser password expiry information的缩写。与passwd命令的部分功能重复。
2、命令格式
chage [参数选项]username
3、参数
-d :指定密码最后修改日期
-E :密码到期的日期,过了这天,此账号将不可用。0表示马上过期,-1表示永不过期。
-h :显示帮助信息并退出
-I :密码过期后,锁定账号的天数
-l :列出用户以及密码的有效期
-m :密码可以更改的最小天数。为零代表任何时候都可以更改密码。
-M :密码保持有效的最大天数。
-W :密码过期前,提前收到警告信息的天数
4、示例1: -E参数,指定密码过期日期
chage -E "2018/02/03" test
5、示例2: -l参数,查看用户以及密码的有效期
chage -l test
Last password change : Jan 20, 2017 # 由-d参数修改
Password expires : never # 由-M参数值加上Last password change决定
Password inactive :never # 由-I参数修改
Account expires :never # 由-E参数修改
Minimum number of days between passwordchange : 0 # 由-m参数修改
Maximum number of days between passwordchange : 99999 # 由-M参数修改
Number of days of warning beforepassword expires : 7 # 由-W参数修改
6、示例3: -d参数,指定密码最后修改日期
chage -d "2018/02/04" test
7、示例4: -m、-M、-W参数,指定两次密码更改之间的最小天数、最大天数和过期前提前收到警告信息的天数
chage -m 5 -M 100 -W 10 test
八、管理用户和组命令之五:删除用户命令userdel
1、概述
删除用户及用户相关的信息。相关文件为/etc/passwd、/etc/shadow、/etc/group
2、命令格式
userdel [-rf] username
3、参数
-r :在删除用户的同时,一并把用户的家目录及本地邮件存储的目录或文件也一同删除
-f :强制删除用户,即使用户当前已登录。
4、示例1:不带参数,只删除用户保留用户家目录和其它
(1)操作命令:
userdel test
(2)查看/etc/passwd文件,无test信息
grep test /etc/passwd
(3)查看/etc/shadow文件,无test信息
grep test /etc/shadow
(4)查看/etc/group文件,无test组信息
grep test /etc/group
(5)查看/etc/ gshadow文件,无test组信息
grep test /etc/gshadow
(6)查看/home/test目录,目录存在
ls -ld /home/test
drwx------. 4 502 502 4096 Jan 20 16:38 /home/test
(7)查看/var/mail/test目录,目录存在
ls -ld /var/mail/test
-rw-rw----. 1 502 mail 0 Jan 20 14:54 /var/mail/test
5、示例2:-r参数,删除用户相关所有信息
(1)操作命令:
userdel -r test
(2)查看/etc/passwd文件,无test信息
grep test /etc/passwd
(3)查看/etc/shadow文件,无test信息
grep test /etc/shadow
(4)查看/etc/group文件,无test组信息
grep test /etc/group
(5)查看/etc/ gshadow文件,无test组信息
grep test /etc/gshadow
(6)查看/home/test目录,目录不存在
ls -ld /home/test
ls: cannot access /home/test: No such file or directory
(7)查看/var/mail/test目录,目录不存在
ls -ld /var/mail/test
ls: cannot access /var/mail/test: No such file or directory
6、为会删除test用户时会同时删除test组?
(1)创建用户test01、test02、test03,让test02和test03同组
useradd test01
id test01
uid=500(test01) gid=501(test01) groups=501(test01)
useradd test02
id test02
uid=501(test02) gid=502(test02) groups=502(test02)
useradd test03 -g test02
id test03
uid=502(test03) gid=502(test02) groups=502(test02)
(2)查看/etc/passwd和/etc/group文件
tail -3 /etc/passwd
test01:x:500:501::/home/test01:/bin/bash
test02:x:501:502::/home/test02:/bin/bash
test03:x:502:502::/home/test03:/bin/bash
tail -3 /etc/group
incahome:x:500:
test01:x:501:
test02:x:502:
(3)删除用户test01,并查看相应文件,发现test01组也被同时删除
userdel -r test01
tail -3 /etc/group
apache:x:48:
incahome:x:500:
test02:x:502:
(4)删除用户test03,并查看相应文件,发现test02组仍存在
userdel -r test03
tail -3 /etc/group
apache:x:48:
incahome:x:500:
test02:x:502:
(5)删除用户test02,并查看相应文件,发现test02组也被同时删除
userdel -r test02
tail -3 /etc/group
pulse-access:x:493:
apache:x:48:
incahome:x:500:
(6)重新创建用户test02和test03,两者仍同属test02组
useradd test02
useradd test03 -g test02
(7)先删除用户test02,提示test02组是其它用户的属主,不能删除
userdel -r test02
userdel: group test02 is the primary group of another user and isnot removed.
(8)查看相应文件,test02用户已被删除,test02组还存在
tail -2 /etc/passwd
apache:x:48:48:Apache:/var/www:/sbin/nologin
test03:x:501:501::/home/test03:/bin/bash
tail -2 /etc/group
incahome:x:500:
test02:x:501:
(9)删除用户test03, 并查看相应文件,发现test02组仍存在
userdel -r test03
tail -2 /etc/passwd
pulse:x:497:494:PulseAudio SystemDaemon:/var/run/pulse:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
tail -2 /etc/group
incahome:x:500:
test02:x:501:
(10)先创建用户组kkk,再创建用户test02和test03,并指定属组为kkk
groupadd kkk
useradd test02 -g kkk
useradd test03 -g kkk
(11)删除用户test02和test03,无提示,且kkk组存在
userdel -r test03
userdel -r test02
tail -2 /etc/group
incahome:x:500:
kkk:x:501:
(12)结论:只针对userdel删除用户的情况
a、当用户组是同名用户组(不论是创建用户时创建的,还是事先创建用户组,后通过-g指定)
(i)如果该用户组下只有一个同名用户,则删除该用户时,也同时将同名用户组删除。
(ii)如果该用户组下有多个用户,如果是先删除该同名用户时,不会将同名用户组删除,会给出还有其它用户的提示。再删除该用户组下所有其它用户,也不会删除该用户组。
如果是先删除其它用户,最后删除同名用户时,会同时将同名用户组删除。
b、用户组不是同名用户组,由-g参数指定。
删除组下用户时,不会出现is the primary group of another user。删除所有用户后,组仍存在,需用groupdel命令删除
7、示例3:-f参数,强制删除用户相关所有信息
(1)删除登陆中的用户test(报错,删不了)
userdel -r test
userdel: user test is currently logged in
(2)查看/etc/passwd文件,test用户仍存在
tail -1 /etc/passwd
test:x:505:505::/home/test:/bin/bash
(3)加-f参数删除(同样报错,但已经删除)
userdel -f test
userdel: usertest is currently logged in
(4)查看/etc/passwd文件,test用户已不存在
tail -1 /etc/passwd
apache:x:48:48:Apache:/var/www:/sbin/nologin
(5)登陆中的test用户仍可继续操作,但退出后则不能登陆了。用户的home文件夹以及邮件文件夹都存在
ls -a ~
. .. .bash_logout .bash_profile .bashrc .gnome2 .mozilla
ls -al /var/mail/test
-rw-rw----. 1500 mail 0 Feb 1 18:25 /var/mail/test
exit
logout
su - test
su: user testdoes not exist
(6)网上资料说使用-f选项,会将用户的home文件夹以及邮件文件夹都会被删除。但在32位的CentOS6.5上测试发现用户的home文件夹以及邮件文件夹都存在。
8、userdel命令使注意事项
(1)不要轻易用-r选项.
由于当前生产环境运维不堆满,一些人习惯将一重要的文件放在用户的home目录中,-r选项会删除用户的同时删除用户所有的文件和目录,会将这些文件一起删除。
(2)不建议直接在/etc/passwd中删除想要删除用户的记录。
/etc/passwd是极为重要的文件,可能一不小心会操作失误。造成意料不到的后果。
(3)在删除前请备份。
其实也有最简单的办法,直接在/etc/passwd中想要删除用户的记录前加上#号,将其注释掉。
(4)最好是不用-f选项
-f 选项的 userdel 不会断开 该用户已有的 SSH 链接。因此,即使用户已经不存在,但实际上仍是登录状态,并且是活跃用户。因此所以这个选项使用起来有些危险,会使你的系统进入不一致的状态。
九、管理用户和组命令之六:删除用户组命令groupdel
1、概述
删除用户组,需先移除组下的用户,再删除组
2、命令格式
groupdel groupname
3、示例
groupdel test01
十、管理用户和组命令之七:修改用户信息命令usermod
1、概述
用于修改用户的基本信息。usermod命令不允许你改变正在线上的使用者帐号名称。当usermod命令用来改变user id,必须确认这名user没在电脑上执行任何程序。你需手动更改使用者的任务计划。如crontab、at等。采用NIS server须在server上更动相关的NIS设定。
2、命令格式
usermod (选项)username
3、参数
-d :指定密码最后修改日期
-c<备注> :修改用户帐号的备注文字
-d<登入目录> :修改用户登入时的目录
-e<有效期限> :修改帐号的有效期限
-f<缓冲天数> :修改在密码过期后多少天即关闭该帐号
-g<群组> :修改用户所属的群组
-G<群组> :修改用户所属的附加群组
-l<帐号名称> :修改用户帐号名称
-L :锁定用户密码,使密码无效
-s :修改用户登入后所使用的shell
-u :修改用户ID
-U :解除密码锁定
4、测试用例:用户test
grep test /etc/passwd
test:x:806:806:HandsomeBoy:/home/test:/bin/sh
grep test /etc/group
root:x:0:test
incahome:x:500:test
test:x:806:
5、示例1:-s参数,修改用户shell
usermod -s /bin/bash test
grep test /etc/passwd
test:x:806:806:HandsomeBoy:/home/test:/bin/bash
6、示例2:-c参数,修改用户备注
usermod -c "abcd" test
grep test /etc/passwd
test:x:806:806:abcd:/home/test:/bin/bash
7、示例2:-u参数,修改用户UID
usermod -u 810 test
grep test /etc/passwd
test:x:810:806:abcd:/home/test:/bin/bash
8、示例2:-d参数,修改用户home目录
usermod -d /home/abc test
grep test /etc/passwd
test:x:810:806:abcd:/home/abc:/bin/bash
十一、管理用户和组命令之八:用户身份切换命令su
1、概述
用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。
2、命令格式
su [选项] username
3、参数
-c<指令>或--command=<指令>:以指定用户执行完指定的指令后,即恢复原来的身份
-f或--fast:适用于csh与tsch,使shell不用去读取启动文件
-或-l或--login:改变身份时的同时变更工作目录,以及HOME,SHELL,USER,logname、PATH变量
-m,-p或--preserve-environment:变更身份时,不要变更环境变量
-s或--shell=:指定要执行的shell
--help:显示帮助
--version;显示版本信息。
4、示例1:不带-,从test切换到root
(1)查看当前用户环境
pwd
/home/test
whoami
test
echo $USER
test
(2)切换到root用户
su root #需输入root密码
(3)再次查看当前用户环境
pwd
/home/test
whoami
root
echo $USER
test
(4)测试从root不带-切换到test时,echo $USER也会切到test下,但pwd显示的目录没有切换
5、示例2:带-,从test切换到root
(1)查看当前用户环境
pwd
/home/test
whoami
test
echo $USER
test
(2)切换到test用户
su - root
(3)再次查看当前用户环境
pwd
/root
whoami
root
echo $USER
root
6、示例3:-c,从test以apache用户执行命令后,回到test用户下
[test@study ~] ls -l
[test01@study ~] ls -l
-rw-rw-r--. 1test01 test01 0 Feb 1 20:24this_is_a_test01_home.txt
[test@study ~]$ su - test01 -c ls -l
Password:
this_is_a_test01_home.txt #test01家目录的文件
[test@study ~]$
7、su的优缺点
优点:为管理带来方便,通过切换到root下,能完成所有系统管理工具
缺点:通过su切换到root后,也有不安全因素;做为管理员如果想让其它用户通过su来切换到超级权限的root,必须把root权限密码都告诉其它用户;这在一定程度上就对系统的安全造成了威协
所以su 工具在多人参与的系统管理中,并不是最好的选择,su只适用于一两个人参与管理的系统,毕竟su并不能让普通用户受限的使用;超级用户root密码应该掌握在少数用户手中,这绝对是真理!
十二、管理用户和组命令之九:用户身份切换命令sudo
1、概述
sudo命令用来以其他身份来执行命令,预设的身份为root。在/etc/sudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟(默认)的有效期限,超过期限则必须重新输入密码。时间戳文件在劫难逃CentOS6.5中在/var/db/sudo/<username>下,CentOS5.8是/var/run/sudo/<username>/下。
2、sudo的适用条件
由于su 对切换到超级权限用户root后,权限的无限制性,所以su并不能担任多个管理员所管理的系统。通过sudo,我们能把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全的,所以sudo 也能被称为受限制的su ;另外sudo 是需要授权许可的,所以也被称为授权许可的su;
3、sudo执行命令的流程
第1步:普通用户运行sudo命令
第2步:系统检查/var/db/sudo/下是否有时间戳文件,并检查是否过期
第3步:如没有时间戳文件或有但已过期,则进入第4步。如有时间戳文件且没有过期,则直接进行第5步。
第4步:输入当前用户自已口令
第5步:检查/etc/sudoers配置文件是否有运行sudo和执行相应命令的权限
第6步:有权限,则进入第7步。如没有权限,则提示无权限后直接进入第8步,退出sudo
第7步:以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户
第8步:退出sudo
4、命令格式
sudo [选项] 命令
5、参数
-b:在后台执行指令
-h:显示帮助
-H:将HOME环境变量设为新身份的HOME环境变量
-k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;。
-l:列出目前用户可执行与无法执行的指令
-i表示以root身份登录,进程的实际用户ID和有效用户ID都变成了root,主目录也切换为root的主目录
-p:改变询问密码的提示符号
-s:执行指定的shell
-u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份
-v:延长密码有效期限5分钟
-V :显示版本信息。。
6、示例1:普通用户test执行useradd命令
(1)切换到普通用户test
su - test
(2)由test用户来新增乃test01(由于useradd命令只能由root用户操作,所以该操作会失败)
useradd test01
报错是:-bash: /usr/sbin/useradd: Permissiondenied
(3)在root用户使用visudo命令来编辑/etc/sudoers文件
a、当前用户下exit 或su - root,切回root用户
b、visudo
c、输入98gg定位到第98行,按i进入编辑状态
d、在98行root ALL=(ALL) ALL后新增一行如下:
test ALL=(ALL) /usr/sbin/useradd,/bin/rm
e、:wq保存后退出
(4)切换到普通用户test,通过sudo操作useradd命令
su - test
sudo useraddtest01
(5)要求输入当前用户test的密码
[sudo] passwordfor test:
(6)输入当前用户test的密码后,命令执行完毕.查看/etc/passwd文件,用户创建成功
tail -2/etc/passwd
test:x:500:502::/home/test:/bin/bash
test01:x:501:503::/home/test01:/bin/bash
(7)在test用户下,再次通过sudo创建用户test02,直接成功,没有要求输入密码
sudo useraddtest02
tail -2/etc/passwd
test01:x:501:503::/home/test01:/bin/bash
test02:x:502:504::/home/test02:/bin/bash
(8)查看/var/db/sudo文件夹,新增了test文件夹,并在该文件夹下新增了一个文件名为1的时间戳文件
ls -l/var/db/sudo
drwx------. 2 root test 4096 Feb 2 10:58 test
ls -l/var/db/sudo/test
-rw-------. 1 root test 32 Feb 2 15:55 1
(9)5分钟后,再次由test用户新建用户test03,又要求输入当前用户test的密码
sudo useraddtest03
[sudo] passwordfor test:
(10)输入当前用户test的密码后,命令执行完毕.查看/etc/passwd文件,用户创建成功
tail -2/etc/passwd
test02:x:502:504::/home/test02:/bin/bash
test03:x:503:505::/home/test03:/bin/bash
(11)删除/var/db/sudo/test/文件夹,再创建用户,又有提示需要密码
rm -fr/var/db/sudo/test
sudo useraddtest04
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy ofothers.
#2) Think before you type.
#3) With great power comesgreat responsibility.
[sudo] passwordfor test:
(12)查看/var/db/sudo文件夹,又新增了test文件夹,并在该文件夹下新增了一个文件名为1的时间戳文件
ls -l/var/db/sudo/test
-rw-------. 1 root test 32 Feb 2 16:39 1
7、示例2:普通用户查看自身sudo权限
sudo -l
[sudo] passwordfor test:
MatchingDefaults entries for test on this host:
requiretty, !visiblepw, always_set_home, env_reset,env_keep="COLORS
DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIRLS_COLORS", env_keep+="MAIL PS1
PS2 QTDIR USERNAME LANG LC_ADDRESSLC_CTYPE", env_keep+="LC_COLLATE
LC_IDENTIFICATION LC_MEASUREMENTLC_MESSAGES", env_keep+="LC_MONETARY
LC_NAME LC_NUMERIC LC_PAPERLC_TELEPHONE", env_keep+="LC_TIME LC_ALL
LANGUAGE LINGUAS _XKB_CHARSETXAUTHORITY",
secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User test mayrun the following commands on this host:
(ALL) /usr/sbin/useradd, (ALL) /bin/rm
8、sudo命令的配置文件/etc/sudoers
(1)查看/etc/sudoers文件
ll /etc/sudoers
-r--r-----. 1root root 4046 Feb 2 10:57 /etc/sudoers
cat /etc/sudoers
(2)/etc/sudoers文件的语法
a、一行是一条规则.
b、当一行过长时,可以通过 \ 号断行.
c、#号表示注释
d、!表示禁止
test ALL=(ALL) /usr/bin/passwd,!/usr/bin/passwdroot#禁止test修改root密码
e、*号表示通配符
test ALL=(ALL) /usr/bin/*
(2)配置别名Alias,可以简化配置
配置一些Alias,这样在下面配置权限时,会方便一些,不用写大段大段的配置。Alias主要分成4种Host_Alias(主机列表)、Cmnd_Alias(命令列表)、User_Alias(sudo权限用户列表)、Runas_Alias(用户以什么身份执行[如root、oracle]的列表). 别名命名是包含大写字母、下划线以及数字,但必须以一个大写字母开头。
a、配置Host_Alias:就是主机的列表
格式:Host_Alias Hostlist = hostname1, hostname2, hostname3
示例:Host_Alias Myhosts = 192.168.1.1,192.168.1.2
b、配置Cmnd_Alias:就是允许执行的命令的列表(要写命令的全路径)
格式:Cmnd_Alias Cmdlist = command1, command2, command3
示例:Cmnd_Alias Mycmds = /opt/vtbin/squid_refresh, /sbin/service, /bin/rm
c、配置User_Alias:就是具有sudo权限的用户的列表
格式:User_Alias Userlist = user1, user2, user3
示例:User_Alias Myusers=apache,test
d、配置Runas_Alias:就是用户以什么身份执行(例如root,或者oracle)的列表
格式:Runas_Alias Runaslist = operator1, operator2, operator3
示例:Runas_Alias Myrunas = root, oracle
(3)用户授权的格式(98行开始)
格式:user MACHINE=COMMANDS
示例:root ALL=(ALL) ALL
test ALL=(ALL) /usr/bin/passwd,!/usr/bin/passwdroot
Myusers Myhosts=(Myrunas) Mycmds
%dba Myhosts=(Myrunas) Mycmds
说明:
第1个ALL是主机名,也就是允许登陆的主机。可以直接主机名,可以是别名,ALL表示所有主机
第2个ALL是可选的,非必填,表示用户以什么身份执行,默认为root,实际上ALL也可认为是root
第3个ALL是允许执行的命令的列表(要写命令的全路径,多个命令用,逗号分隔)
如果希望是一个用户组中所有用户进行定义,可以在组名前加上%,对其进行设置
(4)不需要密码验证格式
myusers myhosts=( myrunas) NOPASSWD:mycmds
(5)注意事项
a、不建议用echo、vi对/etc/sudoers进行编辑,如果非要echo、vi编辑,在编辑后一定要用visudo -c检查一下/etc/sudoers文件的语法。
b、visudo 必须在root环境下运行
c、别名最好用大写
d、命令别名下的成员必须是文件或目录的绝对路径
e、超过一行用"\"来换行
f、授权ALL后,在进行!排除时,会让人防不胜防,这种先开后关的策略并不是好的策略。最好是白名单机制,按需授权
g、指定切换的用户(第2个ALL)要用括号()括起来。如果省略括号,则默认为root用户。如果是ALL,则表示能切换到所有用户
h、如果不需要密码直接运行命令的,应在命令别名(第3个ALL)前加上NOPASSWD:参数
i、禁止某类程序或命令执行时,要在命令动作前面加上!号,并放在允许执行命令的后面
j、使用用户组时,应在用户组前加%号。如%groupname