Linux用户管理

Linux用户和组的操作(一) 用户文件/etc/passwd

Linux将用户账号的相关信息保存在/etc/passwd这个文件中,每一行表示一个用户账号信息。

[root@localhost ~]# head -5 /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

[root@localhost ~]# tail -5 /etc/passwd

ricci:x:102:105:ricci daemon user:/var/lib/ricci:/sbin/nologin

stone:x:500:500::/home/stone:/bin/bash

teamadmin:x:501:501::/home/teamadmin:/bin/bash

user1:x:502:502::/home/user1:/bin/bash

user2:x:503:503::/home/user2:/bin/bash

/etc/passwd中每行的语法格式如下表:

 

用户名

密码

UID

GID

备注信息

主目录

登陆shell

1

root

x

0

0

root

/root

/bin/bash

2

stone

x

500

500

 

/home/stone

/bin/bash

每个字段的意义如下表:

字段

内容

含义

1

用户名

表示登陆用户的用户名

2

密码

表示该用户的登陆密码,在/etc/passwd登陆密码都为x,实际密码加密保存在/etc/shadow

3

UID

用户IDLinux为每个用户分配一个整数ID,系统管理员rootID0,1~499为系统ID500~65535为用户ID

4

GID

IDLinux为每一组分配一个整数ID

5

备注信息

一般无需设置

6

主目录

用户登陆后的默认目录

7

登陆shell

用户登陆时的默认shell

 

Linux用户和组的操作(二) 用户密码文件/etc/shadow

Linux将用户账号密码的相关信息保存在/etc/shadow这个文件中,每一行表示一个用户账号密码信息。

[root@localhost ~]# head -5 /etc/shadow

root:$1$.tBwTK5h$.RU66xJLues.MnI.dfqKg1:15744:0:99999:7:::

bin:*:15744:0:99999:7:::

daemon:*:15744:0:99999:7:::

adm:*:15744:0:99999:7:::

lp:*:15744:0:99999:7:::

[root@localhost ~]# tail -5 /etc/shadow

stone:$1$FEeOrYIa$F2FPF9mC1C8O4dN.k5hUk1:15770:0:99999:7:::

teamadmin:!!:15757:0:99999:7:::

user1::15758:0:99999:7:::

user2:!:15758:0:99999:7:::

testuser:!$1$sR1z3/al$97RtA.Hvmdiiv8GK2wyqt.:15772:5:180:7:10:16069:

每个字段的意义如下表:

字段

内容

含义

1

用户名

表示登陆用户的用户名

2

密码

表示加密的密码

3

密码修改日期

表示密码修改日期与1970-01-01之间的天数

4

密码冻结天数

表示密码修改后再修改需要等待的天数

5

密码有效天数

表示密码修改后可以使用的天数

6

密码警告天数

表示密码在有效天数到来之前发用户发出警告的天数

7

密码宽限天数

表示密码在有效天数到来之后可以继续使用的天数

8

账号失效日期

表示账号失效日期与1970-01-01之间的天数

 

 

Linux用户和组的操作(三) 用户组文件/etc/group

Linux将用户组的相关信息保存在/etc/group这个文件中,每一行表示一个用户组信息。

[root@localhost ~]# head -5 /etc/group

root:x:0:root

bin:x:1:root,bin,daemon

daemon:x:2:root,bin,daemon

sys:x:3:root,bin,adm

adm:x:4:root,adm,daemon

[root@localhost ~]# tail -5 /etc/group

ricci:x:105:

stone:x:500:

teamadmin:x:501:

user1:x:502:

user2:x:503:

/etc/group中每行的语法格式如下表:

 

用户组名称

组密码

GID

组内成员

1

root

x

0

root

2

stone

x

500

 

每个字段的意义如下表:

字段

内容

含义

1

用户组名称

用户组名称

2

组密码

一般无需设置,在/etc/group中登陆密码都为x,实际密码加密保存在/etc/gshadow

3

GID

IDLinux为每一组分配一个整数ID,对应/etc/passwd中的GID

4

组内成员

组成员列表,使用逗号隔开

 

Linux用户和组的操作(四) 显示用户UIDGID id

Linux通过UIDGID来识别用户和组,使用id命令来查看用户的UIDGID以及用户所属的组。

[root@localhost ~]# id root

uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

id命令的数据来自于/etc/passwd/etc/group,在/etc/group中可以看到每个组里面包含的用户,而id命令则可以显示出该用户所属的组。

 

Linux用户和组的操作(五) 增加用户 useradd

使用useradd命令增加用户。useradd命令的参数为用户名,为/etc/passwd中第1字段内容。

useradd命令行选项:

选项

含义

-u UID

指定UID/etc/passwd中第3字段内容

-g GID

指定GID/etc/passwd中第4字段内容

-c comment

添加备注,/etc/passwd中第5字段内容

-d homedir

设置用户主目录,/etc/passwd中第6字段内容

-s loginshell

设置登录shell/etc/passwd中第7字段内容

-G group1group2

设置次要组,修改/etc/group中相关组的第4字段

最简单的方式就是采用系统默认设置,不使用命令选项直接增加用户。

[root@localhost ~]# useradd testuser

[root@localhost ~]# grep 'testuser' /etc/passwd

testuser:x:504:504::/home/testuser:/bin/bash

 

Linux用户和组的操作(六) 修改用户 usermod

使用usermod命令修改用户账号相关属性。

usermod命令行选项:

选项

含义

-u UID

修改UID/etc/passwd中第3字段内容

-g GID

修改GID/etc/passwd中第4字段内容

-c comment

修改备注,/etc/passwd中第5字段内容

-d homedir

修改用户主目录,/etc/passwd中第6字段内容

-s loginshell

修改登录shell/etc/passwd中第7字段内容

-G group1group2

修改次要组,修改/etc/group中相关组的第4字段

-L username

锁住username的密码,在/etc/shadow2字段前增加!

-U username

解锁username的密码,去掉/etc/shadow2字段前的!

最常使用的是-G选项。

[root@localhost ~]# id testuser

uid=504(testuser) gid=504(testuser) groups=504(testuser)

[root@localhost ~]# usermod -G testgroup testuser

[root@localhost ~]# id testuser

uid=504(testuser) gid=504(testuser) groups=504(testuser),505(testgroup)

#将用户testuser加入到testgroup

 

[root@localhost ~]# tail -1 /etc/shadow

testuser:$1$sR1z3/al$97RtA.Hvmdiiv8GK2wyqt.:15772:5:180:7:10:16069:

 [root@localhost ~]# usermod -L testuser

[root@localhost ~]# tail -1 /etc/shadow

testuser:!$1$sR1z3/al$97RtA.Hvmdiiv8GK2wyqt.:15772:5:180:7:10:16069:

#使用-L选项使密码失效,密码前面增加一个!。

[root@localhost ~]# usermod -U testuser

[root@localhost ~]# tail -1 /etc/shadow

testuser:$1$sR1z3/al$97RtA.Hvmdiiv8GK2wyqt.:15772:5:180:7:10:16069:

#使用-U选项解锁密码,去掉了密码前面的!。 

 

Linux用户和组的操作(七) 删除用户 userdel

使用userdel命令删除用户。

userdel命令行选项:

选项

含义

-r

删除用户的同时也删除用户的主文件夹

[root@localhost ~]# ll -d /home/testuser/

drwx------ 3 testuser testuser 4096 Mar  8 16:53 /home/testuser/

[root@localhost ~]# userdel -r testuser

[root@localhost ~]# ll -d /home/testuser/

ls: /home/testuser/: No such file or directory

#主文件夹也一起删除了

 

Linux用户和组的操作(八) 修改用户密码 passwd

使用passwdpassword简写)命令修改用户密码。

passwd命令行选项:

选项

含义

-l

锁住用户的密码,在/etc/shadow2字段前增加!

-u

解锁用户的密码,去掉/etc/shadow2字段前的!

-S

列出用户密码的相关信息

-n

修改密码冻结天数,/etc/shadow中第四字段

-x

修改密码有效天数,/etc/shadow中第五字段

-w

修改密码警告天数,/etc/shadow中第六字段

-i

修改密码宽限天数,/etc/shadow中第七字段,值为宽限日期与1970-01-01之间的天数

直接修改用户密码

[root@localhost ~]# passwd

Changing password for user root.

New UNIX password:

BAD PASSWORD: it is too simplistic/systematic

Retype new UNIX password:

passwd: all authentication tokens updated successfully.

#root用户使用passwd可以直接为root修改密码,不需要输入原始密码。

[root@localhost ~]# passwd stone

Changing password for user stone.

New UNIX password:

BAD PASSWORD: it is too simplistic/systematic

Retype new UNIX password:

passwd: all authentication tokens updated successfully.

#root用户使用passwd可以直接为一般用户修改密码,不需要输入原始密码。

[stone@localhost ~]$ passwd

Changing password for user stone.

Changing password for stone

(current) UNIX password:

New UNIX password:

Retype new UNIX password:

passwd: all authentication tokens updated successfully.

#一般用户使用passwd修改密码,需要输入原始密码。

[root@localhost ~]# passwd -S stone

stone PS 2013-03-11 0 99999 7 -1 (Password set, MD5 crypt.)

使用-S参数可列出用户密码的相关信息,各字段含义如下:

字段

示例

含义

1

stone

表示用户名

2

PS

表示用户密码状态,有三种状态:

PS = Passworded,表示已设置密码

LK = Locked ,表示已锁住密码

NP = No Password,表示无密码

3

2013-03-11

密码修改日期,/etc/shadow中第三字段

4

0

密码冻结天数,/etc/shadow中第四字段

5

99999

密码有效天数,/etc/shadow中第五字段

6

7

密码警告天数,/etc/shadow中第六字段

7

-1

密码宽限天数,/etc/shadow中第七字段,为-1表示不会失效

[root@localhost ~]# passwd -l stone

Locking password for user stone.

passwd: Success

#锁住密码

[root@localhost ~]# passwd -S stone

stone LK 2013-03-11 0 180 7 16000 (Password locked.)

 [root@localhost ~]# passwd -u stone

Unlocking password for user stone.

passwd: Success.

#解锁密码

[root@localhost ~]# passwd -S stone

stone PS 2013-03-11 0 180 7 16000 (Password set, MD5 crypt.)

[root@localhost ~]# passwd -n 5 -x 90 -w 7 -i 15950 stone

Adjusting aging data for user stone.

passwd: Success

#修改密码时间参数

[root@localhost ~]# passwd -S stone

stone PS 2013-03-11 5 90 7 15950 (Password set, MD5 crypt.)

 

Linux用户和组的操作(九) 修改用户账号密码时间参数 chage

使用chagechange age)命令也可以修改用户账号密码的时间参数,而且可以直观显示。

chage命令行选项:

选项

含义

-l

列出用户账号密码的详细时间参数

-d

修改密码修改日期,/etc/shadow中第三字段,为0表示第一次登陆强制修改密码

-m

修改密码冻结天数,/etc/shadow中第四字段

-M

修改密码有效天数,/etc/shadow中第五字段

-W

修改密码警告天数,/etc/shadow中第六字段

-I

修改密码宽限天数,/etc/shadow中第七字段,为-1表示不会失效

-E

修改账号失效日期,/etc/shadow中第八字段

[root@localhost ~]# chage -d 2013-03-01 -m 5 -M 180 -W 7 -I 10 -E 2013-12-30 stone

#修改stone的账号密码时间参数

[root@localhost ~]# chage -l stone

Last password change                                    : Mar 01, 2013

Password expires                                        : Aug 28, 2013

Password inactive                                       : Sep 07, 2013

Account expires                                         : Dec 30, 2013

Minimum number of days between password change          : 5

Maximum number of days between password change          : 180

Number of days of warning before password expires       : 7

#列出stone的账号时间参数

 

[root@localhost ~]# chage stone

Changing the aging information for stone

Enter the new value, or press ENTER for the default

 

        Minimum Password Age [5]: 6

        Maximum Password Age [180]: 150

        Last Password Change (YYYY-MM-DD) [2013-03-01]: 2013-3-10

        Password Expiration Warning [7]: 5

        Password Inactive [10]: 7

        Account Expiration Date (YYYY-MM-DD) [2013-12-30]: 2013-10-1

#不使用命令选项直接加用户名,可交互修改账户时间参数

[root@localhost ~]# chage -l stone

Last password change                                    : Mar 10, 2013

Password expires                                        : Aug 07, 2013

Password inactive                                       : Aug 14, 2013

Account expires                                         : Oct 01, 2013

Minimum number of days between password change          : 6

Maximum number of days between password change          : 150

Number of days of warning before password expires       : 5

 

[root@localhost ~]# useradd agetest

[root@localhost ~]# echo "agetest" | passwd --stdin agetest

Changing password for user agetest.

passwd: all authentication tokens updated successfully.

[root@localhost ~]# chage -d 0 agetest

#新建用户agetest,并将密码设置为agetest,设置密码修改日期为0

[root@localhost ~]# su – stone

#切换用户

[stone@localhost ~]$ su - agetest

Password:

You are required to change your password immediately (root enforced)

Changing password for agetest

(current) UNIX password:

New UNIX password:

Retype new UNIX password:

#第一次登陆提示用户修改密码,参考了《鸟哥私房菜》。 

 

Linux用户和组的操作(十) 增加用户组 groupadd

使用groupadd命令增加用户。groupadd命令的参数为用户组名,为/etc/group中第1字段内容。

groupadd命令行选项:

选项

含义

-r

新建系统用户组

-g GID

指定GID/etc/group中第3字段内容

最简单的方式就是采用系统默认设置,不使用命令选项直接增加用户组。

[root@localhost ~]# groupadd stonetest

[root@localhost ~]# tail -1 /etc/group

stonetest:x:517:

#新建系统用户组

[root@localhost ~]# groupadd -r httpd

[root@localhost ~]# tail -1 /etc/group

httpd:x:106:

#注意,系统用户组的GID小于500

 

Linux用户和组的操作(十一) 修改用户组 groupmod

使用groupmod命令修改用户组相关属性。

groupmod命令行选项:

选项

含义

-n 新组名

修改组名,/etc/group中第1字段内容

-g GID

修改GID/etc/group中第3字段内容

[root@localhost ~]# groupmod -n stonetest1 stonetest

[root@localhost ~]# tail -1 /etc/group

stonetest1:x:517:

#GID一般不要去随便改动。

 

Linux用户和组的操作(十二) 删除用户组 groupdel

使用groupdel命令删除用户组。

[root@localhost ~]# groupdel httpd

[root@localhost ~]# groupdel stonetest1

直接删除用户组httpdstonetest1

[root@localhost ~]# groupdel testuser

groupdel: cannot remove user's primary group.

#为什么testuser这个用户组不能删除呢?留到下篇讲。

请使用浏览器的分享功能分享到微信等