[Linux修炼]Linux用户与权限(一)

1,208 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第17天,点击查看活动详情

前言

      本文就来分享一波笔者对于Linux下用户和权限的学习经验和心得,本篇系第一篇。

      笔者水平有限,难免存在纰漏,欢迎指正交流。

Linux用户与权限(一)

Linux用户概念

      Linux下有两种用户:超级用户(root)、普通用户。

      超级用户:可以在linux系统下做任何事情,不受限制(root用户)

      普通用户:只能在linux下做有限的事情。

      超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。

      命令: su [用户名] 功能:切换用户。

      例如,要从root用户切换到普通用户user,则使用 su user,不需要密码。

      要从普通用户user切换到root用户则使用 su(不切换路径)或su -(重新登陆到root用户),需要输入密码。

      sudo 指令输入当前普通用户的密码,然后可以不切换用户而以root用户身份执行指令,可以短暂提权。只要带sudo,任何指令都可以root身份执行。不过要注意,这个是让普通用户短暂提权到root用户权限,对root用户没用。

      如果执行失败了,说明当前系统不相信你这个用户,需要将当前用户添加到/etc/sudoers中。就相当于黑名单和白名单,未添加到白名单的话就是处在黑名单,就不给你提权的权限。

      sudo的意义在于给受信任的用户提供最少的执行障碍。

      既然信任了,为什么不直接给root账户呢?因为要留一手,为了更好地管理与监管用户。

添加与删除用户

adduser 和 useradd 的区别

      对于 Debian 或 Ubuntu ,主要的区别在使用方式上:

  • adduser是一个 perl 脚本,通过交互式菜单设定一些用户参数。在输入adduser 用户名后,会自动创建用户主目录(并复制/etc/skel目录下的文件)、指定系统 shell,提示输入用户密码,很简单的就添加了一个标准的普通用户。
  • useradd是一个指令,如果不使用任何选项,创建的用户将无密码、无主目录、没有指定 shell。如果你需要正常使用这个账户,就还需要设置密码、创建家目录等额外操作。

      对于 CentOS 来说是没有区别的,adduser 通过符号链接指向 useradd,即 Cen­tOS 只有 useradd

      由于我这里用的是CentOS7,所以就只演示useradd。

使用 useradd 添加用户

      前面提到,useradd 如果不使用任何选项,创建的用户将无密码、无主目录、没有指定 shell。为了和 adduser 一样添加一个标准的普通用户就需要指定选项,或者手动进行额外操作,这样添加的用户才能正常使用。

      所以对于 useradd 添加标准的普通用户有使用选项不使用选项两种方式。

使用选项

      以添加用户名为 p3terx 的用户为例子,输入命令添加用户、添加用户目录、指定 bash 为 shell

 useradd -m -s /bin/bash p3terx

-m 自动创建用户的家目录,并将/etc/skel中的文件复制到家目录中

-s 指定用户登入后所使用的 shell

      然后对该用户设置密码,输入命令后会提示输入两次密码

使用passwd设置密码

基本操作

      passwd 命令的基本格式如下:

 passwd [选项] 用户名
  • 如果只省略“选项”参数时可以设置指定用户的密码
  • 如果省略“选项”和“用户名”时可以设置当前用户的密码

      例如,我们使用 root 账户修改 lamp 普通用户的密码,可以使用如下命令:

 [root@VM-8-7-centos ~]#passwd lamp
 Changing password for user lamp.
 New password: <==直接输入新的密码,但屏幕不会显示(因为密码被保密)
 BAD PASSWORD: it is WAY too short <==密码太简单或过短的错误!这里只是警告信息,输入的密码依旧能用Retype new password: <==再次验证输入的密码,再输入一次即可
 passwd: all authentication tokens updated successfully. <==提示修改密码成功

      注意,普通用户只能使用 passwd 命令修改自己的密码,而不能修改其他用户的密码(root用户改谁的都可以)。

      与使用 root 账户修改普通用户的密码不同,普通用户修改自己的密码需要先输入自己的旧密码,只有旧密码输入正确才能输入新密码。不仅如此,此种修改方式对密码的复杂度有严格的要求,新密码太短、太简单,都会被系统检测出来并禁止用户使用。

passwd 命令还提供了一些选项,用于实现不同功能:

  • -S:查询用户密码的状态,也就是 /etc/shadow 文件中此用户密码的内容。仅 root 用户可用。
  • -l:暂时锁定用户,该选项会在 /etc/shadow 文件中指定用户的加密密码串前添加 "!",使密码失效,仅 root 用户可用。
  • -u:解锁用户,和 -l 选项相对应,也是只能 root 用户使用。
  • --stdin:可以将通过管道符输出的数据作为用户的密码。主要在批量添加用户时使用。
  • -n 天数:设置该用户修改密码后,多长时间不能再次修改密码,也就是修改 /etc/shadow 文件中各行密码的第 4 个字段。
  • -x 天数:设置该用户的密码有效期,对应 /etc/shadow 文件中各行密码的第 5 个字段。
  • -w 天数:设置用户密码过期前的警告天数,对于 /etc/shadow 文件中各行密码的第 6 个字段。
  • -i 日期:设置用户密码失效日期,对应 /etc/shadow 文件中各行密码的第 7 个字段。

【例1】

      查看用户密码的状态

 [root@VM-8-7-centos ~]# passwd -S lamp
 lamp PS 2022-10-17 99999 7 -1 (Password set, SHA512 crypt.)
 ​
 #上面这行代码的意思依次是:用户名(lamp) 密码(PS) 设定时间(2022-10-17) 密码修改间隔时间(0) 密码有效期(99999) 警告时间(7) 密码不失效(-1) 密码已使用(Password set, SHA512 crypt.)

      "-S"选项会显示出密码状态,这里的密码修改间隔时间、密码有效期、警告时间、密码宽限时间其实分别是/etc/shadow 文件的第四、五、六、七个字段的内容。 当然,passwd 命令是可以通过命令选项修改这几个字段的值的,例如:

 #修改 lamp的密码,使其具有 60 天变更、10 天密码失效
 [root@VM-8-7-centos ~]# passwd -x 60 -i 10 lamp
 [root@VM-8-7-centos ~]# passwd -S lamp
 lamp PS 2022-10-17 0 60 7 10 (Password set, SHA512 crypt.)

【例2】

 #锁定 lamp 用户
 [root@VM-8-7-centos ~]# passwd -l lamp
 Locking password for user lamp.
 passwd:Successg
 #用"-S"选项査看状态
 [root@VM-8-7-centos ~]# passwd -S lamp
 lamp LK 2022-10-17 0 99999 7 -1 (Password locked.)#很清楚地提示密码已被锁定
 [root@VM-8-7-centos ~]# grep "lamp" /etc/shadow
 lamp:!! $6$ZTq7o/9o $lj07iZ0bzW.D1zBa9CsY43d04onskUCzjwiFMNt8PX4GXJoHX9zA1S C9.i Yzh9LZA4fEM2lg92hM9w/p6NS50.:15711:0:99999:7:::
 #可以看到,锁定其实就是在加密密码之前加入了"!!",让密码失效而已

      暂时锁定 lamp 用户后,此用户就不能登录系统了。那么,怎么解锁呢?也一样简单,使用如下命令即可:

 #解锁 lamp 用户
 [root@VM-8-7-centos ~]# passwd -u lamp
 Unlocking password for user lamp.
 passwd:Success
 [root@VM-8-7-centos ~]# passwd -S lamp
 lamp PS 2022-10-17 0 99999 7 -1 (Password set, SHA512 crypt.)
 #可以看到,锁定状态消失
 [root@VM-8-7-centos ~]# grep "lamp" /etc/shadow
 lamp: $6$ZTq7cV9o $lj07iZ0bzW.D1zBa9CsY43d04onskUCzjwiFMNt8PX4GXJoHX9zA1S C9.iYz h9LZA4fEM2lg92hM9w/p6NS50.:15711:0:99999:7:::
 #密码前面的 "!!" 删除了

      可以用下面命令查看所有用户:

image-20221002110438591

不使用选项

      在不使用选项的情况下,添加一个标准普的通用户的过程相总共有 6 个步骤,略显麻烦,也没必要这样操作。但可以从中了解添加一个用户具体做了哪些事情,对解决一些问题有参考价值。

  1. 以添加用户名为p3terx的用户为例子,输入命令添加用户
 useradd p3terx
  1. 设置密码
 passwd p3terx
  1. 创建家目录
 mkdir /home/p3terx
  1. /etc/skel目录下的文件复制到该用户目录
 cp -r /etc/skel/. /home/p3terx
  1. 更改家目录归属
 chown -R p3terx:p3terx /home/p3terx
  1. 指定 Shell 为/bin/bash
 usermod -s /bin/bash p3terx

删除用户

      如果因为错误的方式添加了用户,而不知道如何解决,可以删除这个用户。

      以删除 p3terx 这个用户为例子,首先终结该用户所有进程

 pkill -u p3terx

      然后输入删除命令

 userdel -r p3terx

-r 表示删除用户的同时,将其宿主目录和系统内与其相关的内容删除。

什么是权限

      人之间在各种方面和各种事情上不可避免的存在等级差别,不同等级的人具有不同的权限,权限可以拆分为权和限,权在于等级高的可以有更多的权利干更多的事情,而限在于等级低的则不具备这一系列的权利,也干不了一些事情,

      权限是约束人的(个人或群体),同时也和目标对象是否具有某些属性(业务)有关,比如你能在音乐app上刷算法题吗?即使你是vip也不能吧。

      事物权限 = 人 + 事物属性

      我们想一想,人具有某种权限是因为人本身么?你能在视频app上观看会员电影是因为你是某某某么?不是的,因为你是该app的vip才能够具有这种权限,也就是说,权限是落实到某种角色上的,人只要具有某种角色属性,就具有了对应的权限。

      拿文件举例:文件权限 = 人 + 文件属性

image-20220930143844415

      简而言之,权限即一件事情是否允许被谁来做。

      为什么要有权限?——构造一种层次结构,便于对用户的管理,以便系统进行安全管理。


以上就是本文全部内容,感谢观看,你的支持就是对我最大的鼓励~

src=http___c-ssl.duitang.com_uploads_item_201708_07_20170807082850_kGsQF.thumb.400_0.gif&refer=http___c-ssl.duitang.gif