Linux运维学习笔记之八:用户管理

第十五章 用户管理

一、管理用户命令汇总
1useradd:添加用户
2userdel:删除用户及相关用户配置或文件
3passwd:设置用户密码
4chage:修改用户密码有效期限
5usermod:修改用户登录名、家目录等
6id:查看用户uidgid及所归属的用户组
7su:用户切换工具
8sudo:通过另一个用户来执行命令
9visudo:配置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
15finger:查看用户信息
16、sudoedit:类似于sudo
二、管理用户组命令汇总
1groupadd:添加用户组
2、gpasswd:为用户组设置密码
3groups:显示用户所属的用户组
4newgrp:更改用户所属的有效用户组
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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值