由于实验室几个老师的学生要共同使用一台服务器,所以需要规范一下服务器的使用,并且给各位学生配置相关的用户和权限,之前一直都是自己用,所以借此机会学习和总结一下Linux服务器的用户管理与权限管理。

Ubuntu/Linux用户管理与权限管理

  • 用户与用户组
    • 根用户——root用户
    • 用户组创建与删除
    • 创建新用户
    • 修改用户
    • 与用户账号有关的系统文件(查看用户/用户组)
  • 文件/目录权限管理
    • 查看权限
    • 修改/设置权限
    • 修改文件所属权

用户与用户组

根用户——root用户

在Ubuntu下,终端提示符里$表示普通管理员,#表示系统管理员(也就是root用户),root用户默认是没有密码的,启用root用户,就需要给root用户设置密码,命令如下:

$ sudo passwd root

系统会先验证当前普通管理员的密码,然后要求输入两次root用户的密码,之后就可以进入root用户了,关于用户和权限的管理,最好是在root用户下操作。进入root用户下的命令如下:

$ su root

输入密码后就进入root用户了。

用户组创建与删除

很多时候在创建新用户的时候,希望把一些用户归为一个组,以便后续的管理,例如我就打算把学生的账号都放到StudentGroup里面去,在Ubuntu中,一个用户是可以同时在几个组里面的,会指定一个主要组。

  • 1.查看用户所在组情况
    可以通过id命令查看当前用户或通过id user1来查看用户user1的用户组情况,例如:
id user1
uid=1001(user1) gid=1001(userGroup) groups=1001(userGroup),4(adm),27(sudo)

上面的命令可以看到,id user1命令的结果为显示用户名及id(uid),显示用户所在主组(gid),显示用户所在的组列表(groups),这里例子中,用户user1所在的主组为userGroup,同时也在adm,sudo用户组中。

  • 2.创建用户组
    创建用户组的命令是groupadd,普通管理员需要加sudo来执行,root用户不用。具体命令语法如下:
$ sudo groupadd [options] GroupName

其中的选项可以通过命令groupadd --help来查看,一般用的不多,就不细说了,需要的自己看。

  • 3.删除用户组
    删除用户组的命令语法如下:
$ sudo groupdel GroupName
  • 4.修改用户组信息
    修改用户组的命令语法如下:
$ sudo groupmod [options] GroupNameOld

其中的选项可以通过命令groupmod --help来查看,常用的主要是以下两个:

-g NewID:为GroupNameOld用户组指定新的组id
-n NewGroupName:为GroupNameOld用户组指定新的组名称

例如下面一条命令:

$ sudo groupmod -g 10001 -n group2 group1

即为将用户组group1改名为group2,同时组id设置为10001。

  • 4.用户组管理
    用户组管理的命令是gpasswd,通常用来给用户组添加或移除用户,其基本语法如下:
gpasswd [option] GroupName

可以通过gpasswd --help来查看选项列表,其中常用的选项有:
-a:添加用户到该用户组,例如下面命令:

gpasswd -a user1 Group2 #将用户user1添加到用户组Group2中;

-d:从用户组移除用户,例如下面命令:

gpasswd -d user1 Group1 #将用户user1从用户组Group1中移除;

少部分Ubuntu发行版中没有gpasswd命令,但是其功能可以用更为常用的usermod来完成(详见下面的用户管理)。

创建新用户

创建新用户可以用两个命令,一个是adduser,一个是useradd,这两个命令一个是通过系统提示配置密码等信息由系统以默认目录配置创建用户(adduser,会把用户主目录建立在\home目录下,仅配置密码和一些用户信息,其他的配置如权限用户组等都是默认的);一个是用户自己通过参数配置来添加用户(useradd,可以自行输入参数来确定用户的主目录、用户组等配置)

为了避免搞混这两个命令,我是这么记的:
(系统)添加用户——System add user,add在前,user在后,由系统自动完成,system省略了,所以是adduser;
用户添加(用户)——User add user,用户添加用户,可以自定义参数配置,省略后面的users,所以是useradd。

  • 使用adduser
    在普通管理员权限下,需要加sudo来执行命令:
$ sudo adduser UserName

在root用户下,可以不加sudo直接执行。
之后,系统会提示输入并二次确认用户名的密码,设置完成后,会默认建立一个新的用户组以及在\home目录下创建新的用户目录\home\abc\。最后会要求为新用户设置信息(全名、电话等),一路回车不用管这些都可以。

  • 使用useradd
    useradd命令的基本语法是:
useradd [options] UserName

可以使用useradd --help来查看系统给出的帮助文档。常用的选项如下(注意严格区分大小写):

-d DirPath:指定DirPath为新用户的主目录;
-m:不需要带值,与-d合用,表示当上述DirPath目录不存在时,创建目录DirPath;
-g GroupName:指定新用户主要所在的用户组(指定的组不存在时会报错,需要先创建用户组;
-G GroupName1 GroupName2:指定新用户所在的用户组(可以列出多个);
-s ShellPath:指定用户的登录shell为文件ShellPath。

例如下面这一条命令:

useradd -d /media/StudentGroup/stu1/ -m -g StudentGroup -G adm,root stu1

创建用户stu1,主用户组为StudentGroup(需要提前创建好),同时也属于用户组adm和root,主目录为/media/StudentGroup/stu1/。这样创建好的用户是没有密码的,可以在root用户下给它设置密码(passwd stu1命令,详见后面的用户修改部分)。
这里要注意一点,这样操作的时候,需要先手动创建目录/media/StudentGroup/或者确保这个目录存在,因为这条命令中的创建目录是不支持多级目录同时创建的,好像mkdir这个命令也是?(注:感谢楼下热心的大佬提醒,mkdir可以通过参数-p来递归创建,特此补充)

修改用户

1.配置相关
修改用户的配置需要在root用户下或者管理员权限,命令的基本语法如下:

usermod [options] UserName

具体的选项可以参考usermod --help,常用的选项和useradd类似,这里需要注意的有两个:

  • 一个是-m选项,在修改用户配置的时候,同样需要和-d选项合用,此时的-m选项就不是创建用户主目录了,而是移动旧用户主目录的内容到-d所指定的新用户主目录中去。
  • 另一个是-G选项,如果要将用户添加到一个或几个组里去,-G后面的用户组列表应当包含之前用户所在的组列表和新的组列表,否则,用户将从之前的组列表中移除,要查看用户在哪些组里面,可以通过命令cat /etc/group | grep UserName查看(UserName是要查看的用户名)。
    有时候用户所在组比较多,只用-G选项会比较麻烦,需要把之前所在的组都列出来,这时候可以添加-a选项(append)和-G选项合用,表示附加一个组,用的时候如下列命令所示:
usermod -a -G newGroup user1 #将user1添加到newGroup组中,即向user1原有的组列表中添加newGroup

如果要在用户的组列表中删除一个,可以参考上面说的的用户组管理命令gpasswd在组内删除对应用户组即可达到目的,同样的也可以通过gpasswd达到一次或多次使用usermod -a -G的作用

2.口令相关
口令相关的修改命令基本语法如下:

passwd [options] UserName

如果只是当前用户修改自己的口令,则可以只用passwd,如果是root用户或者其他管理员用户修改其他用户的口令配置,则需要管理员权限sudo或者root用户本身。跟上面的命令一样,可以用passwd --help来查看选项详情。常用的选项如下:

不使用任何选项:直接修改口令
-l:锁定口令,即禁用用户,用户可以通过ssh登录,但是不能修改口令
-u:解锁口令,即解除禁用
-d:清除口令,使账户不需要密码

3.切换组
有时候一个用户同时属于多个用户组的时候,默认是会使用主用户组的权限配置,如果需要切换当前用户当前使用的用户组,例如,用户stu1同时在用户组StudentGroup和adm中,默认是StudentGroup,在stu1下,使用如下命令可以切换到adm组中:

newgrp adm

与用户账号有关的系统文件(查看用户/用户组)

1. /etc/passwd——用户账户文件
每个用户都在文件/etc/passwd中有一个对应的记录行,它记录了这个用户的一些基本属性。这个文件对所有用户可读,查看命令为:

cat /etc/passwd

可以看到如下所示的输出:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
stu1:x:1001:1001::/media/StudentGroup/stu1/:
stu2:x:1002:1001:I_love_this_test:/media/StudentGroup/stu2/:/bin/bash

可以看出,一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

2. /etc/group——用户组文件
每个用户组会对应文件/etc/group中的一行记录,查看方式如下:

cat /etc/group

此文件的格式也类似于/etc/passwd文件,由冒号(:)隔开若干个字段,这些字段有:
组名:口令:组标识号:组内用户列表

**3. /etc/shadow
/etc/shadow中的记录与/etc/passwd中的记录一一对应,并且只有超级管理员才有权限查看,记录着每个用户更为隐私的信息。
它的文件格式与/etc/passwd类似,由若干个字段组成,字段之间用":"隔开。这些字段是:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志。

文件/目录权限管理

在Linux系统中,一切皆文件,就是目录(或文件夹)、文档、程序等所有的都统一为文件,文件的权限控制包括读、写、执行三种,同时还有所属权的概念。

查看权限

文件/目录的权限查看命令为:ls -l,该命令会列出当前目录下所有文件(包括子目录)的详情,结果如下图所示:

第一行是列出了当前目录下所有文件数量(包括子目录中所有文件),然后紧接着每一行都是当前目录下的一个文件。每一行中各部分含义如下:

权限 inode 所属用户 所属用户组 文件大小 修改时间 名称
drwxrwxrwx 0 user group 512 月日时间 name

其中第一个字段如drwxrwxrwxdrwxr-xr-x这种就表示该文件的权限,这个字段的值一共有10位字符,每一位的含义如下:

位置 含义 取值说明
第1位 是否为目录 d表示该文件为目录,-表示该文件不是目录
2~4位 所属用户对该文件的权限 2,3,4位分别对应读、写、执行权限,如果对应位置为“-”符号表示不具备该权限,为对应字母r、w、x则表示具备该权限
5~7位 所属用户组对该文件的权限 5,6,7位分别对应读、写、执行权限,如果对应位置为“-”符号表示不具备该权限,为对应字母r、w、x则表示具备该权限
8~10位 其他用户对该文件的权限 8,9,10位分别对应读、写、执行权限,如果对应位置为“-”符号表示不具备该权限,为对应字母r、w、x则表示具备该权限
举个例子,如下图所示结果:
-rwxr-xr-- 0 user1 Group1 512 May 23 14:23 AFile

这个结果表示的是文件AFile的信息,其权限为:

  • 文件属于用户user1,该用户对该文件有读、写、执行权限;
  • 文件属于用户组Group1,该用户组对AFile具有读、执行权限,没有写权限(不能修改);
  • 其他用户对文件AFile仅有只读权限,没有写(修改)和执行权限。

注意:这里针对目录(即文件夹),可执行权限表示能否进入该目录,可读权限代表能否查看该目录内容。

修改/设置权限

修改权限的命令为chmod,基本语法如下:

chmod 权限操作 文件名

其中权限操作有两种写法:

  • 字符操作
    [用户标识][操作符][权限内容]为语法规则,具体如下:

    • 用户标识:

      • u——表示文件所属用户(user)
      • g——表示所属用户组(group)
      • o——表示其他用户(other)
      • a——表示以上三个所有(all);
    • 操作符:
      • +——增加权限
      • -——删除权限
      • =——将权限设置为;
    • 权限内容:(权限内容可以多项一起)
      • r——读权限
      • ``w——写权限
      • x——执行权限

举几个例子:(这里省略了可能需要的管理员权限,如果需要就在下列命令前加sudo
chmod u+w aFile:给aFile的所属用户增加对aFile的写权限
chmod g-w aFile:使aFile的所属用户组对aFile不能写
chmod a+rwx aFile:给所有用户对aFile增加读、写、执行权限
chmod u=rw:将aFile的所属用户对aFile的权限设置为读、写(这里没有x所以相当于rw-,即使修改之前所属用户有执行权限,执行该命令后执行权限会被删除)。

  • 数值操作
    数值操作是一种更加简便的用法,熟练用户用的更多。其含义是把表示权限的九位(第一位表示是否为目录的不算)视作9个二进制位(事实上系统正是这样理解的),分别对应9个权限位,取值为1表示具备该权限,取值为0则表示不具备该权限。
    然后这9个二进制位中每三位可以转化为一个八进制位,这样,恰好可以将所属用户、所属用户组、其他用户三类的权限分别用一个八进制数字来表示,对于每类用户(每个八进制位)的每种独立权限可表示如下:
    r--——100——4
    -w-——010——2
    --x——001——1
    ---——000——0
    然后各种组合权限如此类推,也可以简单的计算为以上权限对应数值的加和,例如:
    rw-——110——6=4+2
    这种方法修改的时候需同时列出三类用户的权限值,例如下列命令:
chmod 777 aFile

这条命令就是将aFile的权限修改为所有用户对它具有所有权限。
再比如下面这条命令:

chmod 754 aFile

这条命令是将aFile权限设置为:所属用户对aFile具有全部权限,所属用户组有可读可执行权限但不可写,其他用户仅有可读权限。

修改文件所属权

上面提到的文件权限的修改都是针对文件属性中文件的拥有者(所属用户)以及所属用户组的,如果需要修改文件的所属权(即拥有者用户及所属用户组)则需要使用命令chown(change owner?),具体用法如下示例:

#遇到权限不足的情况自行添加sudo,没sudo权限就联系管理员吧
chown user1 aFile #修改aFile的所属用户为user1;
chown user1: aFile #修改aFile的所属用户为user1,所属用户组为user1所在的主组;
chown :Group1 aFile #修改aFile的所属用户组为Group1,所属用户不变;
chown user1:Group2 aFile #修改aFile的所属用户为user1,所属用户组为Group2;

以上就是Ubuntu中关于用户和权限管理的基本用法,对于大多数用户来讲已经足够了,也基本满足了实验室现在对Linux服务器的管理,当然还有更加高阶一些的功能和用途,例如修改系统配置文件,修改系统默认的用户组和管理权限以及多用户登录和环境变量切换这些,下次再专门整理关于多用户远程登录的内容。

欢迎访问博主的个人主页——静叶思的随笔

Ubuntu/Linux用户管理与权限管理(超详细解析)相关推荐

  1. Linux用户及文件权限管理

    一.Linux 用户管理 Linux 是一个可以实现多用户登陆的操作系统,比如"李雷"和"韩梅梅"都可以同时登陆同一台主机,他们共享一些主机的资源,但他们也分别 ...

  2. linux用户与组权限管理

    二 用户管理 每个用户都必须有一个组,一个组有多个用户 如上图:a.txt是属于用户tom的,a.txt的组是组1,因为tom就属于组1,组2和组3对a.txt来说就是其他组 1 基础语法 id wz ...

  3. linux用户及用户权限管理,Linux用户用户组及权限管理

    Linux安全上下文: 运行中的程序:进程 进程所能够访问资源的权限取决于进程的运行者身份 涉及的配置文件 /etc/passwd:保存用户信息 whatis passwd sslpasswd (1s ...

  4. linux组权限管理,Linux组管理和权限管理

    ⒈Linux组基本介绍 1)在Linux中的每个用户必须属于一个组,不能独立于组外. 2)Linux中每个文件都有所有者.所在组.其它组的概念 ①所有者 一般(默认)为文件的创建者,谁创建了该文件,就 ...

  5. 《Linux基础三》用户和文件权限管理

    用户和文件权限管理 1,用户 管理员用户: Root用户,也称根用户.超级用户.超级管理员 可对根目录执行读写和执行操作 具有系统中的最高.所有权限 普通用户: 权限有限的用户 Root用户拥有系统的 ...

  6. Linux之用户管理、权限管理、程序安装卸载

    一. 用户管理 1. 查看账户 (1). 查看当前账号:whoami ​(2). 查看系统当前登录的账号:who ​补充常用选项: ​(3). 查看系统所有的账号: cat /etc/passwd ​ ...

  7. linux设置共享权限设置命令,Linux系列知识详解(三)--------- Linux链接命令和权限管理命令...

    Linux系列知识详解(三)--------- Linux链接命令和权限管理命令 一:链接命令ln 简介:什么是链接命令?链接命令分为软链接和硬链接.其中软链接产生的新文件是以路径的形式表示原文件,类 ...

  8. Linux(5) 组管理和权限管理

    Linux(5) 组管理和权限管理 学习视频:https://www.bilibili.com/video/BV1Sv411r7vd?p=46&spm_id_from=pageDriver 一 ...

  9. Linux学习笔记 --组管理和权限管理

    目录 组管理 权限管理 权限管理应用实例 传送门 组管理 Linux 中 每个用户必须属于一个组,不能独立于组外 Linux 中 每个文件有所有者.所在组.其它组的概念 所有者(可变): 一般为文件的 ...

最新文章

  1. 《小学生都能看懂的快速沃尔什变换从入门到升天教程》(FWT / FMT / FMI)(最最严谨清晰的证明!零基础也能得学会!)
  2. AndroidStudio中使用XML和Java代码混合控制UI界面实现QQ相册照片列表页面
  3. ubuntu python3.5升级3.6_ubuntu16.04升级Python3.5到Python3.7
  4. Requested resource=<memory:-1, vCores:1>问题解决
  5. Spring休眠教程
  6. 【javascript】DOM操作方法(3)——document节点属性
  7. WordPress忘记密码的5种解决方法
  8. springboot+shiro:ShiroConfiguration配置
  9. 计算与推断思维 六、可视化
  10. ABAP 读取FTP文件
  11. Luogu 3174 [HAOI2009]毛毛虫
  12. win10 如何更换即将过期的产品密钥
  13. 科大讯飞输入法android离线语音,讯飞输入法Android5.0.1752 离线语音更轻快的表达...
  14. 网易AI平台开放多项技术,助力网易七鱼智能客服升级
  15. 计算机专业毕业设计选题推荐(建议收藏)
  16. 全国计算机等级考试证书电子,全国计算机等级考试证书效力
  17. 金融行业云都有什么需求
  18. 百度UEDITOR 内网上传视频支持IE8的方法
  19. Vue + Element-ui实现后台管理系统---项目搭建 + ⾸⻚布局实现
  20. hypermesh 学习笔记二,

热门文章

  1. Spring 初始化与 Bean 初始化
  2. 匈牙利互换奖学金申请流程-Stipendium Hungaricum Scholarship-罗兰大学篇
  3. 阿里云架构和openstack架构简析
  4. 项目规划时间轴流程图
  5. windows server环境下域的管理(域控制器和普通计算机都是win server)
  6. 群体遗传学-选择清除分析基本概念及参数
  7. [译] 为何前端开发如此不稳定
  8. AMD CPU无法安装Intel HAXM解决方法
  9. vs2010最佳字体配色_2010年50个最佳Windows最佳做法文章
  10. 你一定要掌握的数据可视化基本设计原则(上)