一、用户账户介绍
Linux/Unix是一个用户、多任务的操作系统;在讲Linux账号及账户组管理之前,先简单了解一下多用户、多任务操作系统的基本概念。
- Linux的单用户多任务
在Linux下,当你登录后,你也可以同时开启很多的服务任务和进程,而各自服务都会跑的很好却对其他任务没有任何影响,这种登录一个用户登录系统执行多个服务任务和进程的情况,就称为单用户多任务。
- Linux的多用户多任务
有时可能是很多用户同时用同一个系统,如公司几十个运维人员,每台机器都可以和被若干个运维人员登录部署或解决相关故障问题,但并不是所有的运维人员都要做同一件事,所以就有了多任务、多用户的情况。值得注意的是:多用户、多任务并不是大家同时挤到一起,在一台机器的键盘和显示器前来操作机器,多用户可能是通过SSH客户端工具等远程工具等远程登录服务器来进行,比如对服务器的运程控制,只要具有相关用户的权限,任何人都是可以上去操作访问服务器。
- linux系统用户角色划分
用户在系统中是分角色的,在Linux系统中,由于角色的不同,权限和所完成的任务也不同;值得注意的是用户的角色是通过UID和GID识别的;特别是UID,在运维工作中,一个UID是唯一标识一个系统用户的账号。
linux系统用户从不同维度来看,分为:
1. 根据账号的位置分为:本地帐号、远程(域)帐号、 LDAP、NIS。
本地帐号:顾名思义就是服务器本地的账号,存在于服务器本身。
远程(域)账号:存在于远程的linux服务器或者认证服务器。类似SSH登录的账号,ftp账号等等。你需要通过这些账号远程登录别的服务器去进行操作。
LDAP:是一种开源的解决方案,可以进行统一的管理,例如管理用户的读写权限,目录权限,访问权限,等到后面我们详细讲解LDAP。
NIS:在一个大型的网域中,如果有多部Linux主机,而且需要每台主机都设定相同的帐号与密码时,是十分麻烦的。此时,如果能够有一台NIS主控制服务器(master server)来管理该网域中所有主机的帐号密码,也是比较方便的。这里不做赘述,感兴趣的小伙伴可以上网搜索一下相关资料。
2.根据账号的角色分为:超级用户,程序用户,普通用户
超级用户:Linux系统上的默认是root用户,其UID和GID均为0。在每台unix/linux操作系统中都是唯一且真实存在的,通过它可以登录系统,可以操作系统中任何文件和命令, 拥有最高的管理权限。在生产环境,一般禁止root账号远程登录SSH连接服务器,以加强系统安全。
程序用户:真实用户区分开来,这类用户的最大特点是安装系统后默认就会存在的,且默认情况不能登录系统,它们是系统正常运行必不可少的, 他们的存在主要是方便系统管理,满足相应的系统进程都文件属主的要求。例如系统默认的bin、adm、nodoby、mail用户等。由于服务器角色的不同, 有部分用不到的系统服务被禁止开机执行,因此,在做系统安全优化时,被禁止开机启动了的服务对应的虚拟用户也是可以处理掉的(删除或注释)。
普通用户:一般为管理员账号创建的用户,权限比较小,也是为了系统的安全性创建的用户。一般来说普通用户都会限制比较严格的权限,例如/etc/ssh/sshd_config文件没有读取写入权限,/var/log/下的log文件甚至不能读取,本用户不能写入别的用户的目录或者文件等等。
超级用户(root)UID:0
程序用户UID:1-499
普通用户UID:500+
PS:多用户系统从实际来说使得系统管理更为方便了。从安全角度来说,多用户也更为安全,比如普通用户abc下的某个文件不想让其他用户看到,只是设置一下该文件的权限普通用户abc一个用户可读可写可执行的权限就行了,这样以来只有普通用户abc一个用户可以对其私有文件进行操作,从而达到了保护每个用户的私有数据安全。
为
系统中组的介绍
用户(user)介绍
如果要使用系统资源,就必须向系统管理员申请一个账号,然后通过这个账号进入系统。这个账号和用户是同一个账号,通过建立不同属性的用户,一方面,可以合理的利用和控制系统资源,另一方面也可以帮助用户组织文件,提供对用户文件的安全性保护。
每一个用户都有一个唯一的用户名和用户口令,在登录系统后,只有正确输入了用户名和密码,才能登录系统和相应的目录。 在生产环境中,一般会为每一个有权限管理服务器的运维人员分配一个独立的普通用户账号及8位以上(包含数字、字母)以上的密码。
如zgy普通用户,该人员只能通过建立的这个账号登录到系统中进行维护,当需要超级用户权限时,可以通过"sudo 命令名"方式来执行仅有root权限才允许执行的权限。当然,sudo权限要尽量的小。还有,当运维人数不多时(如2-3个),也可以直接su - 切换到超级用户root下,再执行相应的维护工作。特别提醒,维护时,如果不需要root权限,就不要进入root用户下操作,以减少误操作对系统带来的损失。
用户组(group)介绍
简单的说,linux系统中的用户组(group)就是具有相同特性的用户(user)集合; 有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件或目录,如果不用用户组,这种需求在授权时就很难实现。如果使用用户组就方便多了,只需要把授权的用户都加入到同一个用户组里,然后通过修改该文件或目录的对应的用户组的权限,让用户组具有符合需求的操作权限,这样用户组下的所有用户对该文件或目录就会具有相同的权限,这就是用户组的用途。 将用户分组是linux系统中对用户进行管理及控制访问权限的一种手段,通过定义用户组,在很大程度上简化了运维管理工作。 实际上,在日常生活中,对人类的分组也是无处不在的,大到国家,小到公司,家庭,学校,班级等等都类似linux中用户组的概念,而其中的成员就类似linux用户组中用户的概念。
linux系统组从不同维度来看,分为:
根据组的位置:同样可以分为本地组、远程(域)组。 LDAP,NIS。
这里不在叙述他们的意义。
根据组的角色:超级用户组(root)UID:0
程序用户组UID:1-499
普通用户 组UID:500+
PS:如果不特殊指定的话,创建用户后,每一个用户都有一个同名的组
关于用户的相关配置文件
Linux系统中下的账户文件主要有/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow四个文件。
与用户相关的配置文件
/etc/passwd:用户的配置文件, 保存用户账户的基本信息
/etc/shadow:用户影子口令文件,用于存放加密后的密码
/etc/passwd文件中每行定义一个用户账号,有多少行就表示多少个账号,在一行中可以清晰的看出,各内容之间又通过”:”号划分了7个字段,这7个字段分别定义了账号的不同属性,passwd文件实际内容如下:
例如:
这7个字段各代表什么意思呢?
root:用户名
x: 密码占位符
0: UID
0: GID
root : 用户描述
/root: 用户主目录(bash中"~"代表的那个)
/bin/bash: 登录后使用的shell
Linux中的伪用户:
nobody为伪用户,常用的程序使用伪用户的有NFS。
还有Nginx,如果不修改配置文件时运行nginx web服务器默认使用nobody用户。
查看主机上有多少可以使用的shell(s)
查看/etc/shells即可
Linux用户管理命令
Linux是一个多用户多任务的操作系统,有着很丰富的用户管理工具,这些工具包括用户的查询。添加、修改、以及不同用户之间相互切换等;通过这些工具,我们可以简单、方便、安全的进行用户管理工作。
添加用户的命令useradd和adduser,这两个命令所能达到的效果是一样的。当然除了useradd和adduser命令意外,我们还能通过修改用户配置文件/etc/passwd和/etc/group及手动创建的办法来直接添加用户,不过不推荐这个方法。这里推荐大家统一使用useradd命令。
useradd 添加账户
当使用useradd命令不加参数选项,后面直接跟所添加的用户名时,系统首先会读取配置文件/etc/login.defs和/etc/default/useradd文件中所配置的信息建立用户的家目录,并复制/etc/skel中的所有文件(包括隐藏的环境配置文件)到新用户的家目录中。
useradd语法:
[root@localhost ~]# man useradd
NAME
useradd - create a new user or update default new user information
SYNOPSIS
useradd [options] LOGIN
useradd -D
useradd -D [options]
描述:
新账号建立
当不加-D参数时,useradd指令使用命令列来指定新账号的设定值和使用系统上的预设值(指前文提到的/etc/login.defs和/etc/default/useradd等配置文件)。新用户账号将产生一些系统档案,如用户目录的建立,拷贝起始档案等,这些均可以利用命令列选项指定。
下面是具体的选项:
-c comment :新账户的password的说明栏
-u: 指定 UID 标记号。这个值是唯一的,除非用-o选项。数字不可为负值
-d: 指定宿主目录,缺省为 /home/用户名
-e: 指定帐号失效时间
-f: 账户过期几天后永久停权。
-g: 指定所属的基本组(组名或GID)
-G: 指定所属的附加组(组名或GID)
-m: 用户目录如不存在则自动建立。
-M: 不为用户建立并初始化宿主目录。优先于/etc/login.defs文件的设定。
-n: 默认情况下,用户的用户组和用户的名称会相同,如果命令加了-n参数,就不会生成和用户同名的用户组
-r: 用来建立系统账户。系统账户的UID会比定义在/etc/login.defs的UID_MIN来的小。
-s: 指定用户的登录Shell
当使用useradd命令不加参数选项,后面直接跟所添加的用户名时,系统首先会读取配置文件/etc/login.defs和/etc/default/useradd中所定义的参数或规则,根据设置的规则添加用户,同时会向/etc/passwd和/etc/group文件内添加新建用户和用户组记录。
当然/etc/passwd和/etc/group的加密资讯文件/etc/shadows和/etc/gshadow也会同步生成记录,同时系统还会根据/etc/default/useradd文件中所配置的信息建立用户的家目录,并复制/etc/skel中的所有文件(包括隐藏的环境配置文件)到新用户的家目录中。
改变新建用户的预设值 :
当执行useradd命令或加-D选项时,可以更改新建用户的默认配置值,或是由命令列编辑的方式更新预设值
为了方便读者阅读查看,依然用表格的方式把useradd加-D选项后,命令后面依然可使用的参数选项展现给大家如下所示
档案
/etc/passwd -使用者账号资讯
/etc/shadow -使用者账号资讯加密
/etc/group -群组资讯
/etc/default/useradd -定义资讯
/etc/login.defs -系统广义设定
/etc/skel -内含定义档的目录
SEE ALSO
chfn(1), chsh(1), passwd(1), crypt(3), groupadd(8), groupdel(8),
groupmod(8), login.defs(5), userdel(8), usermod(8).
useradd实例:
实例3:不加任何参数,直接执行useradd usesname添加用户
[root@localhost ~]# useradd zhonggy
[root@localhost ~]# ls -ld /home/zhonggy/
drwx------ 3 zhonggy zhonggy 4096 May 7 09:17 /home/zhonggy/
在这个例子中,我们添加了一个名为zhonggy系统用户,当查看/home/目录时,会发现系统自动建立了一个zhonggy的目录。
我们再来看/etc/passwd文件中有关新用户zhonggy的记录:
在这个例子中,我们添加了一个名为zhonggy系统用户,当查看/home/目录时,会发现系统自动建立了一个zhonggy的目录。
我们再来看/etc/passwd文件中有关新用户zhonggy的记录:
#行中的505:505就是/etc/login.defs文件内容预设的。
提示:有很多的朋友习惯先通过cat来读取/etc/passwd文件,然后再通过grep来抽取zhonggy字段,也可以达到同样的目的,但在写法上就逊色很多了。如下:
[root@localhost ~]# cat /etc/passwd | grep zhonggy
zhonggy:x:505:505::/home/zhonggy:/bin/bash
[root@localhost ~]# finger zhonggy #使用finger命令来查看用户信息
Login: zhonggy Name: (null)
Directory: /home/zhonggy Shell: /bin/bash
Never logged in.
No mail.
No Plan.
从上文过滤出的zhonggy用户记录来看,用户的UID和GID分别为505,并且zhonggy的家目录为/home/zhonggy,所对应的shell为bash
接下来,我们再看看/etc/shadow、/etc/group和/etc/gshadow文件,是不是也有与zhonggy用户有关的记录:
[root@localhost ~]# grep zhonggy /etc/shadow
zhonggy:!!:16562:0:99999:7:::
You have new mail in /var/spool/mail/root
[root@localhost ~]# grep zhonggy /etc/group
zhonggy:x:505:
[root@localhost ~]# grep zhonggy /etc/gshadow
zhonggy:!::
提示:根据上文结果,我们发现/etc/shadow、/etc/group和/etc/gshadow几个文件都存在和zhonggy用户相关的记录。
我们还可以查看/etc/default/useradd 和/etc/login.defs两个文件的规则,看一下zhonggy用户的增加是不是符合这两个配置文件预设的值。最后可以查看/home/zhonggy目录下的文件,是不是和/etc/skel目录下的一样。
实例 4:useradd的-g、-u参数,执行useradd [参数] username 添加用户
[root@localhost ~]# groupadd -g 801 sa
#创建用户组sa制动gid 801,这个是groupadd命令的用法
[root@localhost ~]# useradd -g sa -u 901 oldboy1
#创建用户oldboy1属于指定组sa,指定uid901,用户名oldboy1
[root@localhost ~]# id oldboy1 #通过id命令查看结果
uid=901(oldboy1) gid=801(sa) groups=801(sa) context=root:system_r:unconfined_t:SystemLow-SystemHigh
生产场景中的创建账户的完整命令例子:
groupadd -g 801 sa
seradd -g sa -u 901 ett
echo “6fuwrfwq3e” |passwd ett --stdin
echo “ett ALL=(ALL) NOPASSWD:ALL” >>/etc/sudoers
visudo -v
history -c
实例5:useradd的——M、-s参数的例子
[root@localhost ~]# useradd oldboy2 -M -s /sbin/nologin
#-M表示不创建家目录,-s指定用户登录后的shell,这里是/sbin/nologin表示禁止登陆。此例在生产环境中部署apache,mysql,nagios服务时经常用到。
[root@localhost ~]# ls -ld /home/ | grep oldboy2
[root@localhost ~]# grep oldboy2 /etc/passwd
oldboy2:x:902:902::/home/oldboy2:/sbin/nologin
实例6:useradd 的-e参数的例子
在本例中,我们主要来看看-e参数,这个参数还是比较重要的,是设定用户的账号什么时候过期,在生产场景中,员工离职或者一些临时有需求的用户或者需要有时间限制的一些用户,可能需要这个选项。
groupadd 添加组账户
-g 指定gid。除非指定-o选项,否则ID值必须是唯一的数字,不能为负值。如果布指定-g参数,则预设值会从500开始。
-r 建立系统用户组。GID值会比/etc/login.defs中定义的UID_MIN小。
-f 新增一个账户,强制覆盖已经存在的用户组账户。
passwd 设置密码
普通用户和超级用户都可以运行passwd命令,但普通用户只能更改自身的用户密码。超级用户则可以设置或修改所有用户的密码
当直接passwd命令后面不接任何参数或用户名时,则表示修改当前登陆用户的密码。
-d 清空密码,仅root能操作
-f 强制操作,仅root能操作
-k 保留即将过期的用户在期满后仍能使用
-l 锁定用户账户;锁定用户无权更改其密码,仅root能操作
-S 查看用户账户的状态
-u 解锁用户账户;仅root能操作
--stdin 从标准输入取密码
修改用户密码有效期:chage
语法:
格式:chage [选项] 用户名
常用命令选项:
-d:将最近一次密码设置时间设置为"最近时间"
-E:指定账号过期时间,YYYY-MM-DD
-I:指定当密码失效后多少天锁定账号;
-l:列出密码有效期信息
-m:指定密码的最小天数
-M:指定密码的最大天数
-W:将过期警告天数设置为"警告天数"
id:查看用户的帐号属性信息
-u:只看UID
-g:只看gid
-G:只看GID
-n:看名字,与其他选项连用
userdel 删除账户
-r 连同主目录一起删除
添加组账号groupadd命令
格式:groupadd [-g GID] 组名
选项:
-g gid:指定组ID号。
-o:允许组ID号,不必惟一。
-r:添加系统组,低于499系统账号。
删除用户组groupdel命令
格式:groupdel 组名
删除的目标组不能是用户的基本组
gpasswd命令 管理组
语法:
格式:gpasswd [选项] 组名
选项:
-A 定义组管理员列表
-a 添加组成员,每次只能加一个
-d 删除组成员,每次只能删一个
-M 定义组成员列表,可设置多个,用“,”分开——定义的组成员必须是已存在用户的
-r 移除密码
切换所属基本组newgrp命令
查看用户的组信息
groups 命令
格式:groups [用户名]
groupmod:更改群组和名称
-g GID
-n GRPNAME
修改用户账号的属性
语法:
格式:usermod [选项] 用户名
常用命令选项:
-c:指定注释信息
-d -m:-d一般跟-m使用,既指定新的家目录位置,又移动其此前的文件至新的家目录当中
-e:指定账号失效时间
-g:指定所属的基本组(组名或GID)
-a -G GID:不使用-a选项,会覆盖此前的附加组;
-l:更改用户账号的登陆名称
-L:锁定用户账号
-s:指定用户登录Shell
-u:指定UID标志号
-U:解锁用户账号
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.