【Linux常用指令】用户管理

文章目录

    • Linux系统目录结构
    • Linux用户和用户组
      • 用户管理概述
      • 用户账号和用户组
        • 用户概念
        • 用户组概念
      • Linux用户和组的关系
    • Linux用户管理
      • 添加用户 useradd
      • 选项
      • 修改用户 usermod
      • 用户账号口令管理passwd
      • 删除用户 userdel
    • Linux用户组管理
      • 添加新组groupadd
      • 修改群组groupmod
      • 删除群组groupdel
    • Linux超级用户与伪用户
      • 用户身份切换
        • su
        • sudo

Linux系统目录结构

【Linux常用指令】用户管理_第1张图片

文件系统组织结构

  • /lib

系统开机所需要最基本的动态链接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。

  • /lost+found

一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

  • /etc

所有系统管理所需要的配置文件和子目录。my.conf

  • /usr

用户的很多应用程序和文件都放在这个目录下。

  • /bin

是Binary的缩写,这个目录存放着经常使用的命令

  • /sbin (usr/sbin、/usr/local/sbin)

sbin就是per user的意思,这里存放的是系统管理员使用的系统管理程序

  • /home

存放普通用户的主目录,在Linux中的每个用户都有一个自己的目录,一般该目录一用户的账号名命名

  • /root

该目录为系统管理员,超级权限者的用户目录

  • /boot

存放的启动Linux时使用的一些核心文件,包括一些链接文件和镜像文件

  • /proc

虚拟目录,是系统内存的映射,访问这个目录来获取系统信息。

  • /srv

service 的缩写,该目录是存放一些服务启动之后需要提取的数据

  • /sys

Linux2.6内核的一个很大变化,该目录安装了2.6内核中新出现的一个文件系统

  • /tmp

存放临时文件

  • /dev

类似于 windows的设备管理器,把所有的硬件用文件的形式存储

  • /media

Linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。

  • /mnt

系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了。d:/ myshare

  • /opt

这是给主机额外安装软件所摆放的目录。如安装 ORACLE数据库就可放到该目录下。默认为空。

  • /usr/local

这是另个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序。

  • /var

这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件。

  • /selinux [security-enhanced linux] 类似 360

Selinux是一种安全子系统,它能控制程序只能访同特定文件。

登录系统后,在当前命令窗口下输入命令:

 ls /

在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。

/etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。

/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在 /bin/ls 目录下的。

值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而/sbin, /usr/sbin 则是给 root 使用的指令

/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下,另外 mail 的预设放置也是在这里。

Linux用户和用户组

用户管理概述

Linux是一个多用户多任务的操作系统。

用户账号和用户组

【Linux常用指令】用户管理_第2张图片

用户概念

通过前面对Linux 多用户的理解,我们明白Linux 是真正意义上的多用户操作系统,所以我们能在Linux系统中建若干用户(user)

用户组概念

用户组(group)就是具有相同特征的用户(user)的集合体;比如有时我们要让多个用户具有相同的权限,比如查看、修改某一文件或执行某个命令,这时我们需要用户组,我们把用户都定义到同一用户组,我们通过修改文件或目录的权限,让用户组具有一定的操作权限,这样用户组下的用户对该文件或目录都具有相同的权限,这是我们通过定义组和修改文件的权限来实现的;

Linux用户和组的关系

用户和用户组的对应关系有以下 4 种:

  1. 一对一:一个用户可以存在一个组中,是组中的唯一成员;
  2. 一对多:一个用户可以存在多个用户组中,此用户具有这多个组的共同权限;
  3. 多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限;
  4. 多对多:多个用户可以存在多个组中,也就是以上 3 种关系的扩展。

Linux用户管理

【Linux常用指令】用户管理_第3张图片

Linux 系统的管理员之所以是 root,是因为该用户的身 份号码即 UID的数值为 0,UID 就相当于我们的身份证号码一样具有唯一性,因此可通过用户的 UID 值来判断用户身份。

  • 管理员 UID 为 0:系统的管理员用户。
  • 系统用户 UID 为 1~999: Linux 系统为了避免因某个服务程序出现漏洞而被黑客提 权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏 范围。
  • 普通用户 UID 从 1000 开始:是由管理员创建的用于日常工作的用户。 需要注意的是,UID 是不能冲突的,而且管理员创建的普通用户的 UID 默认是从 1000 开始的(即使前面有闲置的号码)。

添加用户 useradd

语法:

useradd (选项)(参数)

选项

-d 指定用户的家目录(默认为/home/username)

-e 账户的到期时间,格式为 YYYY-MM-DD.

-u 指定该用户的默认 UID

-g 指定一个初始的用户基本组(必须已存在)

-G 指定一个或多个扩展用户组

-N 不创建与用户同名的基本用户组

-s 指定该用户的默认 Shell 解释器

参数

用户名:要创建的用户名。

示例 1

下面我们创建一个普通用户并指定家目录的路径、用户的 UID 以及 Shell 解释器。在下 面的命令中,请注意/sbin/nologin,它是终端解释器中的一员,与 Bash 解释器有着天壤之别。 一旦用户的解释器被设置为 nologin,则代表该用户不能登录到系统中:

[root@linux *]# useradd -d /home/linux -u 8888 -s /sbin/nologin linuxprobe
[root@linux *]# id linuxprobe
uid=8888(linuxprobe) gid=8888(linuxprobe) groups=8888(linuxprobe)

修改用户 usermod

有些时候不小心在useradd的时候加入了错误的设定数据,此时我们当然可以直接到/etc/passwd或/etc/shadow中去修改相对应字段的数据。

语法

usermod (选项) (参数)

选项:

-c<备注>:修改用户帐号的备注文字;

-d<登入目录>:修改用户登入时的目录;

-e<有效期限>:修改帐号的有效期限;

-f<缓冲天数>:修改在密码过期后多少天即关闭该帐号;

-g<群组>:修改用户所属的群组;

-G<群组>;修改用户所属的附加群组;

-l<帐号名称>:修改用户帐号名称;

-L:锁定用户密码,使密码无效;

-s:修改用户登入后所使用的shell;

-u:修改用户ID;

-U:解除密码锁定。

示例1

来看一下账户 linuxprobe 的默认信息:

id linuxprobe
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe) 

然后将用户 linuxprobe 加入到 root 用户组中,这样扩展组列表中则会出现 root 用户组的 字样,而基本组不会受到影响:

[root@linux *]# usermod -G root linuxprobe
[root@linux *]# id linuxprobe
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root) 

再来试试用-u 参数修改 linuxprobe 用户的 UID 号码值。除此之外,我们还可以用-g 参数 修改用户的基本组 ID,用-G 参数修改用户扩展组 ID。

[root@linuxprobe *]# usermod -u 8888 linuxprobe
[root@linuxprobe *]# id linuxprobe
uid=8888(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root) 

用户账号口令管理passwd

passwd 命令用于修改用户密码、过期时间、认证信息等。

语法

passwd (选项) (参数)

选项:

-d:删除密码,仅有系统管理者才能使用;

-f:强制执行;

-k:设置只有在密码过期失效后,方能更新;

-l:锁住密码;

-s:列出密码的相关信息,仅有系统管理者才能使用;

-u:解开已上锁的帐号。

示例1

用root帮linuxpro修改密码

passwd linuxpro

示例2

假设您有位同事正在度假,而且假期很长,那么可以使用 passwd 命令禁止该用户登录系统,等假期结束回归工作岗位时,再使用该命令允许用户登录系统,而不是将其删除。 这样既保证了这段时间内系统的安全,也避免了频繁添加、删除用户带来的麻烦。

[root@linux *]# passwd -l linuxprobe
Locking password for user linuxprobe.
passwd: Success
[root@linux *]# passwd -S linuxprobe
linuxprobe LK 2017-12-26 0 99999 7 -1 (Password locked.)
[root@linux *]# passwd -u linuxprobe
Unlocking password for user linuxprobe.
passwd: Success
[root@linux *]# passwd -S linuxprobe
linuxprobe PS 2017-12-26 0 99999 7 -1 (Password set, SHA512 crypt.)

删除用户 userdel

userdel 命令用于删除用户

语法:

userdel [选项] 用户名

选项:

-f 强制删除用户

-r 同时删除用户及用户家目录

这个命令的目的删除用户,与它相关的文件有:

  1. /etc/passwd
  2. /etc/shadow
  3. /home/username

语法:

[root@localhost*]#userdel [-r] username

参数:

-r : 连同用户的家目录也一起删除。

示例1

下面使用 userdel 命令将 linuxprobe 用户删除,其操作如下:

[root@linux *]# id linuxprobe
uid=8888(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root)
[root@linux *]# userdel -r linuxprobe
[root@linux *]# id linuxprobe
id: linuxprobe: no such user 

Linux用户组管理

添加新组groupadd


语法

groupadd (选项) (参数)

选项

-g:指定新建工作组的id;

-r:创建系统工作组,系统工作组的组ID小于500;

-K:覆盖配置文件“/ect/login.defs”;

-o:允许添加组ID号不唯一的工作组。

示例1

建立一个新组,并设置组ID加入系统:

groupadd -g 334 bigdata

修改群组groupmod


语法

groupmod(选项)(参数)

选项

-g<群组识别码>:设置欲使用的群组识别码;

-o:重复使用群组识别码;

-n<新群组名称>:设置欲使用的群组名称。

示例1

把建立bigdata组改为bigdata2并设置GID改为506

groupmod -g 506 -n bigdata2 bigdata

删除群组groupdel

x


语法:

groupdel groupname

Linux超级用户与伪用户

Linux下用户分为三类:超级用户、普通用户、伪用户

  1. 超级用户:用户名为root,具有一切管理权限,UID为0,可以创建多个管理员。
  2. 普通用户:在默认情况下,普通用户UID是介于500*6000;
  3. 伪用户:这些用户的存在是为了方便系统管理,满足相应的系统进程对文件属主的要求。伪用户不能够登录,他的ID值介于1*499。

用户身份切换

由于超级权限在系统管理中的不可缺少的重要作用,为了完成系统管理任务,必须用到超级权限。

su

su命令就是切换用户的工具。

语法

su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]]

参数说明

  • -c command 或 --command=command 变更为帐号为 USER 的使用者并执行指令(command)后再变回原来使用者
  • - -l 或 --login 这个参数加了之后,就好像是重新 login 为该使用者一样,大部份环境变数(HOME SHELL USER等等)都是以该使用者(USER)为主,并且工作目录也会改变,如果没有指定 USER ,内定是 root

示例1

[root@linux *]# id
uid=0(root) gid=0(root) groups=0(root)
[root@linux *]# su - linuxprobe
Last login: Wed Jan 4 01:17:25 EST 2017 on pts/0
[linuxprobe@linuxprobe *]$ id
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe) context=unconfined_
u:unconfined_r:unconfined_t:s0-s0:c0.c1023 

注意:

上面的 su 命令与用户名之间有一个减号(-),这意味着完全切 换到新的用户,即把环境变量信息也变更为新用户的相应信息,而不是保留原始的信息。强 烈建议在切换用户身份时添加这个减号(-)。

sudo

Sudo 的全称为:super user do。 顾名思义:干超级用户才能干的事!所以Sudo最常用的功能就是提升一个命名的执行权限。

语法:

sudo [参数] 命令名称

参数:

-h 列出帮助信息

-l 列出当前用户可执行的命令

-u 用户名或 UID 值 以指定的用户身份执行命令

-k 清空密码的有效时间,下次执行 sudo 时需要再次进行密码验证

-b 在后台执行指定的命令

-p 更改询问密码的提示语

总结

sudo 命令具有如下功能:

  • 限制用户执行指定的命令:
  • 记录用户执行的每一条命令;
  • 配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数;
  • 验证密码的后 5 分钟内(默认值)无须再让用户再次验证密码。

编辑配置文件命令: visudo 来配置用户权限。

按照下 面的格式将第 99 行(大约)填写上指定的信息:

谁可以使用 允许使用的主机=(以谁的身份) 可执行命令的列表

注意

编辑sudo的配置文件/etc/sudoers是一般不要直接使用vi(vi /etc/sudoers)去编辑,因为sudoers配置有一定的语法,直接用vi编辑保存系统不会检查语法,如有错也保存了可能导致无法使用sudo工具,最好使用visudo命令去配置。虽然visudo也是调用vi去编辑,但是保存时会进行语法检查,有错会有提示。

示例1

配置linux拥有root的权限

visudo
linux ALL=(ALL) ALL

示例2

在每次执行 sudo 命令后都会要求验证一下密码。

[root@location opt]$ touch a.info
#切换用户
[linux@location *]# su linux
#删除a.info文件
[linux@location *]# rm -rf a.info
rm: cannot remove ‘a.info/’: Permission denied
[linux@location *]# sudo rm -rf a.info

这样,当切换到普通用户后再执行命令时,就不用再频繁地验证密码了,我们在日常工 作中也就痛快至极了。

visudo
linux ALL=NOPASSWD:  ALL 

你可能感兴趣的:(Linux,git,linux,运维,服务器,开发语言,java)