Linux 用户

用户

假设你已经安装好了虚拟机,并且在上面装上了 ubuntu server 18.04 ,那么开机之后,我们面临的第一个问题就是用户登陆。Linux 有一套非常优秀的用户权限管理系统,这些所有的用户信息,记录在 /etc/passwd/etc/shadow/etc/group 三个文件。


/etc/passwd

1 root:x:0:0:root:/root:/bin/bash
2 daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
3 bin:x:2:2:bin:/bin:/usr/sbin/nologin
4 sys:x:3:3:sys:/dev:/usr/sbin/nologin
5 sync:x:4:65534:sync:/bin:/bin/sync
6 games:x:5:60:games:/usr/games:/usr/sbin/nologin
7 man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
8 lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
9 mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
...

/etc/passwd 文件的每一行信息,代表一个用户,我们自己也能在这个文件按照上面的格式,写入这样的一行信息,也就相当于新增了一个用户。Linux 的所有一切,都可以通过修改一个文件改变,这就正是我们开篇提到的 一切皆文件 的概念。

在每一行信息中又通过 : 号分割成七个部分,每个部分又代表了不同的含义。

  • 1. 用户名。
  • 2. 密码,上面都是用 x 字符表示,其实它的真身保存在另外一个文件 /etc/shadow,是加密的状态。
  • 3. uid (用户编号),500 以内的 ID 已经被系统保留了,我们注册的普通用户一般都大于 500 或者 1000。
  • 4. gid (用户组编号),存放在单独管理用户组表 /etc/group
  • 5. 注释。
  • 6. 用户目录。
  • 7. shell 默认是 bash。

sudo

root 用户是 Linux 中的超级管理员,它的权重大到可以操作一切,甚至毁灭操作系统。所以本着小心谨慎的态度,我们一般不之间在生产环境中之间使用 root 用户,那么当普通用户需要访问一些比较高级的权限咋办,这时就可以用上 sudo 命令,它可以 借权

$ sudo apt-get update // 借权

但是每一个 sudo,都要输入一次密码,长期下来,这实在是一件麻烦的事情,所以我们可以通过 /etc/sudoers 文件配置,让 某个用户使用 sudo 不用密码

# user privilege specification
jmjc ALL=(ALL:ALL) ALl (免 jmjc 用户的密码)

创建与删除用户

虽然通过 /etc/passwd 文件能直接操作用户,但是这种方式有点原始古老,也容易出错,更常见的是通过 命令操作

创建用户的第一步需要先创建用户组,针对不同的组我们后面可以设定不同的 权限管理

// 创建组
$ groupadd gname

// 删除组
$ groupdel gname

// 查看组ID
$ egrep 'gname' /etc/group

// 创建用户
$ useradd -g gid uname 

// 删除用户
$ userdel uname

刚刚创建好的用户还不能使用,需要为其添加一个密码。

$ passwd uname // 激活用户,给用户设置一个密码

su

用户之间的切换。

$ sudo su // 切换到 root
$ su jmjc // 普通用户切换

登陆信息

有时候我们发现了服务器有异常,想要查看用户的登陆信息、历史的操作记录,看看有没有被留下哪些可疑的记录。可以通过下面这些操作。

// 当前 用户登陆信息,对应 /var/run/utmp 文件
$ w
$ who

// 历史 用户登陆信息,对应 /var/log/lastlog 文件
$ lastlog

// 当前 & 历史 用户登陆信息,对应 /var/log/wtmp 文件
$ last

// 登陆失败用户信息,对应 /var/log/btmp 文件
$ lastb

既然这些登陆的信息是保存在一个个的文件中,那么有可能被修改,但是这些信息都是二进制格式,如果要修改,需要通过 utmpdump 这个工具。

utmpdump /var/log/utmp > tmp_output.txt  // 导出信息
utmpdump -r tmp_output.txt > /var/log/utmp // 可以修改后导入

操作记录

用户的历史命令记录。

history // 查看历史记录,对应 ~/.bash_history 文件
history -c // 清空历史记录,有些发行版需要重启后才会生效
Linux 教程 Linux 用户 Linux 基础命令 Linux 文件权限 Linux 文件查找 Linux 文件归档 Linux vim Linux 管道和重定向 Linux 进程 Linux 运行状态 Linux 服务管理 Linux 定时任务 Linux 磁盘 Linux LVM Linux 网络配置 Linux 软件管理 Linux iptables Linux SSH Linux curl