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 |
用户ID,Linux为每个用户分配一个整数ID,系统管理员root的ID为0,1~499为系统ID,500~65535为用户ID |
|
4 |
GID |
组ID,Linux为每一组分配一个整数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 |
组ID,Linux为每一组分配一个整数ID,对应/etc/passwd中的GID |
|
4 |
组内成员 |
组成员列表,使用逗号隔开 |
Linux用户和组的操作(四) 显示用户UID和GID id
Linux通过UID和GID来识别用户和组,使用id命令来查看用户的UID和GID以及用户所属的组。
[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 group1,group2 |
设置次要组,修改/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 group1,group2 |
修改次要组,修改/etc/group中相关组的第4字段 |
|
-L username |
锁住username的密码,在/etc/shadow第2字段前增加! |
|
-U username |
解锁username的密码,去掉/etc/shadow第2字段前的! |
最常使用的是-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
使用passwd(password简写)命令修改用户密码。
passwd命令行选项:
|
选项 |
含义 |
|
-l |
锁住用户的密码,在/etc/shadow第2字段前增加! |
|
-u |
解锁用户的密码,去掉/etc/shadow第2字段前的! |
|
-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
使用chage(change 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
直接删除用户组httpd和stonetest1。
[root@localhost ~]# groupdel testuser
groupdel: cannot remove user's primary group.
#为什么testuser这个用户组不能删除呢?留到下篇讲。