Linux用户和组管理
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
每个用户账号都拥有一个惟一的用户名和各自的口令。
用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。
实现用户账号的管理,要完成的工作主要有如下几个方面:
- 用户账号的添加、删除与修改
- 用户口令的管理
- 用户组的管理
用户管理
1.用户创建
创建用户用useradd或者adduser命令(在CentOS系统中adduser是useradd的软链接)
命令语法
useradd [options] LOGIN useradd -D useradd -D [options]
命令选项
-u : UID -o : 配合-u 选项,不检查UID的唯一性 -g : GID:指明用户所属基本组,可为组名,也可以GID -c "COMMENT": 用户的注释信息 -d : HOME_DIR: 以指定的路径(不存在)为家目录 -s : SHELL: 指明用户的默认shell程序,可用列表在/etc/shells文件中 -G : GROUP1[,GROUP2,...]:为用户指明附加组,组须事先存在 -N : 不创建私用组做主组,使用users组做主组 -r : 创建系统用户 CentOS 6: ID<500,CentOS 7: ID<1000 -m : 创建家目录,用于系统用户 -M : 不创建家目录,用于非系统用户
-D : 显示或更改默认的 useradd 配置,默认值在/etc/default/useradd文件中
示例
创建nginx用户,其UID为80,家目录为 /var/www/nginx (不创建),shell类型为 /sbin/nologin,备注信息为 Web Services
[root@centos7 ~]# useradd -u 80 -d /var/www/nginx -M -s /sbin/nologin -c "Web Services" nginx
2.查看用户信息
使用id命令查看用户相关信息
命令语法
id [OPTION]... [USER]
命令选项
示例
[root@centos7 ~]# id chen uid=1000(chen) gid=1000(chen) groups=1000(chen)
使用finger命令也能查看用户信息(如未安装请使用 yum install finger -y 安装)
[root@centos7 ~]# finger chen Login: chen Name: Directory: /home/chen Shell: /bin/bash Last login Sat Jul 28 10:54 (CST) on pts/0 No mail. No Plan.
3.切换用户
使用 su 命令可以切换用户或以其他用户身份执行命令
命令语法
su [options] [-] [USER [arg]...]
命令选项
- 或 -l :切换用户
-c ‘COMMAND’ :切换身份执行命令
切换用户的方式:
su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录
su - UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换
root su至其他用户无须密码;非root用户切换时需要密码
示例
[root@centos7 ~]# su chen -c 'pwd' /root [root@centos7 ~]# su - chen -c 'pwd' /home/chen
4.用户属性修改
(1)使用usermod来修改用户的用户信息
命令语法
usermod [options] LOGIN
命令选项
-u UID: 新UID -g GID: 新主组 -G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项 -s SHELL:新的默认SHELL -c 'COMMENT':新的注释信息 -d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项 -l login_name: 新的名字; -L: lock指定用户,在/etc/shadow 密码栏的增加 ! -U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉 -e YYYY-MM-DD: 指明用户账号过期日期 -f INACTIVE: 设定非活动期限
示例
修改centos用户的登录名为redhat,UID为10086,家目录为 /home/reahat 并移动原家目录,注释信息为 'redhat distribution,white house,911,119',附加组为 chen
[root@centos7 ~]# usermod -u 10086 -d /home/reahat -m -l redhat -c 'redhat distribution,white house,911,119' -G chen centos [root@centos7 ~]# id redhat uid=10086(redhat) gid=1002(centos) groups=1002(centos),1000(chen) [root@centos7 ~]# finger redhat Login: redhat Name: redhat distribution Directory: /home/reahat Shell: /bin/bash Office: white house, 911 Home Phone: 119 Never logged in. No mail. No Plan.
(2)使用 chfn 命令能修改用户的注释信息
命令语法
chfn [options] [username]
命令选项
-f <full-name> : 设置全名 -o <office> : 设置办公地址 -p <phone> : 设置办公电话 -h <phone> : 设置家庭电话
示例
不使用选项的 chfn 则是交互式更改用户备注信息
[root@centos7 ~]# chfn redhat Changing finger information for redhat. Name []: Redhat Office []: White House Office Phone []: 911 Home Phone []: 119 Finger information changed.
(3)使用 chsh 可以修改用户的shell
[root@centos7 ~]# chsh -s /bin/sh redhat Changing shell for redhat. Shell changed.
5.用户删除
使用 userdel 命令来删除用户
命令语法
userdel [options] LOGIN
命令选项
-f : 强制删除用户,即使用户当前已登录
-r : 删除用户家目录和邮件池
示例
[root@centos7 ~]# userdel -r redhat
6.批量新建用户
使用 newusers 命令可以批量新建用户
其用法是 newusers FILE ,FILE的格式和 /etc/passwd 格式一样
[root@centos7 ~]# cat user_list ubuntu:x:1200:1200::/home/ubuntu:/bin/bash suse:x:1300:1300::/home/suse:/bin/bash debian:x:1400:1400::/home/debian:/bin/bash centos:x:1500:1500::/home/centos:/bin/bash freebsd:x:1600:1600::/home/freebsd:/bin/bash [root@centos7 ~]# newusers user_list
密码管理
1.用户密码修改
使用 passwd 命令修改用户密码
命令用法
passwd [OPTION...] <accountName>
命令选项
-d : 删除指定用户密码 -l : 锁定指定用户 -u : 解锁指定用户 -e : 强制用户下次登录修改密码 -f : 强制操作 -n mindays: 指定最短使用期限 -x maxdays:最大使用期限 -w warndays:提前多少天开始警告 -i inactivedays:非活动期限 --stdin:从标准输入接收用户密码
示例
[root@centos7 ~]# echo 'redhat' | passwd --stdin chen Changing password for user chen. passwd: all authentication tokens updated successfully.
2.用户密码策略修改
使用 chage 修改用户密码策略
命令语法
chage [options] LOGIN
命令选项
-d LAST_DAY : 最近一次修改密码的时间 -E EXPIRE_DATE : 帐号到期的时间 -I INACTIVE : 停滞时期。如果一个密码已过期这些天,那么此帐号将不可用 -m MIN_DAYS : 密码可更改的最小天数,为零时代表任何时候都可以更改密码 -M MAX_DAYS : 密码保持有效的最大天数 -W WARN_DAYS : 用户密码到期前,提前收到警告信息的天数 -l : 例出当前的设置
示例
[root@centos7 ~]# chage -m 3 -M 42 -I 5 chen [root@centos7 ~]# chage -l chen Last password change : Jul 28, 2018 Password expires : Sep 08, 2018 Password inactive : Sep 13, 2018 Account expires : never Minimum number of days between password change : 3 Maximum number of days between password change : 42 Number of days of warning before password expires : 7
3.批量修改用户密码
使用 chpasswd 命令可以批量修改用户密码
其用法是 chpasswd < FILE,FILE的格式是 usename:password
[root@centos7 ~]# cat passwd_list ubuntu:ubuntu suse:suse debian:debian centos:centos freebsd:freebsd [root@centos7 ~]# chpasswd < passwd_list
组管理
1.组创建
使用 groupadd 命令创建组
命令语法
groupadd [options] GROUP
命令选项
-g GID: 指明GID号,[GID_MIN, GID_MAX] -r : 创建系统组 。CentOS 6: ID<500,CentOS 7: ID<1000 -K KEY=VALUE :不使用 /etc/login.defs 中的默认值
示例
[root@centos7 ~]# groupadd -r -g 306 mysql
2.组属性修改
使用 groupmod 命令来修改组属性
命令语法
groupmod [options] GROUP
命令选项
-n group_name: 新名字
-g GID: 新的GID
示例
[root@centos7 ~]# groupmod -g 1008 -n test1 test
3.组密码修改
使用 gpasswd 修改组密码
命令用法
gpasswd [option] GROUP
命令选项
-a : 添加用户到组 -d : 从组删除用户 -A : 指定管理员 -M : 指定组成员 -r : 删除密码 -R : 限制用户登入组,只有组中的成员才可以用newgrp加入该组
示例
为 test1 设置组密码
[root@centos7 ~]# gpasswd test1 Changing the password for group test1 New Password: Re-enter new password:
将 chen 设为 test1 组的管理员
[root@centos7 ~]# gpasswd -A chen test1
以 chen 的身份把 redhat 用户加入 test1 组
[root@centos7 ~]# su - chen -c 'gpasswd -a redhat test1' Adding user redhat to group test1
4.切换基本组
使用 newgrp 命令临时切换基本组,如果用户本不属于此组,则需要组密码
[chen@centos7 ~]$ id chen uid=1000(chen) gid=1000(chen) groups=1000(chen) [chen@centos7 ~]$ touch /tmp/f1 [chen@centos7 ~]$ ls -l /tmp/f1 -rw-rw-r-- 1 chen chen 0 Jul 28 15:30 /tmp/f1 [chen@centos7 ~]$ newgrp test1 Password: [chen@centos7 ~]$ touch /tmp/f2 [chen@centos7 ~]$ ls -l /tmp/f2 -rw-r--r-- 1 chen test1 0 Jul 28 15:31 /tmp/f2
5.更改和查看组成员
使用 groupmems 命令更改和查看组成员
命令语法
groupmems [options] [action]
命令选项
-g GroupName: 更改为指定组
动作
-a: 指定用户加入组 -d: 从组中删除用户 -p: 从组中清除所有成员 -l : 显示组成员列表
示例
[root@centos7 ~]# groupmems -g test1 -a chen [root@centos7 ~]# groupmems -g test1 -l redhat chen
使用 groups 命令可以查看查看用户所属组列表
[root@centos7 ~]# groups chen chen : chen test1
6.组删除
使用 groupdel 删除组 ,其用法是 groupdel GROUP
[root@centos7 ~]# groupdel test1
注意 有用户将其作为基本组时无法删除
用户和组的相关配置文件
/etc/passwd:用户及其属性信息(名称、UID、基本组ID等等),其格式如下
用户名:密码占位符:UID:GID:用户的注释信息:主目录:默认shell
/etc/group:组及其属性信息,其格式如下
组名:组密码占位符:GID:以当前组为附加组的用户列表(分隔符为逗号)
/etc/shadow:用户密码及其相关属性,其格式如下
用户名:加密了的密码:最近一次更改密码的日期:密码的最小使用期限:最大密码使用期限:密码警告时间段:密码禁用期:账户过期日期:保留字段
/etc/gshadow:组密码及其相关属性,其格式如下
组名:加密了的组密码:组管理者:组内用户列表
可以通过直接修改上述4个文件来修改用户和组的属性
使用 vipw 命令可以编辑/ etc/passwd 文件, vigr 命令可以编辑 /etc/group 文件
使用 pwck 命令来验证系统认证文件 /etc/passwd 和 /etc/shadow 的内容和格式的完整性
使用 grpck 命令来验证系统认证文件 /etc/group 和 /etc/gshadow 的内容和格式的完整性
除了文本查看工具外,还可以使用 getent 命令来查看上面4个配置文件,其用法是
getent passwd|shadow|group|gshadow [NAME]
[root@centos7 ~]# getent passwd ubuntu ubuntu:x:1200:1200::/home/ubuntu:/bin/bash [root@centos7 ~]# getent group suse suse:x:1300:
/etc/default/useradd : 新建用户的默认配置,可以用 useradd -D 显示或更改
/etc/login.defs : 新建用户和组的默认设置
/etc/skel/ : 用户家目录配置的模板文件