Linux系统中,用户身份有如下: 管理员 UID 为 0:系统的管理员用户。 系统用户 UID 为 1~999: Linux 系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。 普通用户 UID 从 1000 开始:是由管理员创建的用于日常工作的用户。
需要注意的是, UID 是不能冲突的,而且管理员创建的普通用户的 UID 默认是从 1000开始的(即使前面有闲置的号码)。 为了方便管理属于同一组的用户, Linux 系统中还引入了用户组的概念。通过使用用 户组号码( GID, Group IDentification),我们可以把多个用户加入到同一个组中,从而方便为组中的用户统一规划权限或指定任务。另外,在 Linux 系统中创建每个用户时,将自动创建一个与其同名的基本用户组,而且这个基本用户组只有该用户一个人。如果该用户以后被归纳入其他用户组,则这个其他用户组称之为扩展用户组。一个用户只有一个基本用户组,但是可以有多个扩展用户组,从而满足日常的工作需要。
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 [选项] 群组名”。
[root@linuxprobe ~]# groupadd ronny #ronny为群组名
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 [选项] [用户名]”。
参数 | 作用 |
---|---|
-l | 锁定用户,禁止其登录 |
-u | 解除锁定,允许用户登录 |
--stdin | 允许通过标准输入修改用户密码, 如echo "NewPassWord" l passwd --stdin Username |
-d | 使该用户可用空密码登录系统 |
-e | 强制用户在下次登录时修改密码 |
-S | 显示用户的密码是否被锁定,以及密码所采用的加密算法名称 |
注:普通用户只能使用 passwd 命令修改自身的系统密码, 而 root 管理员则有权限修改其他所有人的密码。
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 是一种对二进制程序进行设置的特殊权限, 可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。
问:passwd文件的属组是root,表示只有root用户可以访问的文件,为什么普通用户依然可以使用该命令更改自己的密码?
答:当普通用户[omd]使用passwd
命令的时候,系统看到passwd
命令文件的属性有大写s后,表示这个命令的属主权限被omd用户获得,也就是omd用户获得文件/etc/shadow
的root的rwx权限
SGID主要实现如下两种功能: 让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置); 在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)。
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 [参数] 文件”。
如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加“+参数”,如果想要把某个隐藏功能移出文件,则需要追加“-参数”。
参数 | 作用 |
---|---|
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 [参数] 文件”。
基于普通文件或目录设置 ACL 其实就是针对指定的用户或用户组设置文件或目录的操作权限。如果针对某个目录设置了 ACL,则目录中的文件会继承其 ACL;若针对文件设置了 ACL,则文件不再继承其所在目录的 ACL。
setfacl 命令用于管理文件的 ACL 规则,格式为“setfacl [参数] 文件名称”。
文件的 ACL提供的是在所有者、所属组、其他人的读/写/执行权限之外的特殊权限控制,使用 setfacl 命令 可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制。其中,针对目录文件需要使用-R 递归参数;针对普通文件则使用-m 参数;如果想要删除某个文件的 ACL,则可以使用-b 参数。
如何查看有否设置ACL?
常用的 ls 命令是看不到 ACL 表信息的,但是却可以看到文件的权限最后一个点( .)变成了加号( +) ,这就意味着该文件已经设置了 ACL 了。
例:setfacl -Rm u:linuxprobe:rwx /root
getfacl 命令用于显示文件上设置的 ACL 信息,格式为“getfacl 文件名称”。
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 命令具有如下功能:
当然,如果担心直接修改配置文件会出现问题,则可以使用 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 ………………省略部分文件内容………………
本文作者:Gustav
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!