用户管理简要说明:
1.越是对服务器安全性要求高的服务器,越需要建立合理的用户权限等级制度和服务器操作规范。
2.在Linux中主要是通过用户配置文件来查看和修改用户信息。
初始组和附加组
初始组:就是指用户一登录就立刻拥有这个用户组的相关权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组。
附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个。
在Linux系统上,用户管理是基于用户名和密码的方式进行资源的分配,Linux上的用户Username/UID分为以下类别
管理员:root,0
普通用户:1-65535
普通用户又分为:系统用户和登录用户两种:
系统用户:1-499(centos6系统),1-199(centos7系统)对守护进程获取资源进行权限分配;
登录用户:500+(centos6系统),1000+(centos7系统)通过交互式方式登录
Linux组:Groupname/GID
管理员组:root,0
普通组:1-65535
普通组又分为:又分为系统组和非系统组,我们通常把非系统组叫做普通组。
系统用户:1-499(centos6系统),1-199(centos7系统)
登录用户:500+(centos6系统),1000+(centos7系统)通过交互式方式登录
对于一个用户而言可以有多个不的组,分别称之为用户的基本组(主组)和附加组;基本组组名和用户名相同,且仅包含一个用户,也叫私有组。基本组以外的组属于用户的附加组(或者额外组)
接下来介绍下Linux用户和组的主要配置文件:
/etc/passwd:用户及其属性信息(名称、UID、基本组ID等)
/etc/group/:组及其属性信息
/etc/shadow/:用户密码及其相关属性
/etc/gshadow/:组密码及其相关属性
详细介绍各个配置文件的内容:
/etc/passwd/
通过which passwd 来查看其对应的配置文件信息或者man 5 passwd 也可查看到该配置文件的帮助信息
passwd文件格式
name:password:UID:GID:GECOS:directory:shell,对应的含义是
用户名:密码:UID:GID:用户的详细信息说明:用户的家目录:用户的默认shell
/etc/shadow/
shadow文件格式说明:用户名:加了密的密码:最近一次更改密码的日期;密码的最小使用期限;密码的最大使用期限密码的警告时间段;密码禁用期:账户的过期日期:保留字段
/etc/group
group文件格式说明:群组名称:群组密码(通常不需要设定,密码是被记录在/etc/gshadow):GID :组中附加用户
/etc/gshadow
gshadow文件格式说明:群组名称:群组密码:组管理员列表(管理员的列表,更改组密码和成员):以当前组为附加组的用户列表(分隔符为逗号)
用户和组相关的管理命令 命令名称:useradd 命令所在路径:/usr/sbin/useradd 执行权限:root 语法:useradd [用户名] 功能描述:添加新用户 useradd [options] LOGIN -u UID: [UID_MIN, UID_MAX]定义在/etc/login.defs -o 配合-u 选项,不检查UID的唯一性 -g GID:指明用户所属基本组,可为组名,也可以GID -c "COMMENT":用户的注释信息 -d HOME_DIR: 以指定的路径(不存在)为家目录 -s SHELL: 指明用户的默认shell程序,可用列表在/etc/shells文件中 -G GROUP1[,GROUP2,...]:为用户指明附加组,组必须事先存在 -N 不创建私用组做主组,使用users组做主组 -r 创建系统用户 CentOS 6: ID<500, CentOS 7: ID<1000 -D 表示修改用户的默认选项;(修改的是/etc/default/useradd中的选项) -s 修改用户的默认shell信息
[root@wzc ~]# useradd libai [root@wzc ~]# grep 'libai' /etc/passwd libai:x:1005:1008::/home/libai:/bin/bash [root@wzc ~]# grep 'libai' /etc/group libai:x:1008: [root@wzc ~]# grep 'libai' /etc/shadow libai:!!:17016:0:99999:7::: [root@wzc ~]# grep 'libai' /etc/gshadow libai:!:: [root@wzc ~]# ll -d /home/libai/ drwx------. 3 libai libai 74 Aug 3 17:35 /home/libai/ [root@wzc ~]# ll /var/spool/mail/libai -rw-rw----. 1 libai mail 0 Aug 3 17:35 /var/spool/mail/libai #当创建好一个用户后,会在这些目录下自动生成用户的基本信息
[root@wzc ~]# groupadd distro [root@wzc ~]# groupadd linux [root@wzc ~]# useradd wu -G distro,linux -s /bin/bash -c "wu zhong cheng jml" [root@wzc ~]# tail -n 1 /etc/passwd wu:x:1004:1007:wu zhong cheng jml:/home/wu:/bin/bash #使用大G选项,组必须要事先创建好 [root@wzc ~]# getent group distro distro:x:1005:wu [root@wzc ~]# getent group linux linux:x:1006:wu #查看‘wu’用户的附加组
创建组 groupadd [OPTION]... group_name -g GID: 指明GID号; [GID_MIN, GID_MAX] -r: 创建系统组; CentOS 6: ID<500 CentOS 7: ID<1000 [root@wzc ~]# groupadd wzcfzd [root@wzc ~]# tail -n 1 /etc/group wzcfzd:x:1009: #增加一个wzcfzd组
[root@wzc ~]# groupadd -g 1028 wzcfzd2 [root@wzc ~]# tail -n 1 /etc/group wzcfzd2:x:1028: #‘-g’选项可以定义自己的组id
修改和删除组 组属性修改: groupmod groupmod [OPTION]... group -n group_name: 新名字 -g GID: 新的GID; 组删除: groupdel groupdel GROUP [root@wzc ~]# groupmod -g 1029 wzcfzd2 [root@wzc ~]# tail -n 1 /etc/group wzcfzd2:x:1029: #更改组id
[root@wzc ~]# groupdel wzcfzd2 [root@wzc ~]# grep 'wzcfzd2' /etc/group #删除组
更改组密码 组密码: gpasswd gpasswd [OPTION] GROUP -a user: 将user添加至指定组中; -d user: 从指定组中移除用户user -A user1,user2,...: 设置有管理权限的用户列表 newgrp命令:临时切换基本组; 如果用户本不属于此组,则需要组密码
更改和查看组成员 groupmems [options] [action]options: -g, --group groupname 更改为指定组 (只有root) Actions: -a, --add username 指定用户加入组 -d, --delete username 从组中删除用户 -p, --purge 从组中清除所有成员 -l, --list 显示组成员列表 groups [OPTION].[USERNAME]... 查看用户所属组列表删除用户 userdel [OPTION]... login -r: 删除用户家目录;
[root@wzc ~]# ls /home/ libai user2 wangcai wu wzc [root@wzc ~]# userdel -r user2 [root@wzc ~]# ls /home/ libai wangcai wu wzc #‘-r'选项是连带家目录账户一起删除,所有创建用户时自动生成的基本信息一起删除
设置密码 passwd [OPTIONS] UserName: 修改指定用户的密码,仅root用户权限 passwd: 修改自己的密码; 常用选项: -l:锁定指定用户 -u:解锁指定用户 -e:强制用户下次登录修改密码 -n mindays: 指定最短使用期限 -x maxdays:最大使用期限 -w warndays:提前多少天开始警告 -i inactivedays:非活动期限; --stdin:从标准输入接收用户密码; echo "PASSWORD" | passwd --stdin USERNAME
[root@wzc ~]# passwd -S libai libai LK 2016-08-03 0 99999 7 -1 (Password locked.) #查看密码状态 [root@wzc ~]# passwd -l wzc Locking password for user wzc. passwd: Success [root@wzc ~]# passwd -u wzc Unlocking password for user wzc. passwd: Success #锁定用户与解锁用户 [root@wzc ~]# echo "123" |passwd --stdin wzc Changing password for user wzc. passwd: all authentication tokens updated successfully. #修改用户密码
修改用户密码策略 chage [OPTION]... LOGIN -d LAST_DAY -E, --expiredate EXPIRE_DATE -I, --inactive INACTIVE -m, --mindays MIN_DAYS -M, --maxdays MAX_DAYS -W, --warndays WARN_DAYS –l,显示密码策略 下一次登录强制重设密码 chage -d 0 tom chage -m 0 –M 42 –W 14 –I 7 tom chage -E 2016-09-10 tom
[root@wzc ~]# chage -d 0 wangcai [root@wzc ~]# tail -n 3 /etc/shadow wangcai:$6$384ACS81$gUWa2VZ0OIuSVvML8YXy2dcDPyC3uU1TIw0I3nOHNFhm2eQP/kQDPUoULBCqCK7.9bkp9frPyaUJ10ObcKfy4.:0:0 :99999:7::: wu:!!:17016:0:99999:7::: libai:!!:17016:0:99999:7::: #把密码修改日期归0了,(/etc/shadow第三字段),这样用户一登录就要修改密码了
用户属性修改 usermod [OPTION] login -u UID: 新UID -g GID: 新基本组 -G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项, 表示append; -s SHELL:新的默认SHELL; -c 'COMMENT':新的注释信息; -d HOME: 新家目录不会自动创建,原家目录中的文件不会同时移动至新的家目录;若要创建新家目录并移动原家数据, 同时使用-m选项 -l login_name: 新的名字; -L: lock指定用户,在/etc/shadow 密码栏的增加 ! -U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉 -e YYYY-MM-DD: 指明用户账号过期日期; -f INACTIVE: 设定非活动期限;
[root@wzc ~]# usermod -c "wzc linuxer" libai [root@wzc ~]# grep 'libai' /etc/passwd libai:x:1005:1008:wzc linuxer:/home/libai:/bin/bash #修改用户的注释说明 [root@wzc ~]# usermod -aG wzcfzd libai [root@wzc ~]# grep 'libai' /etc/group libai:x:1008: wzcfzd:x:1009:libai #把用户‘libai’加入到‘wzcfzd’组 [root@wzc ~]# usermod -L libai [root@wzc ~]# grep 'libai' /etc/shadow libai:!$6$19uK6NM4$OzMVGOIjEJ49SZrpE8eZCIaGcBWbnxK.eLnBIG5BHcZFwg0ekvnk9OLWqH.u.x4E1R2oGBXHn9aLZ8L1nvr.e0:17016 :0:99999:7::: [root@wzc ~]# usermod -U libai [root@wzc ~]# grep 'libai' /etc/shadow libai:$6$19uK6NM4$OzMVGOIjEJ49SZrpE8eZCIaGcBWbnxK.eLnBIG5BHcZFwg0ekvnk9OLWqH.u.x4E1R2oGBXHn9aLZ8L1nvr.e0:17016: 0:99999:7::: #锁定用户与解锁用户
用户相关的其他用户其他命令 chfn 指定个人信息 chsh 指定shell inger
[root@wzc ~]# chfn libai Changing finger information for libai. Name [wzc linuxer]: www Office []: wwwoffice Office Phone []: 123456789 Home Phone []: 123456789 Finger information changed. [root@wzc ~]# grep 'libai' /etc/passwd libai:x:1005:1008:www,wwwoffice,123456789,123456789:/home/libai:/bin/bash #‘chfn’ 命令可以修改用户的findger信息,比如name, office, office phone 以及 Home phone.修改完后, 就会在/etc/passwd文件中的libai的那一行第五个字段中看到相关信息了,默认是空的
查看看用户相关ID信息 id [OPTION]... [USER] -u: UID -g: GID -G: Groups -n: Name [root@wzc ~]# id -u libai 1005 [root@wzc ~]# id -g libai 1008 [root@wzc ~]# id -un libai libai [root@wzc ~]# id -gn libai libai [root@wzc ~]# grep 'libai' /etc/passwd libai:x:1005:1008:www,wwwoffice,123456789,123456789:/home/libai:/bin/bash [root@wzc ~]# grep 'libai' /etc/group libai:x:1008: wzcfzd:x:1009:libai #'-g'选项和'-u'选项可以和'-n'选项连用,分别是查看组名和用户名
切换用户或其他用户身份执行命令 su [options...] [-] [user [args...]] 切换用户的方式: su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录 su - UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换root su至其他用户 无须密码;非root用户切换时需要密码 换个身份执行命令: su [-] UserName -c 'COMMAND' 选项: -l --login -c 仅执行一次命令,而不用切换用户身份
[root@wzc ~]# su - wzc Last login: Tue Aug 2 14:49:18 CST 2016 on pts/1 [wzc@wzc ~]$ pwd /home/wzc [wzc@wzc ~]$ su - Password: Last login: Wed Aug 3 13:32:27 CST 2016 from 10.1.250.38 on pts/1 #管理员切换到普通用户不用输入密码;反之,要输入密码。选项‘-’代表连用户的环境变量一起切换 [root@wzc ~]# su - libai [libai@wzc ~]$ pwd /home/libai [libai@wzc ~]$ su - root -c "useradd user1" Password: [libai@wzc ~]$ ls /home/ libai user1 wangcai wu wzc #'-c'选项不切换成root,但执行useradd命令添加用户
文件权限 文件属性 文件属性操作 chown 设置文件的所有者 chgrp 设置文件的属组信息 修改文件的属主和属组 修改文件的属主: chown chown [OPTION]... [OWNER][:[GROUP]] FILE... 用法: OWNER OWNER:GROUP :GROUP 命令中的冒号可用.替换; -R: 递归 chown [OPTION]... --reference=RFILE FILE... 修改文件的属组: chgrp chgrp [OPTION]... GROUP FILE... chgrp [OPTION]... --reference=RFILE FILE... -R 递归
[root@wzc date]# mkdir yangmi [root@wzc date]# useradd fangbingbing [root@wzc date]# touch yangmi/xiaoyangmi [root@wzc date]# chown fangbingbing yangmi/ [root@wzc date]# ls -ld yangmi/ drwxr-xr-x. 2 fangbingbing root 23 Aug 3 20:10 yangmi/ [root@wzc date]# ls -l yangmi/ total 0 -rw-r--r--. 1 root root 0 Aug 3 20:10 xiaoyangmi [root@wzc date]# groupadd fangbingbing groupadd: group 'fangbingbing' already exists [root@wzc date]# groupadd libingbing [root@wzc date]# chown -R fangbingbing:libingbing yangmi/ [root@wzc date]# ls -l yangmi/ total 0 -rw-r--r--. 1 fangbingbing libingbing 0 Aug 3 20:10 xiaoyangmi [root@wzc date]# ls -ld yangmi/ drwxr-xr-x. 2 fangbingbing libingbing 23 Aug 3 20:10 yangmi/ [root@wzc date]# #‘-R’选项把目录及子目录下文件所属主都修改成fangbingbing,属组修改成libingbing
chgrp 命令名称:chgrp 命令原意:change group ownership 命令所在路径:/usr/bin/chgrp 语法:chgrp [所属组] [文件或目录] 功能描述:改变文件或目录所属组 [root@wzc date]# groupadd testgroup [root@wzc date]# touch test.file [root@wzc date]# ls -l test.file -rw-r--r--. 1 root root 0 Aug 3 20:26 test.file [root@wzc date]# chgrp testgroup test.file [root@wzc date]# ls -l test.file -rw-r--r--. 1 root testgroup 0 Aug 3 20:26 test.file #chgrp不仅能更改文件,还能更改目录,请看下面例子 [root@wzc date]# pwd /date [root@wzc date]# ls -l dirb/ total 0 drwxr-xr-x. 2 root root 6 Aug 3 20:30 dirc -rw-r--r--. 1 root root 0 Aug 3 20:33 test.txt [root@wzc date]# ls -ld dirb/ drwxr-xr-x. 3 root root 32 Aug 3 20:33 dirb/ [root@wzc date]# chgrp testgroup dirb/ [root@wzc date]# ls -ld dirb/ drwxr-xr-x. 3 root testgroup 32 Aug 3 20:33 dirb/ [root@wzc date]# ls -l dirb/ total 0 drwxr-xr-x. 2 root root 6 Aug 3 20:30 dirc -rw-r--r--. 1 root root 0 Aug 3 20:33 test.txt [root@wzc date]# chgrp -R testgroup dirb/ [root@wzc date]# ll -ld dirb/ drwxr-xr-x. 3 root testgroup 32 Aug 3 20:33 dirb/ [root@wzc date]# ls -l dirb/ total 0 drwxr-xr-x. 2 root testgroup 6 Aug 3 20:30 dirc -rw-r--r--. 1 root testgroup 0 Aug 3 20:33 test.txt #‘-R’选项不仅能更改目录本身所属组,还能更改目录下的子目录或文件的所属组
文件权限 文件的权限主要针对三类对象进行定义: owner: 属主, u group: 属组, g other: 其他, o all:代表所有人 每个文件针对每类访问者都定义了三种权限: r: Readable w: Writable x: eXcutable 对于文件文件来说: r: 可使用文件查看类工具获取其内容 w: 可修改其内容 x: 可以把此文件提请内核启动为一个进程 对于目录来说: r: 可以使用ls查看此目录中文件列表 w: 可在此目录中创建文件,也可删除此目录中的文件 x: 可以使用ls -l查看此目录中文件列表,可以cd进入此目录: X:只给目录x权限,不给文件x权限
权限表示方法: 权限、二进制、八进制表示对应的表示方法如下: --- 000 0 --x 001 1 -w- 010 2 -wx 011 3 r-- 100 4 r-x 101 5 rw- 110 6 rwx 111 7 例如: 640: rw-r----- 755:rwxr-xr-x 修改文件权限 命令名称:chmod 命令原意:chmod file mode bit 命令所在路径:/usr/bin/chmod 执行权限:所有用户 功能描述:改变文件或目录权限 chmod [OPTION]... OCTAL-MODE FILE... -R: 递归修改权限 chmod [OPTION]... MODE[,MODE]... FILE... MODE: 修改一类用户的所有权限: u= g= o= ug= a= u=,g= 修改一类用户某位或某些位权限 u+ u- g+ g- o+ o- a+ a- + - chmod [OPTION]... --reference=RFILE FILE... 参考RFILE文件的权限,将FILE的修改为同RFILE; 补充:在Linux系统中,默认一个目录权限是755,默认文件权限是644,这是因为umask值的设定,后面会介绍umask。
[root@wzc date]# ls -ld dirb/ drwxr-xr-x. 3 root testgroup 32 Aug 3 20:33 dirb/ #目录权限默认755 [root@wzc date]# ls -l dirb/ total 0 drwxr-xr-x. 2 root testgroup 6 Aug 3 20:30 dirc -rw-r--r--. 1 root testgroup 0 Aug 3 20:33 test.txt #文件默认权限644 [root@wzc date]# chmod 750 dirb/ [root@wzc date]# ls -ld dirb/ drwxr-x---. 3 root testgroup 32 Aug 3 20:33 dirb/ [root@wzc date]# ls -l dirb/test.txt -rw-r--r--. 1 root testgroup 0 Aug 3 20:33 dirb/test.txt [root@wzc date]# chmod -R 700 dirb/ [root@wzc date]# ls -ld dirb/ drwx------. 3 root testgroup 32 Aug 3 20:33 dirb/ [root@wzc date]# ls -l dirb/test.txt -rwx------. 1 root testgroup 0 Aug 3 20:33 dirb/test.txt #chmod命令也支持‘-R’选项,逐级更改,连同目录下的子目录或文件权限一起改为700 [root@wzc date]# chmod u=rwx,og=rx dirb/test.txt [root@wzc date]# ll -l dirb/test.txt -rwxr-xr-x. 1 root testgroup 0 Aug 3 20:33 dirb/test.txt #可以使用u、g、o、a、增加某个权限,当然也就可以减少某个权限,请看下面例子 [root@wzc date]# chmod u-x dirb/test.txt [root@wzc date]# ls -l dirb/ total 0 drwx------. 2 root testgroup 6 Aug 3 20:30 dirc -rw-r-xr-x. 1 root testgroup 0 Aug 3 20:33 test.txt [root@wzc date]# chmod a-x dirb/test.txt [root@wzc date]# ls -l dirb/ total 0 drwx------. 2 root testgroup 6 Aug 3 20:30 dirc -rw-r--r--. 1 root testgroup 0 Aug 3 20:33 test.txt [root@wzc date]# chmod u+x dirb/test.txt [root@wzc date]# ls -l dirb/test.txt -rwxr--r--. 1 root testgroup 0 Aug 3 20:33 dirb/test.txt #这里的‘a’代表所有人,加某个权限,u、g、o都加上某个权限;反之,都减去某个权限或者等于某个权限
补充:
文件目录的权限总结
代表字符 | 权限 | 对文件的含义 | 对目录的含义 |
r | 读权限 | 可以查看文件内容 | 可以列出目录中的内容 |
w | 写权限 | 可以修改文件内容 | 可以在目录中创建、删除文件 |
x | 执行权限 | 可以执行文件 | 可以进入目录 |
umask 新建文件和默认的目录权限 命令名称:umask 命令原意:the user file-creation umask 命令所在路径:shell内置命令 执行权限:所有用户 功能描述:显示、设置文件的缺省权限 umask值 可以用来保留在创建文件权限 新建FILE权限: 666-umask 如果所得结果某位存在执行(奇数)权限,则将其权限+1 新建DIR权限: 777-umask 非特权用户umask是 002 root的umask 是 022 umask: 查看 umask #: 设定 umask 002 umask –S 模式方式显示 umask –p 输出可被调用 全局设置: /etc/bashrc 用户设置: ~/.bashrc [root@wzc date]# umask 0022 #系统默认umask值是是022,umask值是可以修改的 unmask预设是0022,其代表什么含义?先看一下下面的规则: 用户建立为普通文件,则预设 ‘没有可执行权限’, 只有’rw’两个权限。最大为666 (‘-rw-rw-rw-‘) 若用户建立为目录,则预设所有权限均开放,即777 (‘drwxrwxrwx’) umask数值代表的含义为,上边两条规则中的默认值(文件为666,目录为777)需要减掉的权限。所以目录的权限为 'rwxrwxrwx' - '----w--w-' = 'rwxr-xr-x',普通文件的权限为 'rw-rw-rw-' - '----w--w-' = 'rw-r--r--'. umask的值是可以自定义的,比如设定umask 为 002,你再创建目录或者文件时,默认权限分别为 'rwxrwxrwx' - ' -------w-' = 'rwxrwxr-x' 和 'rw-rw-rw-' - '-------w-' = 'rw-rw-r--'
[root@wzc date]# umask 002 [root@wzc date]# mkdir gyy [root@wzc date]# ls -ld gyy/ drwxrwxr-x. 2 root root 6 Aug 3 21:26 gyy/ [root@wzc date]# touch fengjie [root@wzc date]# ls -l fengjie -rw-rw-r--. 1 root root 0 Aug 3 21:26 fengjie #umask值改了,因此创建目录和文件的权限都不和系统预设一样,怎么得到这个权限值这里我就不再细说了, 现在把umask值改回来,这里需要注意的是,umask值只要不写入配置文件的话只是临时生效,登出当前终端 在进入umask值就会变回系统预设的022
[root@wzc date]# umask 022 [root@wzc date]# touch zly [root@wzc date]# ls -l zly -rw-r--r--. 1 root root 0 Aug 3 21:30 zly #root的umask为022,而一般使用者为002,因此可写的权限非常重要,因此会预设去掉写权限
[root@wzc date]# umask -S u=rwx,g=rx,o=rx #以rwx形式显示新建文件缺省权限
Linux文件系统上的特殊权限 在Linux系统上有三个特殊权限:SUID、SGID、Sticky 1.Linux权限模型是由mode和owner组成 mode有:r,w,x owner有:user,group,other 2.安全上下文 前提:进程有属主和属组;文件有属主和属组 (1) 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限 (2) 启动为进程之后,其进程的属主为发起者;进程的属组为发起者所属的组 (3) 进程访问文件时的权限,取决于进程的发起者 (a) 进程的发起者,同文件的属主:则应用文件属主权限 (b) 进程的发起者,属于文件属组;则应用文件属组权限 (c) 应用文件“其它”权限
可执行文件上SUID权限:Set UID SetUID功能:1.只有可以执行的二进制程序才能设定SUID权限 2.命令执行者对改程序具有x(执行)权限 3.命令执行者在执行该程序时获得改程序文件属主的身份 4.SetUID权限只在改程序执行过程中有效 5.passwd命令拥有SetUID权限所以普通用户可以修改自己的密码 [root@wzc date]# which passwd /usr/bin/passwd [root@wzc date]# ll /usr/bin/passwd -rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd 前提:此类文件有可执行权限的命令 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限 启动为进程之后,其进程的属主为原程序文件的属主 SUID只对二进制可执行程序有效 SUID设置在目录上无意义 权限设定: chmod u+s FILE... chmod u-s FILE...
执行文件上SGID权限:Set GID 默认情况下,用户创建文件时,其属组为此用户所属的主组 一旦某目录被设定了SGID,则对此目录有写权限的用户在此 目录中创建的文件所属的组为此目录的属组 通常用于创建一个协作目录 权限设定: chmod g+s DIR... chmod g-s DIR...
Sticky:粘着位 对于一个多人可写的目录,如果设置了sticky,则每个用户仅能删除自己的文件 具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权 在目录设置Sticky 位,只有文件的所有者或root可以删除该文件 sticky 设置在文件上无意义 权限设定: chmod o+t DIR... chmod o-t DIR... 例如: ls -ld /tmp drwxrwxrwt 12 root root 4096 Nov 2 15:44 /tmp
特殊权限数字法 SUID SGID STICKY 000 0 001 1 010 2 011 3 100 4 101 5 110 6 111 7 chmod 4777 /tmp/a.txt 几个权限位映射 SUID: user,占据属主的执行权限位 s: 属主拥有x权限 S:属主没有x权限 SGID: group,占据属组的执行权限位 s: group拥有x权限 S: group没有x权限 Sticky: other,占据other的执行权限位 t: other拥有x权限 T:other没有x权限
设定文件特殊属性 chattr 语法:chattr [+-=] [选项] 文件或目录名 '+-=' 分别是增加、删除、等于 选项: i:如果对文件设置i属性,不允许对文件进行删除、改名,也不能添加和修改数据;如果对目录设置i属性, 那么只能修改目录下文件的数据,但不允许建立和删除文件。 a:如果对文件设置a属性,那么只能在文件中增加数据,但是不能删除也不能修改数据;如果对目录设置a属 性,那么只允许在目录中建立和修改文件,但是不允许删。 A:增加该属性后,文件或目录的atime将不可修改 S:增加该属性后,会将数据同步写入磁盘中 c:自动压缩该文件,读取时会自动解压
[root@wzc date]# chattr +i dirb [root@wzc date]# touch dirb/test touch: cannot touch ‘dirb/test’: Permission denied [root@wzc date]# chattr -i dirb [root@wzc date]# touch dirb/test [root@wzc date]# chattr +i dirb [root@wzc date]# rm -rf dirb/test rm: cannot remove ‘dirb/test’: Permission denied #丢'dirb'目录增加‘i'权限后,即使是root账户也不能在也不在’dirb'进行删除和创建文件
[root@wzc date]# chattr -i dirb [root@wzc date]# touch dirb/test1 [root@wzc date]# ls -l dirb total 0 drwx------. 2 root testgroup 6 Aug 3 20:30 dirc -rw-r--r--. 1 root root 0 Aug 3 22:02 test -rw-r--r--. 1 root root 0 Aug 3 22:07 test1 -rwxr--r--. 1 root testgroup 0 Aug 3 20:33 test.txt [root@wzc date]# chattr +a dirb [root@wzc date]# rm -rf dirb/test1 rm: cannot remove ‘dirb/test1’: Operation not permitted [root@wzc date]# touch dirb/test2 [root@wzc date]# ls -l dirb/ total 0 drwx------. 2 root testgroup 6 Aug 3 20:30 dirc -rw-r--r--. 1 root root 0 Aug 3 22:02 test -rw-r--r--. 1 root root 0 Aug 3 22:07 test1 -rw-r--r--. 1 root root 0 Aug 3 22:09 test2 -rwxr--r--. 1 root testgroup 0 Aug 3 20:33 test.txt #'dirb'目录增加'a'权限后,只能在里面创建文件,而不能删除文件,文件同意适用这些权限
[root@wzc date]# chattr +a dirb/test [root@wzc date]# echo 111 > dirb/test -bash: dirb/test: Operation not permitted [root@wzc date]# echo 111 >> dirb/test [root@wzc date]# cat dirb/test 111 [root@wzc date]# chattr +i dirb/test1 [root@wzc date]# echo 111 > dirb/test1 -bash: dirb/test1: Permission denied [root@wzc date]# echo 111 >> dirb/test1 -bash: dirb/test1: Permission denied [root@wzc date]# rm -rf dirb/test1 rm: cannot remove ‘dirb/test1’: Operation not permitted
查看文件或目录特殊权限 lsattr 语法:lsattr [选项] [文件或目录] 选项: -a:显示所有文件或目录,包括隐藏文件 -R:连同子目录下的数据一同列出 -d:只列出目录本身的属性 [root@wzc date]# lsattr dirb/ ---------------- dirb/dirc ---------------- dirb/test.txt -----a---------- dirb/test ----i----------- dirb/test1 ---------------- dirb/test2 [root@wzc date]# lsattr -aR dirb/ -----a---------- dirb/. ---------------- dirb/.. ---------------- dirb/dirc dirb/dirc: ---------------- dirb/dirc/. -----a---------- dirb/dirc/.. ---------------- dirb/test.txt -----a---------- dirb/test ----i----------- dirb/test1 ---------------- dirb/test2 [root@wzc date]# lsattr -d dirb/ -----a---------- dirb/
访问控制列表 ACL: Access Control List,实现灵活的权限管理 除了文件的所有者,所属组和其它人,可以对更多的用户设置权限 CentOS7.0默认创建的xfs和ext4文件系统有ACL功能。 CentOS7.X之前版本,默认手工创建的ext4文件系统无ACL功能。需手动增加: tune2fs –o acl /dev/sdb1 mount –o acl /dev/sdb1 /mnt ACL生效顺序:所有者,自定义用户,自定义组,其他人
为多用户或者组的文件和目录赋予访问权限rwx 1.mount -o acl /directory 2.getfacl file |directory 3.setfacl -m u:wang:rwx file|directory 4.setfacl -Rm g:sales:rwX directory 5.setfacl -M file.acl file|directory 6.setfacl -m g:salesgroup:rw file| directory 7.setfacl -m d:u:wang:rx directory 8.setfacl -x u:wang file |directory 9.setfacl -X file.acl directory ACL文件上的group权限是mask 值(自定义用户,自定义组,拥有组的最大权限) ,而非传统的组权限getfacl 可看到特殊权限:flags 默认ACL权限给了x,文件也不会继承x权限。 base ACL 不能删除 setfacl -k dir 删除默认ACL权限 setfacl -b file1清除所有ACL权限 getfacl file1 | setfacl --set-file=- file2 复制file1的acl权限给file2
查看ACL命令 getfacle 文件名 #查看acl权限 设定ACL权限命令 setfacl 选项 文件名 选项: -m 设定acl权限 -x 删除指定的acl权限 -b 删除所有acl权限 -d 设定默认acl权限 -k 删除默认acl权限 -R 递归设定acl权限
[root@wzc date]# mkdir lzl [root@wzc date]# useradd xlzl [root@wzc date]# useradd dlzl [root@wzc date]# groupadd stgroup [root@wzc date]# gpasswd -a xlzl stgroup Adding user xlzl to group stgroup [root@wzc date]# gpasswd -a dlzl stgroup Adding user dlzl to group stgrou [root@wzc date]# tail -n 1 /etc/group stgroup:x:1019:xlzl,dlzl [root@wzc date]# chown root:stgroup lzl/ [root@wzc date]# chmod 770 lzl/ [root@wzc date]# ls -ld lzl/ drwxrwx---. 2 root stgroup 6 Aug 4 19:30 lzl/ [root@wzc date]# useradd cangls [root@wzc date]# passwd cangls Changing password for user cangls. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully. [root@wzc date]# setfacl -m u:cangls:rx lzl/ [root@wzc date]# ll -ld lzl/ drwxrwx---+ 2 root stgroup 6 Aug 4 19:30 lzl/ [root@wzc date]# getfacl lzl/ # file: lzl/ # owner: root # group: stgroup user::rwx user:cangls:r-x group::rwx mask::rwx other::--- [root@wzc date]# setfacl -m g:stgroup:rx lzl/ [root@wzc date]# getfacl lzl/ # file: lzl/ # owner: root # group: stgroup user::rwx user:cangls:r-x group::rwx group:stgroup:r-x mask::rwx other::--- #设定与查看ACL权限
msk简介 mask是用来指定最大有效权限的。如果我们给用户赋予了ACL权限,是需要和mask“相与”才能得到用户的真正权限 [root@wzc date]# getfacl lzl/ # file: lzl/ # owner: root # group: stgroup user::rwx user:cangls:r-x group::rwx group:stgroup:r-x mask::rwx other::--- #默认mask的值为最大rwx,ACL权限用户cangls权限为r-x,与mask相与的结果是没有权限的,我们可以通过调整mask的 最大有效权限来达到控制ACL用户权限的特征,请看下面例子。
[root@wzc date]# setfacl -m m:rx xlzl/ [root@wzc date]# getfacl xlzl/ # file: xlzl/ # owner: root # group: wugroup user::rwx user:wangwu:r-x group::rwx #effective:r-x group:wcgroup:rwx #effective:r-x mask::r-x other::--- #虽然所属组wcgroupACL权限有rwx,但是mask得权限为rx,所以所属组的权限为rx。注:mask最大有效权限不影响 当前用户的所有者
mask只影响除所有者和other的之外的人和组的最大权限 Mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission) 用户或组的设置必须存在于mask权限设定范围内才会生效。 setfacl -m mask::rx file --set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能象-m一样只是添加ACL就可以. 如: setfacl --set u::rw,u:wang:rw,g::r,o::- file1
mask最大有效权限总结
A | B | and |
r | r | r |
r | – | – |
– | r | – |
– | – | – |
说明:当A和B都有读权限时,与出来的结果才有读权限;当有一个没有读权限时,与出来的结果是没有读权限的。
备份和恢复ACL 主要的文件操作命令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 #getfacl -R /tmp/dir1
[root@wzc date]# ls xlzl [root@wzc date]# cd xlzl/ [root@wzc xlzl]# touch wj303 [root@wzc xlzl]# touch wj304 [root@wzc xlzl]# setfacl -m u:wangwu:rx /date/xlzl/ [root@wzc xlzl]# ll total 0 -rw-r--r--. 1 root root 0 Aug 4 20:53 wj303 -rw-r--r--. 1 root root 0 Aug 4 20:53 wj304 [root@wzc xlzl]# ls -ld /date/xlzl/ drwxrwx---+ 2 root wugroup 30 Aug 4 20:53 /date/xlzl/ [root@wzc xlzl]# setfacl -m u:wangwu:rx -R /date/xlzl/ [root@wzc xlzl]# ll total 8 -rw-r-xr--+ 1 root root 0 Aug 4 20:53 wj303 -rw-r-xr--+ 1 root root 0 Aug 4 20:53 wj304 #'-R'选项是递归的意思,把目录下的文件直接赋予ACL权限,注意:'-R选项只能放在后面'
原创文章,作者:RecallWzc,如若转载,请注明出处:http://www.178linux.com/27929