编辑
2023-03-08
Linux学习
00
请注意,本文编写于 561 天前,最后修改于 558 天前,其中某些信息可能已经过时。

目录

用户身份与能力
useradd命令
groupadd命令
usemod命令
passwd命令
userdel命令
文件权限与归属
文件的特殊权限
SUID
SGID
SBIT
总结
文件的隐藏属性
chattr命令
lsattr命令
文件访问控制列表(ACL)
setfacl 命令
getfacl 命令
su命令与sudo服务

用户身份与能力

Linux系统中,用户身份有如下: 管理员 UID 为 0:系统的管理员用户。 系统用户 UID 为 1~999: Linux 系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。 普通用户 UID 从 1000 开始:是由管理员创建的用于日常工作的用户。

需要注意的是, UID 是不能冲突的,而且管理员创建的普通用户的 UID 默认是从 1000开始的(即使前面有闲置的号码)。 为了方便管理属于同一组的用户, Linux 系统中还引入了用户组的概念。通过使用用 户组号码( GID, Group IDentification),我们可以把多个用户加入到同一个组中,从而方便为组中的用户统一规划权限或指定任务。另外,在 Linux 系统中创建每个用户时,将自动创建一个与其同名的基本用户组,而且这个基本用户组只有该用户一个人。如果该用户以后被归纳入其他用户组,则这个其他用户组称之为扩展用户组一个用户只有一个基本用户组,但是可以有多个扩展用户组,从而满足日常的工作需要。

useradd命令

useradd 命令用于创建新的用户,格式为“useradd [选项] 用户名”。

参数作用
-d指定用户的家目录(默认为/home/username)
-e账户的到期时间,格式为 YYYY-MM-DD.
-u指定该用户的默认 UID
-g指定一个初始的用户基本组(必须已存在)
-G指定一个或多个扩展用户组
-N不创建与用户同名的基本用户组
-s指定该用户的默认 Shell 解释器

默认存放至/home目录,默认Shell解释器为/bin/bash,默认创建一个同名的基本用户组。

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

上述示例代码,解释器为/sbin/nologin,该解释器是终端解释器的一员,一旦用户的解释器被设置为nologin,则代表该用户不能登录到系统中。

groupadd命令

groupadd 命令用于创建用户组,格式为“groupadd [选项] 群组名”。

[root@linuxprobe ~]# groupadd ronny #ronny为群组名

usemod命令

usermod 命令用于修改用户的属性,格式为“usermod [选项] 用户名”。

参数作用
-c填写用户账户的备注信息
-d -m参数-m 与参数-d 连用,可重新指定用户的家目录并自动把旧的数据转移过去
-e账户的到期时间,格式为 YYYY-MM-DD
-g变更所属用户组
-G变更扩展用户组
-L锁定用户禁止其登录系统
-U解锁用户,允许其登录系统
-s变更默认终端
-u修改用户的 UID

可通过如下命令,查看用户属性。

[root@linuxprobe ~]# id linuxprobe uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe)

注:用户的信息保存在/etc/passwd 文件中,除上述方法外,还可以直接用文本编辑器来修改其中的用户参数项目 。

passwd命令

passwd 命令用于修改用户密码、过期时间、认证信息等,格式为“passwd [选项] [用户名]”。

参数作用
-l锁定用户,禁止其登录
-u解除锁定,允许用户登录
--stdin允许通过标准输入修改用户密码, 如echo "NewPassWord" l passwd --stdin Username
-d使该用户可用空密码登录系统
-e强制用户在下次登录时修改密码
-S显示用户的密码是否被锁定,以及密码所采用的加密算法名称

注:普通用户只能使用 passwd 命令修改自身的系统密码, 而 root 管理员则有权限修改其他所有人的密码。

userdel命令

userdel 命令用于删除用户,格式为“userdel [选项] 用户名”。

参数作用
-f强制删除用户
-r同时删除用户及用户家目录

文件权限与归属

Linux 系统使用了不同的字符来加以区分文件的类型 ,常见的字符如下所示。 -:普通文件 d:目录文件 l:链接文件 b:块设备文件 c:字符设备文件 p:管道文件

文件的读、写、执行权限可以简写为 rwx,亦可分别用数字 4、 2、 1 来表示,文件所有者,所属组及其他用户权限之间无关联。

某个文件的权限为 7 则代表可读、可写、可执行( 4+2+1);权限为 6 则代表可读、可写( 4+2)

现在有这样一个文件,其所有者拥有可读、可写、可执行的权限,其文件所属组拥有可读、可写的权限;而且其他人只有可读的权限。那么,这个文件的权限就是 rwxrw-r--,数字法表示即为 764。

上述权限rwxrw-r--分解为三个部分,rwx为所有者权限可读、可写、可执行;rw-为文件所属组拥有可读、可写的权限;r--为其他人只有可读的权限。

注:查看文件属性信息:ls -l install.log

[root@linuxprobe ~]# ls -l install.log -rw-r--r-- 1 root root 34298 04-02 00:23 install.log #“ - ”代表文件类型;“rw-r--r--”代表访问权限;“1”代表链接数;第一个“root”为所有者,第二个为所属组;“34298”为磁盘占用34298字节;“04-02 00:23”为最近一次修改时间;“install.log”为文件名。

文件的特殊权限

SUID、 SGID 与 SBIT 为特殊权限位。这是一种对文件权限进行设置的特殊功能,可以与一般权限同时使用,以弥补一般权限不能实现的功能。

如果rwx(读 写 执行)第三位有x权限,则rwx(读 写 执行)中的x变为s或者t(SUID,SGID,是s,SBIT是t) 如果rwx(读 写 执行)第三位没有x权限,则rwx(读 写 执行)中的x变为S或者T (SUID,SGID是S,SBIT是T) SUID:u+s SGID:g+s SBIT:o+t

SUID

SUID 是一种对二进制程序进行设置的特殊权限, 可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。

问:passwd文件的属组是root,表示只有root用户可以访问的文件,为什么普通用户依然可以使用该命令更改自己的密码? 答:当普通用户[omd]使用passwd命令的时候,系统看到passwd命令文件的属性有大写s后,表示这个命令的属主权限被omd用户获得,也就是omd用户获得文件/etc/shadow的root的rwx权限

SGID

SGID主要实现如下两种功能: 让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置); 在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)。

SBIT

SBIT( Sticky Bit)特殊权限位(也可以称之为特殊权限位之粘滞位)。 SBIT 特殊权限位可确保用户只能删除自己的文件,而不能删除其他用户的文件。

总结

用户如何添加特殊权限:

setuid(suid): 针对命令和二进制程序的:

chmod u+s h.txt -->添加suid chmod 4777 h.txt -->添加suid #4表示s位 chmod u-s h.txt -->取消suid

setgid(sgid):希望一个目录被多个用户(同属于一个组)共享,同一个组的用户可以处理:

chmod g+s /home/omd/h -->添加sgid chmod 2755 /home/omd/h -->添加sgid #4表示s位 chmod g-s /home/omd/h -->取消sgid

粘滞位(t):作用把一个文件夹的权限都打开,然后共享文件:

chmod o+s h.txt --> 添加粘滞位 chmod o-s h.txt --> 取消粘滞位 chmod 1777 /home/omd –>添加粘滞位 #1表示t位

文件的隐藏属性

chattr命令

chattr 命令用于设置文件的隐藏权限,格式为“chattr [参数] 文件”。

如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加“+参数”,如果想要把某个隐藏功能移出文件,则需要追加“-参数”。

参数作用
i无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而 不能新建或删除文件
a仅允许补充(追加)内容,无法覆盖/删除内容( Append Only)
S文件内容在变更后立即同步到硬盘( sync)
s彻底从硬盘中删除,不可恢复(用 0 填充原文件所在硬盘区域)
A不再修改这个文件或目录的最后访问时间( atime)
b不再修改文件或目录的存取时间
D检查压缩文件中的错误
d使用 dump 命令备份时忽略本文件/目录
c默认将文件或目录进行压缩
u当删除该文件后依然保留其在硬盘中的数据,方便日后恢复
t让文件系统支持尾部合并( tail-merging)
X可以直接访问压缩文件中的内容

例:chattr +a linuxprobe

lsattr命令

lsattr 命令用于显示文件的隐藏权限,格式为“lsattr [参数] 文件”。

文件访问控制列表(ACL)

基于普通文件或目录设置 ACL 其实就是针对指定的用户或用户组设置文件或目录的操作权限。如果针对某个目录设置了 ACL,则目录中的文件会继承其 ACL;若针对文件设置了 ACL,则文件不再继承其所在目录的 ACL。

setfacl 命令

setfacl 命令用于管理文件的 ACL 规则,格式为“setfacl [参数] 文件名称”。

文件的 ACL提供的是在所有者、所属组、其他人的读/写/执行权限之外的特殊权限控制,使用 setfacl 命令 可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制。其中,针对目录文件需要使用-R 递归参数;针对普通文件则使用-m 参数;如果想要删除某个文件的 ACL,则可以使用-b 参数。

如何查看有否设置ACL?

常用的 ls 命令是看不到 ACL 表信息的,但是却可以看到文件的权限最后一个点( .)变成了加号( +) ,这就意味着该文件已经设置了 ACL 了。

例:setfacl -Rm u:linuxprobe:rwx /root

getfacl 命令

getfacl 命令用于显示文件上设置的 ACL 信息,格式为“getfacl 文件名称”。

su命令与sudo服务

su 命令与用户名之间有一个减号( -),这意味着完全切换到新的用户,即把环境变量信息也变更为新用户的相应信息。

例:

[root@linuxprobe ~]# su - linuxprobe Last login: Mon Aug 24 19:27:09 CST 2017 on pts/0

sudo 命令用于给普通用户提供额外的权限来完成原本 root 管理员才能完成的任务,格式为“sudo [参数] 命令名称”。

参数作用
-h列出帮助信息
-l列出当前用户可执行的命令
-u 用户名或 UID 值以指定的用户身份执行命令
-k清空密码的有效时间,下次执行 sudo 时需要再次进行密码验证
-b在后台执行指定的命令
-p更改询问密码的提示语

sudo 命令具有如下功能:

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

当然,如果担心直接修改配置文件会出现问题,则可以使用 sudo 命令提供的 visudo 命令(仅rott用户才可使用)来配置用户权限。这条命令在配置用户权限时将禁止多个用户同时修改 sudoers 配置文件,还可以对配置文件内的参数进行语法检查,并在发现参数错误时进行报错。

在 sudo 命令的配置文件中,按照下面的格式将第 99 行(大约)填写上指定的信息:

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

[root@linuxprobe ~]# visudo 96 ## 97 ## Allow root to run any commands anywhere 98 root ALL=(ALL) ALL 99 linuxprobe ALL=(ALL) ALL

在填写完毕后记得要先保存再退出, 然后切换至指定的普通用户身份, 此时就可以用 sudo-l 命令查看到所有可执行的命令了(下面的命令中,验证的是该普通用户的密码,而不是 root管理员的密码),此时linuxprobe用户即可通过sudo 命令执行所有命令。

注:是每次执行 sudo 命令都要输入一次密码其实也挺麻烦的,这时可以添加 NOPASSWD 参数,使得用户执行 sudo 命令时不再需要密码验证:

例:

[linuxprobe@linuxprobe ~]$ exit logout [root@linuxprobe ~]# whereis poweroff poweroff: /usr/sbin/poweroff /usr/share/man/man8/poweroff.8.gz [root@linuxprobe ~]# visudo ………………省略部分文件内容……………… 96 ## 97 ## Allow root to run any commands anywhere 98 root ALL=(ALL) ALL 99 linuxprobe ALL=NOPASSWD: /usr/sbin/poweroff ………………省略部分文件内容………………
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Gustav

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!