当我们要登录系统或访问系统的某个资源时,通常都要求输入用户名和密码,从系统的角度看,用户就是一种进行认证或授权的标识。只有通过认证的用户才能访问相应的资源,而对于同一个资源,不同的用户又有不同的访问权限。比如要在公司网络中配置一台网络服务器,只允许本公司的员工才能从服务器上浏览和下载文件,而且只允许行政部员工对文件的内容进行修改。这些都是在系统运维中经常遇到的问题。而解决这些问题我们都要用到用户和组。
用户账号的类型
在Linux系统中,根据系统管理的需要将用户账户分为三种类型:超级用户、普通用户、系统用户。
用户组的类型
在Linux系统中,每个用户账号至少属于一个组,这个组称为该用户的基本组。与Windows不同的是,**在Linux中创建一个用户账号,就会自动创建一个与该账号同名的组。**比如我们创建了一个student用户,就会自动创建一个student的用户组。
在Linux系统中,每一个用户可以同时加入多个组,这些用户又另外加入的组叫附加组。
UID和GID
UID(User Identifier,用户标识符),是系统中每一个用户的唯一标识符,对于系统核心来说,UID是区分用户的基本依据,root用户的UID固定为0,系统用户的账号为1-999之间,1000-60000的账号被划分给普通用户。
每一个组也有一个数字形式的标识符-GID(Group Identifier,组标识符)。它们的分组标号和UID一样。
需要注意的是,Linux系统也只是识别UID和GID来区分用户的组,至于用户名和组账号是方便人们记忆而已。
利用id查看用户信息:
id ztr # 查看ztr用户的基本信息
gpasswd -a ztr root # 将ztr加入到root组
5.用户账号文件:/etc/passwd
该文件的组成:
用户:密码占位符:UID:GID:描述信息:家目录:用户所使用的shell命令
6.用户密码文件:/etc/shadow:由于/etc/passwd
是所有用户可读的,这样就导致了用户和密码容易被泄露,因此Linux将用户的密码信息从/etc/passwd
中分离出来,单独放在了/etc/shadow
文件中。该文件又被称为影子文件,只有root用户拥有权限,从而保证用户密码的安全性。
我们可以通过useradd
命令添加的用户student和teacher,设置密码,我们可以通过如下命令来设置密码:
useradd student
useradd teacher
passwd student
我们可以从该文件看到,密码都是通过加密处理的。我们常用的加密方式有两种:MD5和SHA。在Linux系统中使用SHA的加密方式加密。
echo -n '123' | md5sum # 将123采用md5的方式加密
echo -n '123' | sha1sum # 将123采用sha的方式加密
# 这两种就加密方式的区别是MD5加密成128位的字符-32个字符,SHA加密成160位的字符-40位
/etc/shadow文件中包括9个配置字段,其中第一个字段表示用户名,第2个字段表示使用HASH加密的密码。密码由"$"分成3部分:
第一部分"$6":表示所采用的加密方式,Linux所提供的加密方式由md5,sha1,sha224,sha256,sha512等,"$6"对应的是sha512的加密方式;
第二部分:是在密码中加入随机数salt,它的作用是防止用户使用相同的密码,而导致加密后的密码串也相同;
第三部分:密码加密后的密码串,但是这些密码串都是通过重新编译后再存放的。
后面的数字表示密码最后一次更改距计算机元年的天数
echo $[18952/365]
我们可以使用命令useradd
来添加命令,格式如下:
useradd 用户 # 新增用户
# 通过创建用户,设计到更改的目录有/etc/passwd /etc/shadow /etc/group /etc/gshadow
/home /home/用户
useradd命令常用选项:
useradd -u 1004 user2 # 创建user2的用户并指定UID位1004
tail -1 /etc/passwd
# user2:x:1004:1004::/home/user2:/bin/bash
useradd -d /admin admin # 创建一个admin用户到/admin目录
useradd -g admin user3 # 创建user3用户并指定admin的用户基本组-不会创建user3组
tail /etc/group # 查看组文件并没有user3用户基本组
useradd -G admin user4 # 创建user4并指定附加组admin
id user4 # 创建了user4的基本组,并归于admin的附加组
useradd -g users -e 2021-11-11 temp01 # 创建一个2021-11-11失效的的用户temp01并指定users用户组
在Linux系统中我们需要定期的修改密码来确保账户的安全性,修改密码的命令是passwd
,其语法格式为:
passwd 用户名
注意:只有root用户才能修改所有用户的密码,只有本用户才能修改自己的密码。
passwd -d user1 # 清除密码
用户的密码被清除后,无需使用密码就可以实现本地登录,但远程登录始终是需要密码的。
passwd -u user2 # 将用户user2解锁
echo '123' | passwd --stdin user1 # 无需确认,直接为user1设置密码
echo user1:'123' | chpasswd # ubuntu系统使用方式
切换用户身份可以使用su(switch user)命令来实现,基本格式为:
su [-] [用户名]
如果不加"-“,工作目录还在原来的目录,如果加了”-"就变成了切换后用户的家目录
需要注意的是,从管理员切换到普通用户不需要输入密码,从普通用户切换到管理员需要输入密码。
对于系统已经存在的用户账号,如果要修改其属性信息可以直接编辑/etc/passwd
文件中的相关数值,也可以使用usermod(user modify)命令重新设置。
usermode和useradd命令的选项基本一致。
usermod -m -d /home/admin admin # 将admin的家目录移动到/home/admin下
usermod -l master admin # 将admin用户的账号改为master
grep master /etc/passwd
usermod -g ftp master # 将master的基本组改为ftp
id master
usermod -G root master # 将master用户附加组改为root
用这个选项修改附加组会将之前的附加组清空并重新设置。如果需要保留之前用户的附加组,那么就需要结合-a选项。
gpasswd -a student root # 将student加入到root组
usermod -a -G ztr student # 将student加入到ztr附加组,并且不覆盖之前的
id student
与组账号相关的配置文件有两个:/etc/group
,/etc/gshadow
。前者保存组账号名称、GID、组成员等基本信息,后者用于保存组账号的加密密码字符串等信息。
grep "^root" /etc/group # 查看root组的信息
# root:x:0:student
创建用户组使用命令groupadd
:
groupadd class3 # 创建class3的用户组
tail -1 /etc/group
groupadd -g 2000 class2 # 创建用户组,并指定GID为2000
tail -1 /etc/group
gpasswd
命令本来是设置组账号的密码,但是该功能极少使用,实际上该命令更多的是添加、删除组成员,对应的选项为-a、-d。
gpassswd [选项] 用户名 组名
注意:gpasswd命令改变的是用户的附加组,将用户加入到某个组之后,该组将称为一个用户的附加组。
gpasswd -a student teacher # 将student用户加入到teacher组
id student # 基本组不变
---------------------
gpasswd -d student teacher # 将student从teacher组删除
如果要删除的组是某些用户的基本组,那么就得先删除这些用户,才能删除用户基本组。使用命令groupdel
便可以完成这些操作:
gpasswd -a super class1 # 将class1设为super的附加组
groupdel class1 # 删除class1用户组
-------------------------
usermod -g class2 super # 将class2设为super的基本组
groupdel class2 # 此时无法删除
usermod -g admin super # 将admin设为super的基本组
groupdel class2 # 此时才能删除
软件包是Ubuntu系统中软件及其文档的提供形式。一般而言,软件包中包括源程序软件包和二进制软件包。源程序软件包主要提供源代码以及二进制软件包的制作方法;二进制软件包是经过封装的可执行程序及其相关文档和配置文件等,它通常是压缩文档,其中包含软件信息、程序文件、配置文件、帮助文档、启动脚本和控制信息等内容。用户可以方便地通过二进制软件包安装、升级和删除软件。
Ubuntu软件包地格式不同于其他Linux系统,其主要格式是DEB格式。这种格式最早是Debian Linux使用地,Ubuntu本质上是从Debian发展而来地,因此也沿用了DEB格式。Linux操作系统中的DEB包类似于Windows上的软件包,不需要复杂的编译即可通过鼠标单击安装使用。Ubuntu软件仓库中提供的软件包均采用了这种封装,apt-get、aptitude、synaptic
等软件管理工具均支持DEB包。DEB包存在依赖关系,常见的依赖关系有Depends、Recommends和Conflicts等。假设有两个DEB包—A和B,若软件包A和B之间存在Depends关系,即A依赖B,则意味着安装软件包A时也要安装软件包B;Recommends关系意味着开发者推荐用户在安装软件包A时系统必须已经安装了软件包B;Conflicts则意味着软件包A和B不能同时存在,相互冲突。
Ubuntu还支持Redhat格式的软件包,即RPM格式,Redhat的派生系统(Fedora、CentOS等)也支持此格式的软件包。此外Ubuntu还支持Tarball格式的软件包,这是一种将大量文件(包括其目录结构)组合成单个文件的大型文件集合。Tarball使用tar
命令组合多个文件,生成一个文件,以便于系统中常用的ZIP或RAR压缩文件。Tarball文件的扩展名一般为.tar.gz
或tar.bz2
等,可用于装配源代码或二进制代码文件。Tarball常常用于开源社区分发源代码,对于tar.gz
文件,在终端中执行tar xvf filename
命令将想要的文件解压,再执行其中包含软件的安装命令即可。
APT(Advance Packaging Tool,高级打包工具)是Ubuntu软件包管理系统的高级界面。Ubuntu基于Debian,APT由几个名字以"apt-"打头的程序组成,包括apt-get、apt-cache和apt-cdrom等,这些都是处理软件包的命令行工具。
APT是一个客户/服务器系统,再服务器上先复制所有DEB包,然后用APT的分析工具(genbasedir)根据每个DEB包的包头(header)信息对所有的DEB包进行分析,并将该分析结果记录在一个文件中,这个文件称为DEB索引清单,APT服务器的DEB索引清单置于base文件夹内。一旦APT服务器内的DEB包有所变动,就必须使用genbasedir分析工具产生新的DEB索引清单。客户端在进行安装或升级时先要查询DEB索引清单,从而可以获知所有具有依赖关系的软件包,并一同下载到客户端,以便安装。
当客户端需要安装、升级或删除某个软件包时,客户端计算机取得DEB索引清单压缩文件后,会将其解压并放于/var/state/apt/lists
目录下,而客户端执行apt-get install
或apt-get upgrade
命令的时候,就会将这个目录下的数据或客户端计算机内的DEB数据库比对,从而知道哪些DEB已安装、未安装或可以升级。
apt-get
提供了一个用于下载和安装软件包的建议命令行界面,在其中可以执行很多命令,最常用的是update
和install
。命令解释如下:
命令的选项如下:
apt-get命令的使用举例:
1.安装openssh-server:
apt-get install openssh-server
2.完成后,查看ssh进程是否安装和启动:
ps -e | grep ssh
3.利用ifconfig
命令,查看SSH服务器的IP地址:
ifconfig
如果没有ens33的网卡,可以参考:https://www.cnblogs.com/Gregg/p/17187459.html
4.使用Mobaxterm进行远程连接:
Ubuntu图形界面的软件安装可以通过应用中心的软件管理工具管理软件的安装、卸载、更新: