Linux用户和用户组管理
Linux用户和用户组管理
前言
当你需要管理一台容纳多个用户的Linux机器时,比起一些基本的用户管理工具所提供的方法,有时候你需要对这些用户采取更多的用户权限管理方式。特别是当你要管理某些用户的权限时,这个想法尤为重要。
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
每个用户账号都拥有一个唯一的用户名和各自的口令。
用户在登录时键入正确的用户和口令后,就能够进入系统和自己的主目录
实现用户账号的管理,要完成的工作主要有如下几个方面:
- 用户账号的添加,删除与修改
- 用户口令的管理
- 用户组的管理
一,Linux系统用户账号的管理
用户账号的管工作涉及到用户账号的添加,修改,删除,查询。
添加用户账号就是在系统中创建一个新的账号,然后为新账号分配用户号,用户组,主目录和登录Shell等资源。刚添加的账号是被锁定的,无法使用。
添加用户账号useradd
其语法格式如下:
1 | useradd 选项 用户名 |
选项:
- -c comment 指定一段注释性描述
- -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录
- -m 创建目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录
- -g 用户组 指定用户所属的主要用户组
- -G 用户组 指定用户所属的附加组
- -s Shell文件 指定用户登录的Shell
- -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
- -o 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
用户名:
指定新账号的登录名。
实例
1 | useradd -s /bin/bash -g test –G adm,root -d /home/gem -m gem |
此命令创建了一个用户gem,该用户的登录Shell是/bin/bash ,它属于test组,同时又属于adm和root用户组,其中test用户组是其主组。
这里会新建组#groupadd test && groupadd adm
增加用户账号就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow,/etc/group等。Linux提供了集成的系统管理工具userconf,它可以用来对用户账号进行统一管理。
删除用户账号userdel
如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。
其命令格式如下:
1 | userdel 选项 用户名 |
选项:
- -r 把用户的主目录一起删除。
用户名:
要删除的用户名
实例
1 | userdel -r gem |
此命令删除用户gem在系统文件中(主要是/etc/passwd,/etc/shadow,/etc/group等)的记录,同时删除用户的主目录。
修改用户账号usermod
修改用户账号就是根据实际情况更改用户的有关属性,如用户号,主目录,用户组,登录Shell等。
其命令格式如下:
1 | usermod 选项 用户名 |
选项:
- -c comment 指定一段注释性描述
- -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录
- -m 创建目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录
- -g 用户组 指定用户所属的主要用户组
- -G 用户组 指定用户所属的附加组
- -s Shell文件 指定用户登录的Shell
- -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
- -o 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
- -l 新用户名 有些系统可以使用的选项,指定一个新的账号名
用户名:
指定账号的登录名。
实例
1 | usermod -s /bin/zsh -d /home/z -g group gem |
此命令将用户gem的登录shell改为Zsh,主目录改为/home/z ,用户主组为group。
查询用户账号/etc
将用户添加到现有组是Linux管理员的常规活动,因此识别该环境的用户组和用户是非常重要的,所有用户都列在/etc/passwdd
中,组列在/etc/group
中。因此我们需要的信息直接打开这些文件就行。
什么是/etc/passwd?
/etc/passwd
是一个文本文件,其中包含登录Linux系统所必需的每个用户信息。它维护有用的用户信息,如用户名,密码,用户ID,组ID,用户ID信息,家目录和shell。passwd每行包含了用户的详细信息
从上面的例子我们可以看到,/etc/passwd中记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下
1 | 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell |
1)”用户名”是代表用户账号的字符串。
通常长度不超过8个字符,并且由大小写字母和/或数字组成。登录名中不能有冒号(:),因为冒号在这里是分隔符。
为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)打头。
2)“口令”一些系统中,存放着加密后的用户口令字。
虽然这个字段存放的只是用户口令的加密串,不是明文,但是由于/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多Linux 系统(如SVR4)都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”。
3)“用户标识号”是一个整数,系统内部用它来标识用户。
一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。
通常用户标识号的取值范围是0~65 535。0是超级用户root的标识号,1~99由系统保留,作为管理账号,普通用户的标识号从100开始。在Linux系统中,这个界限是500。
4)“组标识号”字段记录的是用户所属的用户组。
它对应着/etc/group文件中的一条记录。
5)“注释性描述”字段记录着用户的一些个人情况。
例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。在不同的Linux 系统中,这个字段的格式并没有统一。在许多Linux系统中,这个字段存放的是一段任意的注释性描述文字,用做finger命令的输出。
6)“主目录”,也就是用户的起始工作目录。
它是用户在登录到系统之后所处的目录。在大多数系统中,各用户的主目录都被组织在同一个特定的目录下,而用户主目录的名称就是该用户的登录名。各用户对自己的主目录有读、写、执行(搜索)权限,其他用户对此目录的访问权限则根据具体情况设置。
7)用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。
Shell是用户与Linux系统之间的接口。Linux的Shell有许多种,每种都有不同的特点。常用的有sh(Bourne Shell), csh(C Shell), ksh(Korn Shell), tcsh(TENEX/TOPS-20 type C Shell), bash(Bourne Again Shell)等。
系统管理员可以根据系统情况和用户习惯为用户指定某个Shell。如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为/bin/sh。
用户的登录Shell也可以指定为某个特定的程序(此程序不是一个命令解释器)。
利用这一特点,我们可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户就自动退出了系统。有些Linux 系统要求只有那些在系统中登记了的程序才能出现在这个字段中。
8)系统中有一类用户称为伪用户(pseudo users)。
这些用户在/etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。
常见的伪用户如下所示:
1 | 伪 用 户 含 义 |
什么是/etc/group
/etc/group
是一个文本文件,用于定义用户所属的组。我们今天将多个用户添加到单个组中。它允许用户访问其他用户文件和文件夹,因为Linux权限分为三类:用户,组和其他。它维护有关组的有用信息,例如组名,组密码,组ID(GID)和成员列表。每个都在单独的行。组文件中包含了每个组的详细信息。
用户和用户组常用命令
groups
: 显示一个用户的所有用户组id
: 打印指定用户名和组信息lid
: 显示用户的组或组的用户getent
: 从Name Service Switch 库中获取条目whoami
:查看当前登录用户名
用户口令管理passwd
用户管理的一项重要内容是用户口令的管理。用户账号刚创建的时候没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空指令。
指定和修改用户的口令的Shell命令是passwd。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。命令的格式为:
1 | passwd 选项 用户名 |
可以使用的选项:
- -l 锁定账号,即禁用账号
- -u 口令解锁
- -d 使账号无口令
- -f 强迫用户下次登录时修改口令。
如果默认用户名,则修改当前用户的口令。
实例
1 | passwd -d -l gem |
此命令将Sam的口令删除和锁定该账户,于是该账户下次就不能登录了。
二,Linux系统用户组管理
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同的Linux系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户的同时创建。
用户组的管理涉及用户的添加,删除和修改。组的增加,删除和修改实际上就是对/etc/group文件的更新。
增加新的用户组groupadd
其格式如下:
1 | groupadd 选项 用户组 |
可以使用的选项有:
- -g GID指定新用户的组标符号(GID)
- -o 一般与-g选项同时使用,表示新的用户组的GID可以与系统已有用户组的GID相同
实例
1 | groupadd -g 101 -o test |
此命令向系统中增加了一个新的用户组test,同时指定新的用户组的ID为101,且可以与已有的GID相同
删除已有的用户组groupdel
其格式如下:
1 | groupdel 用户组 |
实例
1 | groupdel test |
此命令用于从系统中删除组test
修改用户组的属性groupmod
其格式如下:
1 | groupmod 选项 用户组 |
常用的选项有:
- -g GID为用户指定的新的组标符号
- -o与-g选项同时使用,用户组的新GID可以与系统已有的用户组的GID相同。
- -n 新的用户组 将用户组的名字改为新的名字
实例
1 | groupmod -g 110 -o -n newtest test |
此命令将用户组test的GID改为了110,并且可以与已有的用户组的GID相同,并且更名为newtest。
切换用户组newgrp
如果个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。
用户在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组
实例
1 | newgrp root |
此命令用户将当前用户的用户组切换到root用户组,前提是root用户组确实是该用户的主组或者附加组。类似于用户账号的管理,用户组的管理也可以通过集成的系统管理工具来完成。
三,更改文件属性
1、chgrp:更改文件属组
语法:
1 | chgrp [-R] 属组名 文件名 |
参数选项
- -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
2、chown:更改文件属主,也可以同时更改文件属组
语法:
1 | chown [–R] 属主名 文件名 |
进入 /root 目录(~)将install.log的拥有者改为bin这个账号:
1 | [root@www ~] cd ~ |
将install.log的拥有者与群组改回为root:
1 | [root@www ~]# chown root:root install.log |
3、chmod:更改文件9个属性
Linux文件属性有两种设置方法,一种是数字,一种是符号。
Linux 文件的基本权限就有九个,分别是 owner/group/others(拥有者/组/其他) 三种身份各有自己的 read/write/execute 权限。
先复习一下刚刚上面提到的数据:文件的权限字符为: -rwxrwxrwx , 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
- r:4
- w:2
- x:1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: -rwxrwx— 分数则是:
- owner = rwx = 4+2+1 = 7
- group = rwx = 4+2+1 = 7
- others= — = 0+0+0 = 0
所以等一下我们设定权限的变更时,该文件的权限数字就是 770。变更权限的指令 chmod 的语法是这样的:
1 | chmod [-R] xyz 文件或目录 |
选项与参数:
- xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
- -R : 进行递归(recursive)的持续变更,以及连同次目录下的所有文件都会变更
举例来说,如果要将 .bashrc 这个文件所有的权限都设定启用,那么命令如下:
1 | [root@www ~]# ls -al .bashrc |
那如果要将权限变成 -rwxr-xr– 呢?那么权限的分数就成为 [4+2+1][4+0+1][4+0+0]=754。