第3章:用户系统和权限管理
linux用户系统
linux是一个多用户、多任务的操作系统;windows同时只允许一个用户登录,linux运行支持多个用户同时登录!

linux用户概述与分类;用户组概述; ===================================================================== 用户:管理Linux系统而存在的。 用户一般分为用户名和用户ID(Identify):相当于我们的名字和身份证,名字和学号。用户名方便管理员使用,用户ID是唯一区别一个用户(计算机只识别ID) Linux里所有的用户和进程都要有用户对应。 文件存在必须对应用户 进程运行必须应用用户 Linux用户分三类: 1、超级管理员 root 权限堪称皇帝。UID为0,换句话UID为0的都有皇帝对应的权限。(不要修改ID为0变管理员!) [root@oldboyedu ~]# id root uid=0(root) gid=0(root) groups=0(root) [root@oldboyedu ~]# id uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [root@oldboyedu ~]# whoami root 2、虚拟用户(UID 1-999) 实际存在的用户,但是又不允许它登录。用于满足文件或进程运行属主的要求。但是又不会带来管理风险。 3、普通用户(#表示root,$表示普通用户) 实际存在的用户,又允许它登录。管理员身份创建的,帮助管理员管理系统的。 权限仅仅限制家目录,在一些系统级目录可以读不可以写,不可以进入/root目录。 UID C7 1000起步 C6 500起步 [root@oldboyedu ~]# useradd oldgirl -------------------------------------------------------------------- 用户组:集合、组织 Linux里每个用户都必须至少归属于一个用户组,用户组也有唯一标识,Group ID 简称GID 管理员组:root,0 系统组:1-499,1-999(centos7) 普通组:500+,1000+(centos7) 用户必须属于一个且只有一个主组;一个用户可以属于0或多个辅助组 默认情况创建用户,它会自动创建一个和用户名相同的用户组以及相同的GID。 用户和用户组的对应关系 1、1对1 2、1对多个用户组 3、多个用户对应一个用户组 4、多对多

管理用户(新增、删除、修改用户):useradd、usermod、userdel、newusers;管理用户组:groupadd、groupdel、groupmod ======================================================================== useradd 添加普通用户 -u 指定UID -s 指定登陆的shell解释器 -M 不创建家目录 -g 指定用户组 useradd username -g group -G 为用户指定附加组(组必须存在) -c 添加用户说明 -d 指定家目录 -e 设定登陆截止日期 -r 创建系统用户(ID为系统ID,并且不创建家目录,也不创建邮箱) -m 创建家目录,用于系统用户 -M 创建家目录,用于非系统用户 -D 查看or修改/etc/default/useradd文件 useradd -D 查看/etc/default/useradd文件 useradd -D -s /bin/sh 相当于vim编辑/etc/default/useradd文件 创建新用户的操作示例 [root@yefeng28325 ~]# useradd test_user #创建新用户,默认会同时创建一个新用户组 [root@yefeng28325 ~]# id test_user #查看用户 uid=1001(test_user) gid=1001(test_user) groups=1001(test_user) [root@yefeng28325 ~]# id uid=0(root) gid=0(root) groups=0(root) [root@yefeng28325 ~]# groupadd odgroup #创建一个新用户组(用户组可以单独存在)这里并不是将用户添加到用户组!!! [root@yefeng28325 ~]# su test_user #切换用户(root切普通用户不需要密码,反之要密码) [test_user@yefeng28325 root]$ usermod 修改用户的属性 参数基本同useradd -m 该参数作用于useradd的不同! -G 为用户指定附加组(默认是覆盖,若保留原有,则需要同时使用-a选项) 示例: usermod -U username #解锁操作;/etc/shadow中关于新用户的密码段为"!!",表示被锁了两次,-U解锁,解锁两次两个!都没了,此时账号就可以无面膜法登陆了(这种方式centos6之后就不被允许了) usermod -L username #锁定账号,被锁定的账号在/etc/shadow的密码段有"!",被锁的账号不能直接登陆,但可以用su切换到该账号 userdel 删除用户 #默认只删除用户,不删除文件! -r 递归删除用户目录及下面的文件 newusers passwd格式文件 #根据passwd格式文件批量创建新用户 --------------------------------------------------------------------- groupadd 添加用户组 -g 指定组ID groupdel 删除用户组 groupmod 修改用户组属性

/etc/passwd、/etc/shadow等用户系统相关文件及其说明 ======================================================================== /etc/passwd 用户所在文件 /etc/shadow 用户密码所在文件 /etc/group 用户组所在文件 /etc/gshadow 用户组密码所在文件(几乎不用) useradd 新增用户将会修改文件:/etc/passwd、/etc/shadow passwd 修改密码实际就是修改:/etc/shadow groupadd 新增用户组会修改文件:/etc/group、/etc/gshadow(若新增用户时新增了用户组也会修改这2个文件) [root@test ~]# useradd bingbing [root@test ~]# grep bingbing /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/login.defs 是设置用户帐号限制的文件。该文件里的配置对root用户无效。例如账号密码的最大有效期、最小长度、UID范围、GID范围、密码加密方法 ---------------------------------------------------------------------- /etc/passwd字段说明: testuser:x:1002:1003::/home/testuser:/bin/bash(bash是sh的扩展,sh是bash的软连接。) 用户名:用户密码:用户UID:用户组GID:用户说明:用户家目录:shell解释器 用户密码x:密码被记录在/etc/shadow中,因为显示为x shell解释器:用户登录后,输入的命令使用指定解释器进行解释 /etc/shadow字段说明: testuser:!!:18614:0:99999:7::: testuser 用户 :!! 密码(!!表示被锁定了2两次) :18614 最近更改密码的时间,距离1970年1月1日的天数 :0 禁止修改密码的天数 :99999 用户必须更改口令的天数 :7 警告更改密码的期限 : 在用户密码过期之后到禁用账户的天数 : 从1970年1月1日起,到用户被禁用的天数 : 保留 testuser:$6$Ep7.u34t$lftwC7CPsqletU65r3njf6ZMOutegFRHqNKPIrd7El25leQLVpj9N7WPlRsiqchsa3S054Edk6GoOfKDY1o7s1:18676:0:99999:7::: 密码:$6$Ep7.u34t$lftwC7CPsqletU65r3njf6ZMOutegFRHqNKPIrd7El25leQLVpj9N7WPlRsiqchsa3S054Edk6GoOfKDY1o7s1 加密方法:$6==sha512;$1==md5 slat盐:两个$之间的字符串"Ep7.u34t" /etc/group字段说明: testuser:x:1003: 用户组名:用户组密码:用户组GID:用户组成员 /etc/gshadow字段说明: testuser:!:: 用户组名:用户组密码:用户组管理员用户:用户组成员

useradd命令添加用户的执行过程 根据/etc/default/useradd、/etc/login.defs文件中的配置逐步配置 /etc/default/useradd配置说明: # useradd defaults file GROUP=100 HOME=/home #*****设置家目录 INACTIVE=-1 EXPIRE= #用户终止时间,不设置表示不启用 SHELL=/bin/bash #*****默认shell解释器 SKEL=/etc/skel #*****该目录下保存默认的环境变量.bash_logout、.bash_profile、.bashrc;创建新用户时,将会复制这些环境变量到新用户家目录下 CREATE_MAIL_SPOOL=yes /etc/login.defs说明:设置了UID_MIN、UID_MAX、GID_MIN、GID_MAX、UMASK 077(所以用户家目录的默认权限为700)

修改用户密码:passwd、chpasswd、chage(密码时效管理) ======================================================================== passwd 修改用户的密码 -d 删除密码 -l 停止账号使用 -u 启用已被停止的账户 -f 强迫用户下次登录时必须修改口令 -w 口令要到期提前警告的天数 -k 更新只能发送在过期之后 -S 显示密码信息 -x 指定口令最长存活期 -g 修改群组密码 -i 口令过期后多少天停用账户 --stdin 从标准输入接收密码并设置(该方式将会直接修改,设置密码时不需要进行交互) 方法1:echo 123456 |passwd --stdin testuser 方法2:passwd --stdin oldgirl <pass.txt passwd -n7 -x60 -w10 -i30 testuser #用户testuser7天内不能更改密码,60天后必须修改密码,过期前10天通知用户,过期30天后禁止用户登录。 passwd 本质就是修改/etc/passwd文件,但是不建议直接修改该文件! --------------------------------------------------------------------- chpasswd 从标准输入批量更改用户密码 方法1:chpasswd<user.log 方法2:tail -4 /etc/passwd|awk -F ":" '{print $1":oldboy"}'|chpasswd (要求输入的格式----用户名:密码) --------------------------------------------------------------------- chage 该命令用于密码时效管理。它可以修改账号和密码的有效期。 -l 列出用户以及密码的有效期:密码最后修改时间、密码过期时间、账号过期时间、最小修改密码时间间隔、最大修改密码时间间隔等信息 -E 修改账号过期时间 chage -l testuser chage -m7 -M60 -W10 -I30 testuser #修改最小修改密码时间间隔为7天,最大修改时间间隔为60天,过期前10天warning提示,过期后30天后禁止用户登录

命令(查看用户及用户登录日志):id、whoami、w、finger、last、lastlog ======================================================================== id 查看用户身份 id #默认查看当前用户 id username #查看用户,groups项为用户所属的组,第一个为主组,之后的为附属组 当然也可以用来判断是否存在某个用户了 --------------------------------------------------------------------- whoami #查看当前登录用户 --------------------------------------------------------------------- w #查看当前登录的所有用户及相关信息 --------------------------------------------------------------------- finger username #查看账号的描述信息 --------------------------------------------------------------------- last #列表显示登录过的用户信息 --------------------------------------------------------------------- lastlog #列表显示所有用户最后登录的相关信息,比如端口、IP、时间

命令(操作用户组):groups、gpasswd、newgrp ======================================================================== groups groupname #查看用户组的组成员 gpasswd groupname #设置组密码 newgrp groupname #当前用户切换主组(用户属于该组,无需密码;用户不属于该组,需要输入组密码) 一个用户要永久加附加组,那么需要同时修改/etc/group和/etc/gshadow

命令(操作用户和用户组相关的文件):vipw、vigr、pwck、grpck、pwunconv、pwconv、chfn、authconfig、getent ======================================================================== vipw、vigr #打开相应的/etc/passwd和/etc/group,并进行编辑 --------------------------------------------------------------------- pwck、grpck #对/etc/passwd和/etc/group进行格式检查 --------------------------------------------------------------------- pwunconv #用户密码的字符串显示在/etc/passwd中 --------------------------------------------------------------------- pwconv #用户密码回归到/etc/shadow --------------------------------------------------------------------- chfn username #交互式方式往/etc/passwd文件中的用户username添加描述信息 --------------------------------------------------------------------- authconfig --passalgo=sha512 --update #更换密码的加密算法,默认为sha512,本质上就是修改/etc/login.defs文件;注意,修改加密算法后,新设置的密码使用新算法;原有密码的加密算法不变; --------------------------------------------------------------------- getent命令用来查看系统的数据库中的相关记录。 getent passwd username getent group root

su命令 =============================================================== su命令切换账号(默认不重新加载环境变量,同时不指定切换账号默认切换为root) 参数说明: - 加载切换账号的环境变量;登陆式切换,会读取目标用户的配置文件,切换至家目录,完全切换 -c 说法1:切换账号执行-c后,切回账号;说法2:不切换用户,但以指定用户执行一条命令 示例: su - username -c whoami #以用户username身份执行命令whoami,视觉效果上看没有切换账号 su - #等效于su - root #切换到root必须输入root密码 su - username #root切换到普通用户不需要密码,普通用户之间相互切换需要输入密码

sudo命令;生产环境下的sudo应用要点(root密码管理) =============================================================== sudo 允许指定用户以root身份执行指定命令 1.不是所有用户都能sudo的! 2.能sudo的用户只能执行指定命令,而不是能执行所有命令! 与suid位的区别:suid的设置是针对命令的,设置后所有用户使用该命令都拥有属主的权限 参数: -l 查看当前用户的sudo权限 用户使用sudo且输入密码之后,将会在/var/run/sudo/ts/中生成一个时间戳文件,默认在接下来的5分钟内使用sudo不需要再次验证 visudo编辑sudo配置文件的命令(等效于vim /etc/sudoers[不推荐]) -c 检查/etc/sudoers文件的语法是否正确(编辑/etc/sudoers后,执行visudo -c是良好的习惯) 相关语法示例: root ALL=(ALL) ALL username1 ALL=(ALL) NOPASSWD:ALL #该用户拥有sudo所有明显的权限,且sudo时无需输入密码 username2 ALL=(ALL) /usr/bin/ls,/bin/cp(注意使用全路径) #该用户可以sudo使用ls、cp命令 -------------------------------------------------------------- 生产环境下的sudo应用要点 关于su和sudo,我的理解(实际工作中的要点): 1.禁止所有人使用root账号远程连接linux,所有人都使用普通账号登陆 2.root密码禁止外泄,保管在极少数人手中 3.管理员的账号在/etc/sudoers文件配置有最高权限,即可以使用sudo使用所有命令 若一定要切换为root用户,则建议使用sudo su - root(输入密码为管理员账号的密码),不建议使用su - root:(输入密码为root账号的密码,这种方式有10个运维就有10人知道root密码,有安全隐患) 4.普通用户的账号则根据需要给予sudo权限,或不给sudo权限

案例1:环境变量导致的故障;案例2:生产环境下删除账号;案例3:root用户找回密码 ------------------------------------------------------------------------------------------- 故障案例1:登录系统后,命令行出现如下提示:为什么? [root@oldboyedu /home/chenglong1]# su - chenglong1 -sh-4.2$ #此处没有正常显示用户名,主机名等信息 故障原因1:用户的环境变量缺失导致的。 故障解决1:将/etc/skel目录下的环境变量 -sh-4.2$ cp /etc/skel/.bash* . -sh-4.2$ source ./.bash_profile ./.bashrc #猜测source是重新加载文件 [chenglong1@oldboyedu ~]$ #重新加载环境变量后,显示正常 故障原因2:/etc/default/useradd文件中的SKEL=/etc/skel被修改,导致创建新用户时,没有正确地复制环境变量 故障解决2:修复配置! -------------------------------------------------------------------------------------------- 实际工作中的删除账号: 不直接使用userdel,而是编辑/etc/passwd,通过注释使账号不可用;然后一段时间后集中删除 -------------------------------------------------------------- root用户找回密码 https://baijiahao.baidu.com/s?id=1614000108255096283&wfr=spider&for=pc
权限管理

文件权限;基础权限(rwx)说明;用户执行命令的权限说明 ================================================================================================================== linux文件权限就是基础权限(9字符:rw-r--r--)+特殊权限位(3字符:suid、sgid、sticky) 猜测:linux中文件完整权限一共占据12bit,其中前3bit为特殊权限位,剩下的9bit分别对应属主、属组、其他用户的普通权限 猜测依据:chmod 7644 testfile #testfile文件设置了基础权限rw-r--r--,同时设置了特殊权限位suid、sgid、sticky;最终表示为rwSr-Sr-T ------------------------------------------------------------------------------------------------------------------ 基础权限(rwx)说明 权限系统是基于文件系统的,windows系统的fat文件系统就不支持rwx权限 文件的权限说明: r表示具有读取、浏览文件内容的权限(即读取文件实体block) w表示具有新增、修改、删除文件内容的权限 1.vi编辑文件时,需要r权限配合,否则会提示无法编辑;不过没有r可以进行强制编辑,可以使用echo等命令进行重定向or追加 2.删除文件or创建文件的权限是受父目录的权限控制的,因为文件名存放在上级目录的block中;若删除文件or创建(本质上就是修改上级目录的block),自然受上级目录的inode权限控制,和文件本身的权限无关。 x表示具有执行文件的权限 1.文件本身是能够执行(命令or脚本) 2.普通用户需要同时具备rx权限才能执行文件 3.root具备x权限就能执行文件 目录的权限说明:(rx是目录的基础权限) r表示具有浏览目录下面文件和子目录名的权限。 需要有x权限,才能切换到该目录里,即cd 目录 没有x权限时,虽然ls可以查看目录内所有的文件名,但是会提示无权访问目录下的文件;同时使用ll查看时,虽然可以看到文件名,但是文件名对应的属性则全部以?代替(这个很好理解:没有x权限,即无法进入到目录内,目录内的文件名是上一级目录的内容,但是目录内的文件的属性则是属于文件的,无法进入到目录,自然无法查看文件内容) w表示具有增加、删除、修改目录内文件的权限 需要有x权限配合,否则即使有w也无法删除or创建文件 x表示具有进入目录的权限 ------------------------------------------------------------------------------------------------------------------ 用户执行命令的权限说明 command file----例如cat 123.txt 1.用户是否可以将一个可执行程序启动为进程,取决于用户对该程序文件是否用户执行权限 即用户是否对command拥有x权限(用户是否对cat命令拥有x权限) 2.进程启动后,进程属主为用户,进程属组为用户的属组 3.进程访问文件file的权限,取决于用户对该文件的权限 a.用户是文件的属主,则对应属主权限 b.用户是文件的属组,则对应属组权限 c.用户是文件的other,则对应other权限

特殊权限位(suid、sgid、sticky)说明 ================================================================================================================== suid:启动进程后,其进程的属主为原程序文件的属主,而不是当前用户 sgid: 1.设置在二进制命令or程序:启动进程后,其进程的属组为原程序文件的属组 2.设置目录的sgid位:通常用于常见一个协作目录,任何用户在该目录下创建的新文件的属组都继承自该协作目录 sticky:设置在文件上无意义;设置在目录上,该目录下的文件,只有文件的属主或root才能删除该文件(/tmp设置了粘滞位) ------------------------------------------------------------------------------------------------------------------ suid位:是针对二进制命令or程序的!(针对脚本和文件设置suid位是无效的!) suid(setuid)位通过S字符标识,存在于基本权限的用户权限位的x权限对应的位置;suid的s对应的数字权限为4,完整权限用八进制数4000表示。 如果用户权限位对应的x权限位上有x权限,则suid就用小写的s标识;如果用户权限位对应的x权限位上无x权限,则suid就用大写的S标识。 suid一般都设置在命令文件,例如:find /usr/bin -perm 4755|xargs ls -l;可以看到su、umount、passwd等命令都设置了suid位。 suid的作用:让普通用户可以在执行某个设置了suid位的命令or程序时,拥有和命令对应属主一样的身份和权限(注意:不只是权限,同时也有身份) 例如:当一个命令文件的suid置位时(命令文件的属主x位必然置1),即此时属主x位为's';其他用户使用该命令时,具备属主的身份和权限。以passwd命令为例,通过passwd命令的suid位置1,其他用户也具备了使用passwd命令的权限。 拓展:将passwd命令的其他用户权限设置为5,即其他用户可读可执行,这种方式是不可行的!这种方式虽然拥有了passwd命令的可读可执行权限,但是用户对文件/etc/shadow却无任何权限,所以还是无法修改密码。(passwd命令实际修改的是文件/etc/shadow,/etc/shadow对应的权限为---------,即属主也不具备任何权限) suid是一个比较危险的功能,对系统安全有一定的威胁,企业里用户授权可以使用sudo等替代sgid功能。 ------------------------------------------------------------------------------------------------------------------ sgid的作用 1.让普通用户可以在执行某个设置了sgid位的命令时,拥有和命令对应用户组(一般为root用户组)一样的身份和权限(默认)。 例如:命令locate搜索内容就是到updatedb对应的数据库/var/lib/mlocate/mlocate.db中进行查找 2.sgid基于目录的作用:让不同的人创建文件属于相同的用户组,从而可以互相共享文件的权限。 sgid作用1示例: locate命令的逻辑其实是简单的,就是会自动去查询mlocate.db 1./var/lib/mlocate/mlocate.db的other的权限是0,是不允许other读取的 2.通过设置sgid,other运行locate命令时,临时获取了slocate组权限;而mlocate.db对于属组的权限是r--,即可读。 -rwx--s--x 1 root slocate 40520 Apr 11 2018 /usr/bin/locate -rw-r----- 1 root slocate 5549112 Dec 19 23:06 /var/lib/mlocate/mlocate.db 3.其他用户使用locate命令可以顺利的进入到mlocate.db进行查找(读操作) 所以suid,sgid都是用于临时授予权限的,在该命令结束时,权限也被收回去了 sgid作用2示例:sgid基于目录的作用 设置了sgid位的目录,在这个目录下,不同用户创建的文件都会继承目录的组,即所有文件都会属于相同的组,从而可以互相共享文件 ------------------------------------------------------------------------------------------------------------------ 粘滞位sticky位 drwxrwxrwt. 8 root root 4096 Dec 19 23:04 /tmp 一个目录的普通权限位全部开放,即设置777,同时设置了sticky位。那么这个目录只能被属主和root删除,其他用户是不能删除这个目录的。 粘滞位sticky位一般的用途是将一个目录的权限都打开,然后来共享文件。虽然方便,但带来了一定的安全隐患,生产环境应禁止设置sticky位权限!!! ------------------------------------------------------------------------------------------------------------------ 特殊权限位的显示说明 chmod 7644 testfile #设置了特殊权限位suid、sgid、sticky;特殊权限位是否设置显示在可执行位x 当可执行位置0时,设置了特殊权限位,则用相应的大写SST进行表示:即7644表示为rwSr-Sr-T 当可执行位置1时,设置了特殊权限位,则用响应的小写sst进行表示:即7755表示为rwsr-sr-t

文件属性(属主属组rxw)相关命令:chown、chmod、chgrp ===================================================================================== chown命令(change owner)用来设置文件的属主、属组 -R 递归处理目录以及子目录下的所有文件 示例: chown 属主.属组 file1.txt 修改属主和属组('.'可以用':'来替代) chown 属主 file1.txt 修改属主 chown .属组 file1.txt 修改属组 chgrp命令修改文件的属组 -R 递归 ----------------------------------------------------------------------------------- chmod命令修改文件属性(root是例外,root读写文件不受权限控制,但执行权限还是受文件权限控制的) -R 递归处理目录以及子目录下的所有文件 通过数字进行修改: chmod 744 testfile chmod 7644 testfile #设置了特殊权限位suid、sgid、sticky -rwSr-Sr-T---7644:当可执行位置0时,设置了特殊权限位,则用相应的大写SST进行表示 -rwsr-sr-t---7755:当可执行位置1时,设置了特殊权限位,则用响应的小写sst进行表示 通过参数进行修改: +增加权限,-删除权限,=设定权限 r读取权限,w写权限,x执行权限,X只给目录执行权限 chmod ugo+r file1.txt #u=user,g=group,o=other;设为所有人皆可读取 chmod a+r file1.txt #a=ugo;设为所有人皆可读取 chmod ug+w,o-w file1.txt #属主属组增加w权限,other删除w权限 chmod u+x ex1.py #属主增加x权限 chmod u-r,g=x,o=w file1 #属主删除r权限,属组只有x权限,other只有w权限 chmod -R +X dir1 #递归处理dir1目录内的所有文件,+X只对目录增加执行权限 通过参考文件权限进行修改 chmod --reference=f1 f2 f3 #参照f1文件的权限,设置f2f3的权限 示例: [root@yefeng28325 ~]# chmod 744 testfile #当一个文件具有可执行文件时,颜色也发生变化了,ECS上显示为翠绿色 [root@yefeng28325 ~]# ./testfile #执行文件需要使用当前路径or绝对路径,不能使用相对路径;使用相对路径将会去环境变量中查找可用的命令,而不是执行文件 [root@yefeng28325 ~]# /root/testfile ----------------------------------------------------------------------------------- chgrp(change group)命令用于变更文件或目录的所属群组。 -c或--changes 效果类似"-v"参数,但仅回报更改的部分。 -f或--quiet或--silent 不显示错误信息。 -h或--no-dereference 只对符号连接的文件作修改,而不更动其他任何相关文件。 -R或--recursive 递归处理,将指定目录下的所有文件及子目录一并处理。 -v或--verbose 显示指令执行过程。

ext2文件系统支持的文件属性(锁定文件等等):chattr命令、lsattr命令 ===================================================================================== chattr命令用于改变文件属性。 这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式: a:让文件或目录仅供附加用途。 b:不更新文件或目录的最后存取时间。 c:将文件或目录压缩后存放。 d:将文件或目录排除在倾倒操作之外。 i:不得任意更动文件或目录。 s:保密性删除文件或目录。 S:即时更新文件或目录。 u:预防意外删除。 参数 -R 递归处理,将指定目录下的所有文件及子目录一并处理。 -v<版本编号> 设置文件或目录版本。 -V 显示指令执行过程。 +<属性> 开启文件或目录的该项属性。 -<属性> 关闭文件或目录的该项属性。 =<属性> 指定文件或目录的该项属性。 用法: chattr +i file #所有用户(含root)无法修改该文件 chattr +a file #所有用户(含root)只能对该文件追加内容 ----------------------------------------------------------------------------------- lsattr命令用于显示文件属性。用chattr执行改变文件或目录的属性,可执行lsattr指令查询其属性。 参数: -a 显示所有文件和目录,包括以"."为名称开头字符的额外内建,现行目录"."与上层目录".."。 -d 显示,目录名称,而非其内容。 -l 此参数目前没有任何作用。 -R 递归处理,将指定目录下的所有文件及子目录一并处理。 -v 显示文件或目录版本。 -V 显示版本信息。

umask(控制新文件的默认权限) ----------------------------------------------------------------------------------- 新文件默认权限:umask umask全局设置/etc/bashrc 用户设置~/.bashrc 创建的新文件默认权限为666,新目录默认权限为777,同时需要禁用创建用户的umask对应的权限 root的umask为0022,即禁用了属组和其他用户的w权限。 新文件的实际权限为644,新目录实际权限为755 普通用户的umask为0002,即禁用了other的w权限。 新文件的实际权限为664,新目录实际权限为775 特殊:普通用户的家目录默认权限为700 644:所有人不能执行,属主可读可写,其他人只可读 755:所有人都能执行,即可以进入目录;属主可读可写,其他人可读 umask命令用法 umask umask -S umask -p >> ~/.bashrc

访问控制列表ACL(access control list);getfacl命令、setfacl ===================================================================================== 访问控制列表ACL(access control list):实现灵活的权限控制 linux的文件权限控制系统只针对3类:属主、属组、other;通过使用acl可以实现针对单用户的权限控制,更灵活 centos7默认创建的xfs和ext4文件系统具有ACL功能 centos7之前版本,默认手工创建的ext4文件系统无acl功能,需手动增加 tune2fs -o acl /dev/sdb1 mount -o acl /dev/sdb1 /mnt/test ACL的生效顺序:属主,自定义用户,自定义组,other。(开启ACL之后,就没有属组的权限了) mask其实就是指定了自定义用户、自定义组的权限上限(即acl针对自定义用户开启了某权限,但是mask没有该权限,则该权限实际不生效);开启ACL之后,ll命令查看文件,属组位置的权限其实是mask cp和mv都支持ACL,cp命令要注意加上-p参数。但是tar等常见的备份工具不会保留目录和文件的acl信息 getfacl -R /tmp/dir1 > acl.txt setfacl -R -b /tmp/dir1 setfacl -R --set-file=acl.txt /tmp/dir1 setfacl --restore acl.txt getfacl -R /tmp/dir1 ----------------------------------------------------------------------------------- getfacl 查看文件的acl设置 setfacl的用法: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ... -m, --modify-acl 更改文件的访问控制列表 -M, --modify-file=file 从文件读取访问控制列表条目更改 -x, --remove=acl 根据文件中访问控制列表移除条目 -X, --remove-file=file 从文件读取访问控制列表条目并删除 -b, --remove-all 删除所有扩展访问控制列表条目 -k, --remove-default 移除默认访问控制列表 --set=acl 设定替换当前的文件访问控制列表 --set-file=file 从文件中读取访问控制列表条目设定 --mask 重新计算有效权限掩码 -n, --no-mask 不重新计算有效权限掩码 -d, --default 应用到默认访问控制列表的操作 -R, --recursive 递归操作子目录 -L, --logical 依照系统逻辑,跟随符号链接 -P, --physical 依照自然逻辑,不跟随符号链接 --restore=file 恢复访问控制列表,和“getfacl -R”作用相反 --test 测试模式,并不真正修改访问控制列表属性 -v, --version 显示版本并退出 -h, --help 显示本帮助信息 用法示例: getfacl f1 setfacl -m u:username:0 f1 #更改f1文件的ACL,针对用户username设置---权限 setfacl -m u:username:7 f1 #更改f1文件的ACL,针对用户username设置rwx权限 setfacl -m u:username:rw f1 #更改f1文件的ACL,针对用户username设置rw-权限 setfacl -x u:username f1 #更改f1文件的ACL,删除针对用户username的权限控制 setfacl -m g:group:rw f1 #更改f1文件的ACL,针对用户组group设置rw-权限 setfacl -x g:group f1 #更改f1文件的ACL,删除针对用户组group的权限控制 setfacl -b f1 #清空所有的acl权限控制 getfacl file1 | setfacl --set-file=- file2 #复制file1的acl权限给file2
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!