账户和组

用户和组的简介

Linux系统对账号与组的管理是通过ID号来实现的。用户ID号叫UID,组ID号叫GID。其中:

  • UID=0是超级管理员,也就是root账号
  • UID=1~499被系统所预留
  • 个人创建的用户的UID会从500开始算起

Linux操作系统中的组分为基本组和附加组,一个用户同一时刻只能加入同一个基本组,但可以同时加入多个附加组。默认在创建用户时,系统会自动创建同名的组,并设置用户加入该组。

查看用户ID的命令是:id
用法:id 用户名

创建用户和组

创建用户命令useradd
常用选项:

  • -c 设置账号描述信息,一般为账号全称
  • -d 设置用户家目录,默认/home/用户名
  • -g 设置账户基本组
  • -G 设置账户附加组,多个附加组之间用逗号隔开
  • -s 设置账户登录Shell,默认为bash
  • -M 不创建用户家目录,一般与-s连用
  • -u 指定账号UID

示例1:创建普通用户mori,以及对应的组

$ useradd mori
$ id mori
uid=1003(mori) gid=1003(mori) 组=1003(mori)

示例2:创建普通用户syushin,账户家目录为/home/syushin,账户基本组为root,附加组为mori

$ useradd -d /home/syushin -g root -G mori syushin
$ id syushin
uid=1004(syushin) gid=0(root) 组=0(root),1003(mori)

示例3:创建无法登录系统,且没有家目录的用户user1

$ useradd -s /sbin/nologin -M user1

创建组命令:groupadd
选项:-g 设置组ID号
示例:

$ groupadd laowan #创建组laowan
$ groupadd -g 2000 xiaoming #创建xiaoming组,组ID为2000的

修改用户和组

修改用户密码命令:passwd
常用选项:

  • -l 锁定账户,仅root用户可用
  • --stdin从文件或者管道读取密码
  • -u 解锁账户
  • -d快速清空用户密码,仅root可用

示例:

$ passwd mori
更改用户 mori 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
$ echo “1234qwer” | passwd --stdin mori #通过管道指定用户mori的密码
$ passwd -l mori #锁定用户mori
$ passwd -u mori #解锁用户mori

修改用户信息命令usermod
选项:

  • -d 修改用户家目录
  • -e 修改用户失效日期
  • -g 修改用户所属基本组
  • -G 修改用户所属附加组
  • -s 修改用户登录shell
  • -u 修改用户UID

示例:

$ usermod -d /home/harucha haru
$ usermod -e 2019-2-28 haru # 设置haru用户失效日期为2019-2-28
$ usermod -g root haru
$ usermod -s /bin/bash haru
$ usermod -u 1314 haru #修改haru用户的ID为1314

删除用户和组

删除用户命令userdel
选项:-r 删除账户及相关文件
示例:

$ userdel mori
$ userdel -r syushin # 删除组syushin,并删除/home下的syushin目录

删除组命令groupdel
示例:groupdel mori

与用户相关的配置文件

$ ll /etc/passwd /etc/shadow /etc/group /etc//gshadow
-rw-r--r--. 1 root root  718 2月  28 14:44 /etc/group
----------. 1 root root  573 2月  28 14:44 /etc//gshadow
-rw-r--r--. 1 root root 1684 2月  28 14:44 /etc/passwd
----------. 1 root root 1081 2月  28 14:55 /etc/shadow

/etc/passwd配置文件详解

$ head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash  # 一一对应的说明如下
用户名:密码占位符:账户UID:组GID:附加信息:用户家目录:用户登录的shell

常见面试题
创建3个用户user1,user2,user3,并设置密码为123456,禁止使用for,while循环。

$ echo user{1..3}|xargs -n1 -exec useradd # 创建用户
$ echo "123456" | passwd --stdin user1 user2 user3 # 设置密码

su命令

su命令的主要作用是让你可以在已登录的会话中切换到另外一个用户。这个工具可以让你在不登出当前用户的前提下登录为另外一个用户。

这个命令经常被用于切换到超级用户或 root 用户,因为工作中经常需要root权限(生产中比较少会直接使用root用户)。切换到root用户可直接输入$ su或者$ su root需要知道root用户的密码。

[root@moli_linux1 ~]$ whoami
root
[root@moli_linux1 ~]$ su mori
[mori@moli_linux1 root]$ whoami
mori
[mori@moli_linux1 root]$
[mori@moli_linux1 root]$ su root
密码:
[root@moli_linux1 ~]$ whoami
root
[root@moli_linux1 ~]$

还有一个命令可用于用户切换,比起su命令就多了一个-,这个命令就是su -su命令和su -命令有什么区别?

  • su命令在切换到用户之后仍然保持旧的(或者说原始用户的)环境
  • su -命令则是创建一个新的环境(由 root 用户 ~/.bashrc文件所设置的环境),相当于使用用户正常登录(从登录屏幕登录)。

举个例子:

[root@moli_linux1 ~]$ whoami
root
[root@moli_linux1 ~]$ su mori
[mori@moli_linux1 root]$ pwd
/root # 环境依旧是root用户的环境
[mori@moli_linux1 root]$ exit
exit
[root@moli_linux1 ~]$ su - mori # 这里使用了 su -
上一次登录:二 3月  5 10:35:16 CST 2019pts/0 上
[mori@moli_linux1 ~]$ pwd
/home/mori

上面命令,首先使用root用户切换到mori用户,使用su命令,切换后当前目录仍在/root目录下,之后退出使用su - mori切换用户,切换后目录在/home/mori目录下。

sudo命令

sudo命令允许一个已授权用户以超级用户或者其它用户的角色运行一个命令。
sudo命令与su命令有什么区别?

  • sudo命令需要输入当前用户的密码,而su命令需要输入root密码。
  • sudo命令只允许使用提升的权限运行单个命令,而su命令会开启一个新的shell,同时允许使用root权限运行多个命令。
  • sudo相比较su会灵活很多,因为你可以限制sudo用户可以使用哪些命令。

sudo命令配置文件-sudoers
centos7中可直接使用命令$ visudo打开sudoers配置文件。
打开文件后,找到红线配置的这一行。这一行的意思是,允许root用户在这个操作系统的任何地方允许任何命令。
最后一个ALL为任何命令,我们可以自定义用户使用什么命令。

比如我在root这一行下面添加一行新的配置如下:

mori    ALL=(ALL)       /usr/bin/ls, /usr/bin/cat

这一行表示,允许mori用户使用sudo命令执行ls和cat命令。配置后执行wq退出即可,保存成功sudoers文件就自动生效了。

验证:正常情况下,我们使用su切换到mori用户,然后对/root目录执行ls命令,会提示权限不够,但是使用sudo之后就会获得root用户的权限而能够执行ls命令。

[root@moli_linux1 ~]$ su mori
[mori@moli_linux1 root]$ ls # 无法执行ls命令
ls: 无法打开目录.: 权限不够
[mori@moli_linux1 root]$ sudo ls # sudo提升权限我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:#1) 尊重别人的隐私。#2) 输入前要先考虑(后果和风险)。#3) 权力越大,责任越大。[sudo] mori 的密码: # 第一次执行sudo命令需要输入当前用户密码
192.168.229  anaconda-ks.cfg  git_data    server    shell-100  test-find[mori@moli_linux1 root]$ sudo ls # 成功执行
192.168.229  anaconda-ks.cfg  git_data    server    shell-100  test-find

当第一次使用sudo的时候需要使用密码,如何才能不用输入密码就能使用sudo获取权限呢?只需要在上面配置mori用户的配置里添加:NOPASSWD:即可。这样就可以使用户在用sudo命令时不用键入密码。

mori    ALL=(ALL)       NOPASSWORD: /usr/bin/ls, /usr/bin/cat

这里需要注意一下格式,NOPASSWD之后需要有分号,每个命令之间用逗号+空格隔开。命令需要使用绝对路径。

限制root远程登录

生产环境下,为了提高系统安全性,通常是限制root用户远程连接登录的,通常是使用秘钥。那么怎么实现限制root用户登录呢?在ssh服务的配置文件中配置。
1、编辑ssh配置文件

$ vim /etc/ssh/sshd_config

2、找到#PermitRootLogin yes

PermitRootLogin no
# 将#PermitRootLogin yes修改为PermitRootLogin no


3、重启shh服务

$ systemctl restart sshd.service

这样使用root连接服务器的时候就会失败了。

我们限制了root用户登录,但是当普通用户需要使用到root权限的时候怎么办呢?
解决:使用sudo命令,在sudoers文件中设置普通用户有执行su命令的权限,可以使用户su到root用户下。
第一、编即sudo配置文件,添加配置

# 这一行的配置相当于创建一个组,组名为USERS,这个组有三个用户mori,userA,userB
User_Alias USERS = mori, userA, userB# 然后可以用组名来设置命令权限,只有组内的用户都可以使用sudo来执行su命令
USERS   ALL=(ALL)       NOPASSWD: /usr/bin/su

第二、普通用户登录服务器,执行sudo命令获取su命令的执行权限,再切换到root用户下

[mori@moli_linux1 ~]$ sudo su -
上一次登录:二 3月  5 10:31:47 CST 2019pts/0 上
最后一次失败的登录:二 3月  5 12:42:11 CST 2019从 192.168.30.1ssh:notty 上
最有一次成功登录后有 1 次失败的登录尝试。
[root@moli_linux1 ~]$ # 登录成功! 

Linux中用户管理相关推荐

  1. linux中 用户管理命令,Linux中的常用用户和用户组管理命令

    who:查看当前服务器所有正在登陆中的用户,显示tty表示本地登录,pts表示远程终端.这个命名只能显示简单的登录信息,如果想要查看更为详细的登录信息,使用w命令. w命令除了显示who命令的内容外, ...

  2. Linux中用户的简介与管理

    女主宣言 众所周知,linux是一个多用户.多任务的操作系统.那么linux是如何区分和认证用户的,系统对每个用户的授权是如何管理的,出现问题时是如何追朔每个用户在系统内的操作记录,这些就涉及到了li ...

  3. Linux中用户与组群管理

    Linux是一个多用户操作系统,可以多个用户同时使用同一计算机,不同的用户对相同的资源拥有不同的使用权限,将同一类的用户归于一个组群,可以利用组群权限来控制组群成员用户的权限. Linux中用户分为三 ...

  4. linux 下用户管理

    linux 下用户管理 一.用户的分类 1.超级用户:root UID=0 2.系统用户:不需要登录系统,对应用程序服务,主要维护系统的正常运行:UID = 1 ~ 499(RHEL7 = 1 ~ 9 ...

  5. Linux 之用户管理与文件权限

    Linux 之用户管理与文件权限 一. 1.查看系统版本    uname       uname -a      uname -r      uname -m 2.特点 :              ...

  6. linux中用户组和用户,linux中用户和用户组

    一.用户和组原理 一个用户可以属于多个组,一个组有多个用户 在Linux中操作系统必须依赖组和用户进行管理 二.与用户和组相关的配置文件 1.组相关配置文件 1)/etc/group :管理用户组信息 ...

  7. Linux入门到精通:第 1 关——创建/删除新用户(第二章:Linux之用户管理)

    第 1 关--创建/删除新用户 任务描述 相关知识 Linux创建用户命令 案例演示 Linux删除用户命令 案例演示 编程要求 评测说明 任务描述 恭喜你已经完成了Linux入门的实训,接下来让我们 ...

  8. Linux入门到精通:第 1 关——创建/删除用户组(第二章:Linux之用户管理)

    第 1 关--创建/删除用户组 任务描述 相关知识 Linux创建用户组命令 案例演示一 案例演示二 Linux删除用户组命令 案例演示一 编程要求 评测说明 任务描述 恭喜你已经完成了Linux之用 ...

  9. Linux 基础 - 用户管理

    Linux 基础 - 用户管理 Linux 用户管理 查看当前用户 ID:id 查看当前所属组:groups 查看当前登录用户:who 查看当前登录用户详细信息:w 调查用户:finger 新增用户: ...

最新文章

  1. Android实现导航菜单随着ListView联动,当导航菜单遇到顶部菜单时停止在哪里,并且listview仍能滑动...
  2. python中重要的模块asyncio
  3. python做平面设计有前途吗_现在学平面设计还有发展前景吗?
  4. 【windows】python安装小结
  5. 领域驱动设计之PHP实现
  6. nacos 公共_SpringCloud配合注册中心Nacos的使用
  7. 在村镇银行存款,银行先把利息全给了,这种存款安全吗?
  8. Qt笔记-解决QSocketNotifier: Multiple socket notifiers for same socket xxx and type Read问题
  9. 线程同步 互斥量(mutex) Linux函数
  10. 775针服务器cpu性能排行,775针cpu排行榜说明
  11. opencv 特征提取 -SIFT
  12. python计算sinx的程序_Python Tensorflow sin()用法及代码示例
  13. [lr] 基本色调调整和色调曲线
  14. [转] Android Miracast投屏入门
  15. 精读《设计模式 - Prototype 原型模式》
  16. C# Remoting的基础介绍
  17. Twitter的推荐系统开源了,Twitter的推荐系统是什么样的呢?Twitter推荐系统的架构说明
  18. 模拟手机通讯录联系人功能
  19. 第一家关店的盒马鲜生,大数据眼光看新零售的转型之路
  20. php yii2 搜索功能,Yii2.0全站搜索功能上线

热门文章

  1. IOS开发基础知识--碎片45
  2. 面对对象的程序设计初探总结
  3. 两种获取connectionString的方式
  4. WCF中的ServiceHost初始化两种方式
  5. 重新认识vue之事件阻止冒泡
  6. 大数据教程之大数据处理流程
  7. Garbage First
  8. Selenium + Nightwatch 自动化测试环境搭建
  9. AbstractBeanDefinition:lenientConstructorResolution属性源码分析
  10. Linux 计划任务 访问网页