摘要:这为学习Linux系统管理与开发课程中对于用户管理的一些使用和总结。
用户操作基本命令
who: 显示当前实际用户
whoami: 当前使用的用户
users: 同who
w: 显示详细信息
id:显示用户身份
时间相关
date: 显示当前系统时间
time: 显示系统运行时间,系统时间片的分配
cal: 显示当前月份的日历
cal <年份>: 显示一整年的日历
特殊的:1752年的日历和其他的不一样,历法上修订新历会导致九月份不一样。
以下可以显示离1970-01-01 后99999天的日期。
1 | [hongcyu@localhost etc]$ date -d "1970-01-01 99999days" |
目录相关
pwd: 显示当前目录路径
cd <路径> : 更改当前路径
cd :回到初始目录
./ :当前目录
../ :上一个目录(父目录)
ls :显示当前目录下的文件
ls -l :显示文件并包含详细信息
ls | more :以翻页的方式查看目录文件
mv < filename1 > < filename2 > :将文件进行备份
rm < filename >: 删除文件
rm -r :删除目录
cat < filename > :查看文件内容
head/tail < filename > :从头/尾查看文件(每次10行)
用户配置文件
- 用户信息文件 /etc/passwd
- 影子文件 /etc/shadow
- 组信息文件 /etc/group
- 组影子文件 /etc/gshadow
用户管理中安全等级越高,月需要用户分级管理
口令文件
打开 /etc/passwd查看用户基本信息,每一行代表一个用户
· 用户名称
· 用户密码标识
· 用户ID
· 组编号
· 用户说明
· 家目录
· 用户对应的bash
一共分成7个部分,其中:
1 | root : x : 0 : 0 : root : /root: /bin/bash |
tips:
- 只要你的用户ID为0即为超级用户
- 后期创建的用户由于系统保留从1000开始。可以再/etc/login.defs查看。
- /sbin/nologin表示不可以登入
影子文件
分别代表:
· 用户名称
· 加密密码(SHA512)
· 最后修改密码时间(时间戳模式,1970-1-1)
· 两次密码的修改间隔时间(0 表示可以不修改)
· 密码有效期
· 密码到期提醒时间(提前提醒)
· 到期后宽限时间(0:立即失效 ;-1永不失效)
· 账户失效时间
· 保留
组信息文件
· 组名称
· 组密码标识
· GID
· 组中附加用户
组影子文件
用户与组的添加
tips:用户和组的添加需要管理员权限!
添加一个全新的用户
用户添加 useradd < username >
1 | hongcyu@localhost etc]$ su |
只要不报错即为添加成功。
tips:
可以使用管道来强制修改密码,在超级用户下使用:
echo 123456 | passwd < username >
接着到passwd文件中可以看的出来bob这个用户已经添加成功了
到口令文件(shadow)下查看也添加成功了,不过会发现一个问题,bob没有密码!
再看一下组信息文件发现也添加成功了,名称与用户名一致。
组影子文件就不看了。
接着退出管理员用户,尝试用su切换用户发现,bob登录不了,因为没有口令!
1 | [root@localhost etc]# exit |
接着到bob的目录去看一下发现进入不了,原因是现在我是hongcyu这个用户,没有权限访问bob的目录,可以用ls -l
查看权限。
解决这个问题的办法就是给用户设置口令。
passwd 表示修改当前用户的口令
passwd < username > 修改其他用户的口令
1 | [hongcyu@localhost home]$ su |
接着回到hongcyu用户使用su bob
切换用户。这个时候会发现(bob@localhost hongcyu)是由hongcyu切换到了bob用户。
1 | [hongcyu@localhost ~]$ su bob |
这个时候查看bob的目录下会发现啥也没干就存在着文件。
其实是每个用户在创建时会自动生成一些配置文件,而这些文件在每个用户最先配置时都是一样的。其实进入/etc/skel
会发现存在的一样的文件,很好的解释了是在用户创建的最后把skel下的文件复制了过去。所以作为一个管理员,如果你想向新用户发送一个信息,就可以在skel下创建文件,这样每当创建新用户时就会将skel下的文件全部的复制过去。
将新用户添加到已有的目录
useradd -d < route > < username >
首先进入管理员用户,到/home下自己用mkdir
创建一个新的文件夹
接着使用useradd -d /home/tomtom tom
来指定新用户的家目录,会产生一个警告,是因为如果没有刚刚创建的tomtom
文件夹的话,系统会自己创建并复制初始配置文件,但是由于我们是自己先前已经创建的目录,可以看到提示说不从 skel 目录里向其中复制任何文件。如果想有的话可以手动从skel复制过去。
创建新的组
useradd -g < groupname > < username >
需要注意的是,在创建用户时如果未指定组的话会自带创建一个名字和用户名一样的组。
接着我们使用命令去创建用户时会发现提示错误,那么到底是添加成功还是添加不成功呢。
1 | [root@localhost home]# useradd -g mygroup alice |
我们到passwd文件里发现并没有Alice用户的存在,说明了不能指定用户添加入不存在的组。
所以想将新用户指定到固定的组时需要先添加组。
groupadd < groupname >
创建组成功后接着运行之前创建用户的命令即可创建新用户成功。
1 | [root@localhost etc]# groupadd mygroup |
将新用户加入多个组
useradd -G < groupname1 >,< groupname2 >, … < username >
我们执行useradd -G mygroup,bob sonya
后到group中看一下,可以发现bob和mygroup中都有了sonya这个用户。
将用户添加到组
gpasswd -a < username > < groupname >
1 | [root@localhost etc]# gpasswd -a sonya bob |
自定义用户号和组号
useradd -u< number > < username >
我们执行useradd -u8888 testuser
后到passwd下查看可以看到详细信息
用户与组的删除
删除所在组的成员
gpasswd -d < username > < groupname >
1 | [root@localhost etc]# gpasswd -d sonya bob |
删除用户
userdel < username >
虽然删除成功了但是你会发现它的家目录却并没有被删除。然后你会发现文件夹被超级用户接管了。这样的好处是不会因为勿删导致文件无法找回。
tips:若是删除用户时它的组中有其他成员则组并不会被一起删除。
userdel -r < username > 带家目录一起删除
删除组
groupdel < groupname >
运行之后发现mygroup 的组被删除了。
普通用户的分权
最经典的当然是在命令前加上sudo
啦,以超级用户的权限来执行命令。
那么如何修改权限呢,可以在etc/sudoers
下修改。(这个文件不能在vi编辑器下直接编辑,这里提供一个命令visudo
来修改。)
这里可以看到root ALL=(ALL) ALL
是代表着root用户在任何机器任何域可以执行任何命令。
按照如图所示的方法可以将修改口令的权限分配给bob,而后面的/bin/passwd
命令可以去/bin目录或者/sbin下查看~