用户身份与文件权限
--用户身份和能力
--文件权限与归属
--文件的特殊权限
--文件的隐藏权限
--文件访问控制列表
--su命令与sudo服务
linux是一个多用户、多任务的操作系统。
在linux中,用户的UID是唯一的,UID=0,是超级管理员
在centos7 中
--管理员UID=0
--系统用户UID=1~999
--普通用户UID=1000开始
useradd [ ] 用户名 使用该命令创建用户时,默认的用户家目录会是被存放在/home目录中,模式shell解释器为/bin/bash,而且默认会创建 一个与该用户同名的基本用户组 -d 指定用户的家目录(默认为/home/username) -e 账户的到期时间,格式为 YYYY-MM-DD. -u 指定该用户的默认 UID -g 指定一个初始的用户基本组(必须已存在) -G 指定一个或多个扩展用户组 -N 不创建与用户同名的基本用户组 -s 指定该用户的默认 Shell 解释器
如果使用/sbin/nologin,用户不能登录到系统中
[root@iscsi opt]# id yhq123 id: yhq123: no such user [root@iscsi opt]# useradd -d /home/yhq123 -u 9999 -s /sbin/nologin yhq123 [root@iscsi opt]# id yhq123 uid=9999(yhq123) gid=9999(yhq123) groups=9999(yhq123) groupadd [ ] 群组名 [root@iscsi opt]# groupadd yhq123 groupadd: group 'yhq123' already exists [root@iscsi opt]# groupadd yhq121
usermod [ ] 用户名 修改已经创建的用户信息 -c 填写用户账户的备注信息 -d -m 参数-m 与参数-d 连用,可重新指定用户的家目录并自动把旧的数据转移过去 -e 账户的到期时间,格式为 YYYY-MM-DD -g 变更所属用户组 -G 变更扩展用户组 -L 锁定用户禁止其登录系统 -U 解锁用户,允许其登录系统 -s 变更默认终端 -u 修改用户的 UID
用户的信息保存在/etc/passwd中
[root@iscsi opt]# id yhq123 uid=9999(yhq123) gid=9999(yhq123) groups=9999(yhq123) [root@iscsi opt]# usermod -G root yhq123 [root@iscsi opt]# id yhq123 uid=9999(yhq123) gid=9999(yhq123) groups=9999(yhq123),0(root) [root@iscsi opt]# usermod -u 8888 yhq123 [root@iscsi opt]# id yhq123 uid=8888(yhq123) gid=9999(yhq123) groups=9999(yhq123),0(root)
passwd [] [用户名] passwd命令用于修改用户密码、过期时间、认证信息等。 -l 锁定用户,禁止其登录 -u 解除锁定,允许用户登录 --stdin 允许通过标准输入修改用户密码,如 echo "NewPassWord" | passwd --stdin Username -d 使该用户可用空密码登录系统 -e 强制用户在下次登录时修改密码 -S 显示用户的密码是否被锁定,以及密码所采用的加密算法名称 [root@iscsi ~]# passwd yhq123 Changing password for user yhq123. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully. [root@iscsi ~]# passwd -l yhq123 #锁用户 Locking password for user yhq123. passwd: Success [root@iscsi ~]# passwd -S yhq123 yhq123 LK 2020-06-24 0 99999 7 -1 (Password locked.) [root@iscsi ~]# passwd -u yhq123 #解锁用户 Unlocking password for user yhq123. passwd: Success
userdel [] 用户名 用于删除用户,在执行删除操作时,该用户的家目录默认会被保留,可以加-r 将其删除 -f 强制删除用户 -r 同时删除用户及用户家目录 [root@iscsi opt]# id yhq123 uid=8888(yhq123) gid=9999(yhq123) groups=9999(yhq123),0(root) [root@iscsi opt]# userdel -r yhq123 [root@iscsi opt]# id yhq123 id: yhq123: no such user [root@iscsi opt]# ll /home/yhq123 ls: cannot access /home/yhq123: No such file or directory
2 文件权限与归属
linux系统使用不同的字符来区分文件
- 普通文件
d 目录文件
l 链接文件
b 块设备文件
c 字符设备文件
p 管道文件
linux中,每个文件都有所属的所有者和所有组,规定了文件的所有者、所有组以及其他人对文件所拥有的的r、w、x权限
对目录文件来说,“可读”表示能够读取目录内的文件列表;“可写”能够在目录内新增、删除、重命名文件;“可执行”表示能够进入该目录。
文件权限
-rwxrwxrwx
-421 421 421
文件所有者 文件所属组 其他用户
文件的特殊权限
SUIDSGIDSBIT特殊权限位
SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时用于属主的权限(仅对用于执行权限的二进制程序有效)
如:所有用户都可以执行passwd命令来修改自己的密码,用户密码保存在/etc/shadow文件中
[root@iscsi opt]# ll /etc/shadow
---------- 1 root root 1479 Jun 24 15:14 /etc/shadow
该文件的默认权限是000,除了root管理员外,所有用户都没有查看或编辑该文件的权限。
使用passwd命令加上SUID特殊权限位,可以让普通用户临时获得程序所有者的身份,把变更密码的信息写入到/etc/shadow中。
[root@iscsi opt]# ll /bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /bin/passwd
#x变成s,意味着该文件被赋予了SUID权限
如果文件是rw-权限,没有x执行权限,被赋予了SUID后,变成rwS
SGID 主要实现
--让执行者临时拥有所属组的权限(对拥有执行权限的二进制程序进行设置)
--在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)
[root@iscsi opt]# cd /tmp/ [root@iscsi tmp]# mkdir testdir [root@iscsi tmp]# ls -ald testdir/ drwxr-xr-x 2 root root 6 Jun 24 16:03 testdir/ [root@iscsi tmp]# chmod -Rf 777 testdir/ [root@iscsi tmp]# chmod -Rf g+s testdir/ [root@iscsi tmp]# ls -ald testdir/ drwxrwsrwx 2 root root 6 Jun 24 16:03 testdir/ [root@iscsi tmp]# su - hong [hong@iscsi ~]$ cd /tmp/testdir/ [hong@iscsi testdir]$ echo "yhq.abc">test [hong@iscsi testdir]$ ll -al test -rw-rw-r-- 1 hong root 8 Jun 24 16:04 test ##test文件的所属组是root [root@iscsi tmp]# cd testdir/ [root@iscsi testdir]# chmod 760 test [root@iscsi testdir]# ll -l test -rwxrw---- 1 hong root 8 Jun 24 16:04 test chown chmod 用于修改文件属性和权限的常用命令。
SBIT 确保用户只能删除自己的文件 [hong@iscsi tmp]$ echo "abc.123" >test [hong@iscsi tmp]$ ll -al test -rw-rw-r-- 1 hong hong 8 Jun 24 16:18 test [hong@iscsi tmp]$ chmod 777 test [hong@iscsi tmp]$ exit logout [root@iscsi testdir]# su - tang Last login: Wed Jun 24 16:16:40 CST 2020 on pts/0 [tang@iscsi ~]$ cd /tmp/ [tang@iscsi tmp]$ rm -rf test rm: cannot remove ‘test’: Operation not permitted [root@iscsi testdir]# cd .. [root@iscsi tmp]# mkdir yh1 [root@iscsi tmp]# chmod -R o+t yh1 ##设置目录的SBIT特殊权限位 [root@iscsi tmp]# ls -ld yh1/ drwxr-xr-t 2 root root 6 Jun 24 16:24 yh1/
3 文件的隐藏属性
chattr 用于设置文件的隐藏权限,chattr [参数] 文件,+ 追加功能,- 移除功能 i 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件 a 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only) S 文件内容在变更后立即同步到硬盘(sync) s 彻底从硬盘中删除,不可恢复(用 0 填充原文件所在硬盘区域) A 不再修改这个文件或目录的最后访问时间(atime) b 不再修改文件或目录的存取时间 D 检查压缩文件中的错误 d 使用 dump 命令备份时忽略本文件/目录 c 默认将文件或目录进行压缩 u 当删除该文件后依然保留其在硬盘中的数据,方便日后恢复 t 让文件系统支持尾部合并(tail-merging) X 可以直接访问压缩文件中的内容 [root@iscsi tmp]# echo "i love "> chattrtest [root@iscsi tmp]# rm chattrtest rm: remove regular file ‘chattrtest’? y [root@iscsi tmp]# echo "i love "> chattrtest [root@iscsi tmp]# chattr +a chattrtest [root@iscsi tmp]# rm chattrtest rm: remove regular file ‘chattrtest’? y rm: cannot remove ‘chattrtest’: Operation not permitted [root@iscsi tmp]# ll -al chattrtest -rw-r--r-- 1 root root 8 Jun 24 16:30 chattrtest lsattr 用于显示文件的隐藏权限 lsattr [参数] 文件 [root@iscsi tmp]# ll -al chattrtest -rw-r--r-- 1 root root 8 Jun 24 16:30 chattrtest [root@iscsi tmp]# lsattr chattrtest -----a---------- chattrtest
4 访问控制列表
setfacl 用于管理文件的ACL规则 setfacl [参数] 文件名称 使用 setfacl 命令可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制。 针对目录文件需要使用-R 递归参数;针对普通文件则使用-m 参数; 如果想要删除某个文件的 ACL,则可以使用-b 参数。 [root@iscsi ~]# setfacl -Rm u:hong:rwx /root [root@iscsi ~]# su - hong Last login: Wed Jun 24 16:17:21 CST 2020 on pts/0 [hong@iscsi ~]$ cd /root [hong@iscsi root]$ ls anaconda-ks.cfg initial-setup-ks.cfg original-ks.cfg pgrouting_10-2.6.3-1.rhel7.x86_64.rpm postgis25_10-2.5.3-6.rhel7.x86_64.rpm [hong@iscsi root]$ cat anaconda-ks.cfg #version=DEVEL # System authorization information [hong@iscsi root]$ exit logout [root@iscsi ~]# ls -ld /root dr-xrwx---+ 9 root root 4096 Jun 24 15:06 /root #文件的权限最后一个(.)变成了(+),表示该文件设置了ACL [root@iscsi ~]# ls -ld /opt drwxr-xr-x. 7 root root 4096 Jun 24 15:06 /opt getfacl 用于显示文件上设置的ACL信息 [root@iscsi ~]# getfacl /root getfacl: Removing leading '/' from absolute path names # file: root # owner: root # group: root user::r-x user:hong:rwx group::r-x mask::rwx other::---
5 su命令与sudo服务
[root@iscsi ~]# id uid=0(root) gid=0(root) groups=0(root) [root@iscsi ~]# su - yang su: user yang does not exist [root@iscsi ~]# useradd yang [root@iscsi ~]# su - yang ##- 号,把环境变量也变更为新用户的相应信息 [yang@iscsi ~]$ id uid=1009(yang) gid=1009(yang) groups=1009(yang) sudo命令用于给普通用户提供额外的权限来完成原本root管理员才能完成的任务 -h 列出帮助信息 -l 列出当前用户可执行的命令 -u 用户名或 UID 值 以指定的用户身份执行命令 -k 清空密码的有效时间,下次执行 sudo 时需要再次进行密码验证 -b 在后台执行指定的命令 -p 更改询问密码的提示语 sudo命令具有的功能: --限制用户执行指定的命令 --记录用户执行的每一条命令 --配置文件/etc/sudoers 提供集中的用户管理、权限与主机等参数 --验证密码的后5分钟(default)无须再让用户再次验证密码 只有root管理员才可以使用visudo命令边界sudo服务的配置文件 #visudo 增加如下,加%代表用户组, ALL=(ALL)表示登录者的来源主机名,最后的 ALL 代表可执行的命令。 NOPASSWD 代表不需要密码直接可运行 Sudo,限制多命令一定要写绝对路径,用逗号分开,多行用‘’,用!代表不能执行 [root@iscsi ~]# useradd yh [root@iscsi ~]# id yh uid=1002(yh) gid=1002(yh) groups=1002(yh) [root@iscsi ~]# visudo [yh@iscsi sbin]$ sudo cp nginx.2020042311 nginx.202004231234 [yh@iscsi sbin]$ rm nginx.2020042311 rm: remove write-protected regular file ‘nginx.2020042311’? y rm: cannot remove ‘nginx.2020042311’: Permission denied [yh@iscsi sbin]$ sudo rm nginx.2020042311 Sorry, user yh is not allowed to execute '/bin/rm nginx.2020042311' as root on iscsi. [yh@iscsi sbin]$ logout [root@iscsi ~]# visudo [root@iscsi ~]# su - yh Last login: Mon Apr 27 02:47:07 PDT 2020 on pts/0 [yh@iscsi ~]$ cd /usr/local/nginx-1.8.1/sbin/ [yh@iscsi sbin]$ sudo mv nginx.202004231 nginx.202004231 nginx.2020042311 nginx.202004231234 [yh@iscsi sbin]$ sudo mv nginx.202004231 nginx.202004231 nginx.2020042311 nginx.202004231234 [yh@iscsi sbin]$ sudo mv nginx.2020042311 nginx.20200423111111 Sorry, user yh is not allowed to execute '/bin/mv nginx.2020042311 nginx.20200423111111' as root on iscsi. [yh@iscsi sbin]$ sudo cat /etc/sudoers yh ALL=(ALL) NOPASSWD:ALL,!/usr/bin/rm,!/usr/bin/mv,!/usr/bin/passwd root #NOPASSWD 参数,使用户执行sudo命令时不需要再密码验证 [yh@iscsi sbin]$ sudo -l User yh may run the following commands on iscsi: (ALL) NOPASSWD: ALL, !/usr/bin/rm, !/usr/bin/mv, !/usr/bin/passwd root, !/usr/sbin/fdisk, !/usr/sbin/visudo [yh@iscsi ~]$ sudo visudo Sorry, user yh is not allowed to execute '/sbin/visudo' as root on iscsi. [yh@iscsi ~]$ sudo vim /etc/sudoers ## ## Allow root to run any commands anywhere root ALL=(ALL) ALL yh ALL=(ALL) NOPASSWD:ALL,!/usr/bin/rm,!/usr/bin/mv,!/usr/bin/passwd root,!/usr/sbin/fdisk,!/usr/sbin/visudo [yh@iscsi ~]$ sudo systemctl restart named [yh@iscsi ~]$ sudo systemctl status named ● named.service - Berkeley Internet Name Domain (DNS) Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled) Active: active (running) since Tue 2020-06-30 10:08:04 CST; 6s ago Process: 80784 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS) Process: 80800 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS) Process: 80798 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS) Main PID: 80804 (named) CGroup: /system.slice/named.service └─80804 /usr/sbin/named -u named -c /etc/named.conf [yh@iscsi ~]$ sudo head -n 10 /etc/shadow root:$1$KkFN1vnx$.I/eypvST9m/k0Y74dkUd.::0:99999:7::: bin:*:17110:0:99999:7::: daemon:*:17110:0:99999:7:::