目录
查看登录用户信息:who
命令名称:who
命令所在路径:/usr/bin/who
执行权限:所有用户
语法:who
功能描述:查看登录用户信息
范例: $ who
查看登录用户详细信息:w
命令名称:w
命令所在路径:/usr/bin/w
执行权限:所有用户
语法:w
功能描述:查看登录用户详细信息
范例: $ w
说明:第一行是本台Linux服务器的运行信息,up表示 连续运行了多久没关机了。也可以直接使用 uptime 命令查看本台服务器的运行信息:
load average 是一个负载均衡指数,后面的三个数值分别记录了过去的1分钟、5分钟、15分钟 系统的负载情况
IDLE 表示某个用户 登陆进来后,没有任何操作的空闲时间;
PCPU 表示某个用户登陆进来后,执行某些操作占用CPU的执行时间,后面的WHAT 就是 当前执行了什么操作
JCPU 是累计占用的时间
用户管理简介
越是对服务器安全性要求高的服务器,越需要建立合理的用户权限等级制度和服务器操作规范。在Linux中主要是通过用户配置文件来查看和修改用户信息。
/etc/passwd
使用vim /etc/passwd 打开这个文件的内容截图如下:
每一行都是用冒号分割成7个字段。
第1字段:用户名称
第2字段:密码标志
第3字段:UID(用户ID)
0:超级用户 (如果要将某个普通用户变成超级用户,只需要将第三个字段改成0即可)
1-499:系统用户(伪用户) (不能删,若删则系统崩溃)
500-65535:普通用户
第4字段:GID(用户初始组ID)
第5字段:用户说明
第6字段:家目录
普通用户:/home/用户名/
超级用户:/root/
第7字段:登录之后的Shell
初始组和附加组
初始组:就是指用户一登录就立刻拥有这个用户组的相关权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组。
附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个。
Shell是什么
Shell就是Linux的命令解释器。在/etc/passwd当中,除了标准Shell是/bin/bash之外,还可以写如/sbin/nologin,/usr/bin/passwd等。
影子文件/etc/shadow
先看看这个文件的权限:000,使用vim /etc/shadow 打开这个文件的内容截图如下:
共有9个字段:
第1字段:用户名
第2字段:加密密码
* 加密算法升级为SHA512散列加密算法;
* 如果密码位是“!!”或“*”代表没有密码,不能登录
第3字段:密码最后一次修改日期,使用1970年1月1日作为标准时间,每过一天时间戳加1
第4字段:两次密码的修改间隔时间(和第3字段相比)
第5字段:密码有效期(和第3字段相比)
第6字段:密码修改到期前的警告天数(和第5字段相比)
第7字段:密码过期后的宽限天数(和第5字段相比)
0:代表密码过期后立即失效
-1:则代表密码永远不会失效。
第8字段:账号失效时间,要用时间戳表示 (如果设置了此项,则忽略第5、6、7个字段)
第9字段:保留
时间戳换算
把时间戳换算为日期 date -d "1970-01-01 16066 days"
把日期换算为时间戳 echo $(($(date --date="2013/12/27" +%s)/86400+1))
备注:PHP中的时间戳按照秒计算,Linux按照天计算。
组信息文件 /etc/group
第一字段:组名
第二字段:组密码标志
第三字段:GID
第四字段:组中附加用户
组密码文件 /etc/gshadow
第一字段:组名
第二字段:组密码
第三字段:组管理员用户名
第四字段:组中附加用户
【用户管理相关文件】
用户的家目录:
普通用户:/home/用户名/,所有者和所属组都是此用户,权限是700
超级用户:/root/,所有者和所属组都是root用户,权限是550
说明:如果将普通用户变成了超级用户(root),虽然这个普通用户拥有了超级用户的权限,但是他的家目录不会改变。
怎么改? 打开 /etc/passwd ,找到renxing 这个用户,修改其 UID :
然后,用 renxing 用户 登录进去:
用户的邮箱 /var/spool/mail/用户名/
用户模板目录 /etc/skel/
进入用户 renxing 的家目录下,查看后发现没有文件,但是ls -a 会看到一些隐藏文件:
这些文件是创建这个用户的时候默认添加进去的。
在 /etc/skel 下如果手动创建一个模板文件warning.txt ,并写入一些文字:
然后,再创建一个用户 user1,并进入到这个用户的家目录下:
【用户管理命令-useradd】
添加新用户:useradd
命令名称:useradd
命令所在路径:/usr/sbin/useradd
执行权限:root
语法:useradd 用户名
功能描述:添加新用户
范例: $ useradd yangmi
useradd 添加用户
案例:添加一个用户 rxx : useradd rxx
接下来看看,创建了一个用户,实际上添加或更改了哪些文件:
[root@localhost ~]# grep rxx /etc/passwd 用户信息
[root@localhost ~]# grep rxx /etc/shadow 用户密码内容
[root@localhost ~]# grep rxx /etc/group 用户组信息
[root@localhost ~]# grep rxx /etc/gshadow 用户组密码内容
[root@localhost ~]# ll -d /home/rxx 查看用户rxx的家目录
[root@localhost ~]# ll /var/spool/mail/rxx 查看用户rxx 的邮箱目录
指定选项添加用户
[root@localhost ~]#useradd [选项] 用户名
选项:
-u UID: 手工指定用户的UID号
-d 家目录: 手工指定用户的家目录
-c 用户说明: 手工指定用户的说明
-g 组名: 手工指定用户的初始组(一般不要改变这个,可以改变下面的 -G )
-G 组名: 指定用户的附加组
-s shell: 手工指定用户的登录shell。默认是/bin/bash
案例演示:
接下来,可以按照上面的方法查看更改了哪些地方:
用户默认值文件
◇ 第一个文件 /etc/default/useradd
GROUP=100 #用户默认组
HOME=/home #用户家目录
INACTIVE=-1 #密码过期宽限天数(shadow文件的第7个参数)
EXPIRE= #密码失效时间(shadow文件的第8个参数)
SHELL=/bin/bash #默认shell
SKEL=/etc/skel #模板目录
CREATE_MAIL_SPOOL=yes #是否建立邮箱
◇ 第二个文件 /etc/login.defs
PASS_MAX_DAYS 99999 #密码有效期(shadow文件的第5个参数)
PASS_MIN_DAYS 0 #密码修改间隔(shadow文件的第4个参数)
PASS_MIN_LEN 5 #密码最小5位(PAM)
PASS_WARN_AGE 7 #密码到期警告(shadow文件的第6个参数)
UID_MIN 500 #最小和最大UID范围
GID_MAX 60000
ENCRYPT_METHOD SHA512 #加密模式
【用户管理命令-passwd】
◆ 设置用户密码:passwd
命令名称:passwd
命令所在路径:/usr/bin/passwd
执行权限:所有用户
语法:passwd 用户名
功能描述:设置用户密码
范例: $ passwd yangmi
说明:root可以更改任何用户的密码,并且密码可以是比较简单的。但是普通用户只能更改自己的密码,并且密码要求必须复杂。
如果直接使用 passwd ,则表示更改当前登录的用户的密码。
◇ 修改密码
说明:root 用户可以修改任何用户的密码(包括root用户自己),而且可以不用符合密码规范原则。
如下案例,使用root 修改 用户user1 的密码为 123456
普通用户只能修改自己的密码,格式为:直接 passwd 即可,而且需要符合密码规范原则。
如下案例,使用普通用户 rxx 登录,然后修改自己的密码(需要先提供当前密码)。
◇ passwd命令格式
[root@localhost ~]#passwd [选项] 用户名
选项:
-S 查询用户密码的密码状态。仅root用户可用。
-l 暂时锁定用户。仅root用户可用
-u 解锁用户。仅root用户可用
--stdin 可以通过管道符输出的数据作为用户的密码。
① 查看密码状态[仅root] passwd -S rxx
用户名|密码设定时间(2014-11-15)|密码修改间隔时间(0)|密码有效期时间戳(99999)|警告时间(7)|密码不失效(-1)
还记得 /etc/shadow 文件的信息吗?
② 锁定用户[仅root] passwd -l rxx
此时用户 rxx 就不能登录了。
③ 解锁用户[仅root] passwd -u rxx
此时用户 rxx 就又可以登录了。
④ 使用字符串作为用户的密码(在Shell脚本中会用到,以后详解)
echo "123" | passwd --stdin rxx
【用户管理命令-usermod和chage】
◆ 修改用户信息usermod
[root@localhost ~]# usermod [选项] 用户名
选项:
-u UID: 修改用户的UID号
-c 用户说明: 修改用户的说明信息
-G 组名: 修改用户的附加组
-L: 临时锁定用户(Lock)
-U: 解锁用户锁定(Unlock)
说明:其实这里跟添加用户时的那些参数都类似,可以参考。
usermod -c "test user" lamp (#修改用户的说明)
usermod -G root lamp (#把lamp用户加入root组)
usermod -L lamp (#锁定用户 Lock)
usermod -U lamp (#解锁用户)
案例 ① :
先创建一个用户 lamp,然后查看他的信息:
下面执行的语句代表:修改用户lamp 的 说明、附加组、用户uid
然后再查看刚才的用户的信息:
同时查看group文件,会看到 用户lamp 已经被放到 root 用户组里了:
案例 ② :锁定用户( 与之前的passwd -l [用户名] 一样 )
先查看 lamp 的 shadow 信息,看到结果显示密码正常:
现在来使用 usermod -L lamp 命令 锁定该用户,然后再查看 shadow:
会发现密码信息栏最前面多了个 感叹号 ( ! ) ,这个用户就不能正常登录了。
解锁用户:
usermod -U lamp 同理。很简单,不再演示。
◆ 修改用户密码状态chage
[root@localhost ~]# chage [选项] 用户名
选项:-l: 列出用户的详细密码状态
上面列出的其实就是 /etc/shadow 文件里面的对应用户的那几个字段。下面要修改的,其实也可以直接在 shadow 文件中进行修改,那样可能更加直观。
-d 日期: 修改密码最后一次更改日期(shadow文件的第3个字段)
-m 天数: 两次密码修改间隔(shadow文件的第4个字段)
-M 天数: 密码有效期(shadow文件的第5个字段)
-W 天数: 密码过期前警告天数(shadow文件的第6个字段)
-I 天数: 密码过后宽限天数(shadow文件的第7个字段)
-E 日期: 账号失效时间(shadow文件的第8个字段)
其实上面这些都不需要记住,需要的时候直接去shadow文件修改对应的字段即可。下面这个比较常用。
[root@localhost ~]# chage -d 0 lamp
说明:这个命令其实是把密码修改日期归0了(shadow第3个字段),这样用户一登录就要修改密码。
接下来,换做lamp登录,就会发现:
lamp修改过密码之后,再使用root 登进去查看 shadow 文件:
【用户管理命令-userdel和su】
◆ 删除用户userdel
[root@localhost ~]# userdel [-r] 用户名
选项:-r 删除用户的同时删除用户家目录(一般都会加上 -r)
上面可以看出,删除这个用户之后,这个用户的相关信息都没有了。
◇ 手工删除用户
[root@localhost ~]# vi /etc/passwd
[root@localhost ~]# vi /etc/shadow
[root@localhost ~]# vi /etc/group
[root@localhost ~]# vi /etc/gshadow
[root@localhost ~]# rm -rf /var/spool/mail/lamp[用户名]
[root@localhost ~]# rm -rf /home/lamp[用户名]
说明:一般情况下,不会这样进行手工删除。其实不管是添加用户,还是修改、删除用户,都是操作的这几个文件。
◇ 查看用户ID
[root@localhost ~]# id 用户名
重新创建一个用户 lamp,然后演示:
这里我们可以手动修改该用户的附加组,然后再查看:
◆ 切换用户身份su
[root@localhost ~]# su [选项] 用户名
选项:
- 选项只使用“-”代表连带用户的环境变量一起切换
-c 命令 仅执行一次命令,而不切换用户身份
先说说平时最常用的 su:
先使用lamp登录,然后使用 su root 切换到root
这里已经切换到root用户了,但是使用env 查看当前用户的环境变量:
会发现,其实当前环境下很多信息都还是之前的lamp 用户的。
那么,如果需要切换用户的时候同时切换用户的环境变量,就要使用 su - [用户名]
案例:还是按照之前,先从lamp用户开始登录,然后切换到root,使用 su - root
再使用 env 查看环境变量,就没问题了。
扩展说明:root切换为普通用户不需要输入密码;普通用户切换为root 或者 普通用户切换为其他普通用户 需要输入密码。
◇ 仅执行一次命令,而不切换用户身份:
[lamp@localhost ~]$ su - root -c "useradd user3" (#不切换成root,但是执行useradd命令添加user3用户 )
什么意思呢? 就是说,我现在是lamp用户在登录,但是我需要创建一个用户(注意:创建用户 useradd 只有 root 可以执行),
但是我又不想切换到root。这个时候就使用这样的命令。在以root的角色办完该办的事之后,就又回到了lamp用户。
那么,怎么知道刚才的 用户user3 是否添加成功呢?... 查看 /etc/passwd 文件。
【用户组管理命令】
◆ 添加用户组
groupadd [选项] 用户组名
选项: -g [GID] 指定组ID (意义不大,一般不需要指定)
◆ 修改用户组
groupmod [选项] 用户组名
选项:
-g [GID]: 修改组ID (一般不常用)
-n 新组名: 修改组名
案例:groupmod -n group1 tg (将组 tg 改名为 group1)
说明:一般情况下不建议修改组名,一般都是删除这个组,然后重新创建。
◆ 删除用户组
groupdel 用户组名
◇ 如果一个组中有用户,那么该是什么情况。
案例分析:新建一个用户组叫testgp,然后再新建一个用户 testuser并将其 初始组(-g) 赋给testgp,再创建一个新用户testuser1并将其 附加组(-G) 赋给testgp.
那么其实,用户testuser 的初始组就是 testgp;而testuser1用户的初始组是testuser1,附加组是 testgp.
打开 /etc/group 拉到最下面:
这时,删除这个用户组 testgp:
报错意思是,不能移除用户“testuser”的主用户组(即初始组)。
那么,现在来删除这个用户 testuser,再来尝试删除这个用户组:
结果显示,已经删除了这个组。虽然这个组还是用户 testuser1的附加组。
因此总结:要删除一个用户组,要保证这个用户组内没有初始用户存在,附加用户在不在无所谓。
◆ 将用户添加入用户组或从用户组中删除
gpasswd [选项] 用户组名
选项:
-a 用户名: 把用户加入组
-d 用户名: 把用户从组中删除
说明①:useradd -g groupname username 是添加用户的时候同时将这个用户加入到指定的用户组,操作的最终对象是用户;而gpasswd -a username groupname 是将一个已经存在的用户加入到指定的用户组中,操作的最终对象是用户组。注意区分!
说明②:这里所说的添加到用户组和从用户组移除,都是附加组。
◇ 案例演示:先查看 /etc/group 文件中 root组的情况:
接下来,再创建三个用户rx1、rx2、rx3,并且加入到root用户组中。
再来查看group文件中 root 组的情况:
其实,也可以直接打开 /etc/group 文件,在对应的用户组后面添加上指定的用户,也可以实现。
◇ 案例演示:将用户rx1从root组中移除:
【2014年11月16日】