本篇权限分两个部分介绍。
1,用户、组;
2,文件权限;
第一个部分主要介绍用户与组的创建、删除、修改、查询。以及这些信息的存储位置。第二部分介绍文件、文件夹的权限。以及uid、gid、bit。
一,linux用户与组
Linux用户与组信息存储位置:
1,用户
1.1 创建用户的两个命令:adduser与useradd。每个命令详情通过 -h查看。
root@hf-vm:/home# adduser hf2 root@hf-vm:/home# useradd -m -s '/bin/bash' hf3 root@hf-vm:/home# ls -l /home/ drwxr-xr-x 2 hf1 hf1 4096 3月 22 10:38 hf1 drwxr-xr-x 2 hf2 hf2 4096 3月 22 10:58 hf2 drwxr-xr-x 2 hf3 hf3 4096 3月 22 10:59 hf3
1.2 查看用户信息命令 id与finger
root@hf-vm:/home# id hf3 uid=1003(hf3) gid=1004(hf3) 组=1004(hf3)
root@hf-vm:/home# finger hf2 Login: hf2 Name: Directory: /home/hf2 Shell: /bin/bash Never logged in. No mail. No Plan.
1.3 删除用户命令userdel
root@hf-vm:/home# userdel -l userdel: 不适用的选项 -- l 用法:userdel [选项] 登录 选项: -f, --force 即使不属于此用户,也强制删除文件 -h, --help 显示此帮助信息并推出 -r, --remove 删除主目录和邮件池 -R, --root CHROOT_DIR chroot 到的目录 -Z, --selinux-user 为用户删除所有的 SELinux 用户映射 root@hf-vm:/home# userdel -r hf2 root@hf-vm:/home# ls -l /home/ drwxr-xr-x 2 hf1 hf1 4096 3月 22 10:38 hf1 drwxr-xr-x 2 hf3 hf3 4096 3月 22 10:59 hf3 drwxr-xr-x 18 hufeng hufeng 4096 3月 22 08:50 hufeng
1.4 修改用户信息usermod
root@hf-vm:/home# usermod -h 用法:usermod [选项] 登录 选项: -c, --comment 注释 GECOS 字段的新值 -d, --home HOME_DIR 用户的新主目录 -e, --expiredate EXPIRE_DATE 设定帐户过期的日期为 EXPIRE_DATE -f, --inactive INACTIVE 过期 INACTIVE 天数后,设定密码为失效状态 -g, --gid GROUP 强制使用 GROUP 为新主组 -G, --groups GROUPS 新的附加组列表 GROUPS -a, --append GROUP 将用户追加至上边 -G 中提到的附加组中, 并不从其它组中删除此用户 -h, --help 显示此帮助信息并推出 -l, --login LOGIN 新的登录名称 -L, --lock 锁定用户帐号 -m, --move-home 将家目录内容移至新位置 (仅于 -d 一起使用) -o, --non-unique 允许使用重复的(非唯一的) UID -p, --password PASSWORD 将加密过的密码 (PASSWORD) 设为新密码 -R, --root CHROOT_DIR chroot 到的目录 -s, --shell SHELL 该用户帐号的新登录 shell -u, --uid UID 用户帐号的新 UID -U, --unlock 解锁用户帐号 -v, --add-subuids FIRST-LAST add range of subordinate uids -V, --del-subuids FIRST-LAST remove range of subordinate uids -w, --add-subgids FIRST-LAST add range of subordinate gids -W, --del-subgids FIRST-LAST remove range of subordinate gids -Z, --selinux-user SEUSER 用户账户的新 SELinux 用户映射 root@hf-vm:/home# usermod -l 'test' hf3 root@hf-vm:/home# finger hf3 finger: hf3: no such user. root@hf-vm:/home# finger test Login: test Name: Directory: /home/hf3 Shell: /bin/bash Never logged in. No mail. No Plan.
修改用户的登入shell还可以使用 chsh (change shell)命令。其用法为 chsh USERNAME
可以用pwck来检查用户账号的完整性。
1.5 修改用户密码 passwd
root@hf-vm:/home# passwd -h 用法:passwd [选项] [登录] 选项: -a, --all 报告所有帐户的密码状态 -d, --delete 删除指定帐户的密码 -e, --expire 强制使指定帐户的密码过期 -h, --help 显示此帮助信息并推出 -k, --keep-tokens 仅在过期后修改密码 -i, --inactive INACTIVE 密码过期后设置密码不活动为 INACTIVE -l, --lock 锁定指定的帐户 -n, --mindays MIN_DAYS 设置到下次修改密码所须等待的最短天数 为 MIN_DAYS -q, --quiet 安静模式 -r, --repository REPOSITORY 在 REPOSITORY 库中改变密码 -R, --root CHROOT_DIR chroot 到的目录 -S, --status 报告指定帐户密码的状态 -u, --unlock 解锁被指定帐户 -w, --warndays WARN_DAYS 设置过期警告天数为 WARN_DAYS -x, --maxdays MAX_DAYS 设置到下次修改密码所须等待的最多天数 为 MAX_DAYS root@hf-vm:/home# passwd test 输入新的 UNIX 密码: 重新输入新的 UNIX 密码: passwd:已成功更新密码
2,组
2.1,创建组groupadd
root@hf-vm:/home# groupadd -h 用法:groupadd [选项] 组 选项: -f, --force 如果组已经存在则成功退出 并且如果 GID 已经存在则取消 -g -g, --gid GID 为新组使用 GID -h, --help 显示此帮助信息并推出 -K, --key KEY=VALUE 不使用 /etc/login.defs 中的默认值 -o, --non-unique 允许创建有重复 GID 的组 -p, --password PASSWORD 为新组使用此加密过的密码 -r, --system 创建一个系统账户 -R, --root CHROOT_DIR chroot 到的目录 --extrausers Use the extra users database root@hf-vm:/home# groupadd test root@hf-vm:/home# cat /etc/group test:x:1005:
2.2 组的信息修改groupmod
root@hf-vm:/home# groupmod -h 用法:groupmod [选项] 组 选项: -g, --gid GID 将组 ID 改为 GID -h, --help 显示此帮助信息并推出 -n, --new-name NEW_GROUP 改名为 NEW_GROUP -o, --non-unique 允许使用重复的 GID -p, --password PASSWORD 将密码更改为(加密过的) PASSWORD -R, --root CHROOT_DIR chroot 到的目录 root@hf-vm:/home# groupmod -n 'test1' test root@hf-vm:/home# cat /etc/group test1:x:1005:
2.3,组密码修改 gpasswd
root@hf-vm:/home# gpasswd -h 用法:gpasswd [选项] 组 选项: -a, --add USER 向组 GROUP 中添加用户 USER -d, --delete USER 从组 GROUP 中添加或删除用户 -h, --help 显示此帮助信息并推出 -Q, --root CHROOT_DIR 要 chroot 进的目录 -r, --remove-password 移除组 GROUP 的密码 -R, --restrict 向其成员限制访问组 GROUP -M, --members USER,... 设置组 GROUP 的成员列表 -A, --administrators ADMIN,... 设置组的管理员列表 除非使用 -A 或 -M 选项,不能结合使用这些选项。 root@hf-vm:/home# gpasswd -a test test1 root@hf-vm:/home# cat /etc/group test1:x:1005:test root@hf-vm:/home# gpasswd -d test test1 test1:x:1005:
二,文件权限
首先看个实例
-rw-rw-r-- 1 hf1 hf1 0 3月 22 08:54 file01
drwxrwxrwt 2 root root 4096 3月 22 08:49 .font-unix/
前面10个字符确定文件权限:
第一个字符代表文件类型: - 文件 , d 目录,l 链接
其余字符3个一组,分别代表 u(用户) , g(组) , o(其它) 。每组单个字符有:r (读) , w(写),x(可执行)。
例如 drwxrwxrwt 2 root root 4096 3月 22 08:49 .font-unix/ :
第一个符d 代表目录
第一组rwx代表所属用户root具有读写可执行权限
第二组rwx代表所属组root具有读写可执行权限
第三组rwt代表其它用户具有读写,t 代表粘着位只对文件夹起作用。代表该文件夹下只有root可以删除所有文件,其它用户只能删除自己创建的文件。
2 代表连接的文件数
root 代表用户
root 代表用户组
4096 代表文件大小
3月22 08:49 代表创建时间
.font-unix/文件名
上述权限也可以用数字表示:r=4,w=2,x=1。因此rwx=7
2.1,改变文件权限的命令chmod
格式语法: chmod [u|g|o|a][+|-|=][r|w|x] 文件名
例如 -rw-rw-r-- 1 hf1 hf1 0 3月 22 08:54 file01 :
修改用户以及组权限为只读 chmod u-w,g-w file01
2.2,改变所有者命令chown
改变用户组命令chgrp
2.3,SetUID、SetGID、Sticky BIT介绍
2.3.1,SetUID
只有可以执行的二进制程序才能设定SetUID权限,并且命令执行者要对该程序拥有x(执行)权限。
例如:passwd命令,它是一个可执行文件。s表示这个命令具有root用户的权限。
root@hf-vm:/tmp# ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 59640 1月 25 2018 /usr/bin/passwd
我们再看/etc/shadow、/etc/passwd文件的权限以及useradd的权限。
-rw-r--r-- 1 root root 2538 3月 22 11:15 /etc/passwd -rw-r----- 1 root shadow 1640 3月 22 11:19 /etc/shadow root@hf-vm:/tmp# ls -l /usr/sbin/useradd -rwxr-xr-x 1 root root 126240 1月 25 2018 /usr/sbin/useradd
由以上可以看出,普通用户具有调用passwd命令修改密码的权限。然后passwd是以root用户去执行的,因此具有修改/etc/passwd文件的权限。但是普通用户没有添加用户的权限。
设置与取消setuid的方法:
在所有者权限之前加上 4 代表SetUID,设定方法为:chmod 4755 文件名,相应的取消 SetUID 方法为:chmod 755 文件名。
还有设定方法为: chmod u+s 文件名,相应的取消 SetUID 方法为:chmod u-s 文件名。
2.3.2,SetGID
普通用户必须对一个目录拥有r和x权限,才能进入此目录。对于设定了 SetGID 权限的目录来说,普通用户在此目录中的有效组会变成此目录的所属组,若普通用户对此目录拥有w权限时,在目录中新建的文件的默认所属组是这个目录的所属组。
xx@hf-vm:/tmp$ mkdir test drwxrwxr-x 2 xx xx 4096 3月 22 16:08 test/ xx@hf-vm:/tmp$ chmod g+s test/ drwxrwsr-x 2 xx xx 4096 3月 22 16:08 test/ xx@hf-vm:/tmp$ chmod 777 test/ drwxrwsrwx 2 xx xx 4096 3月 22 16:08 test/ xx@hf-vm:/tmp$ su hf1 hf1@hf-vm:/tmp/test$ touch t1 -rw-rw-r-- 1 hf1 xx 0 3月 22 16:17 t1
设定与取消 SetGID 的方法如下:
在所有者权限之前加上 2 代表SetGID,设定方法为:chmod 2755 文件名,相应的取消 SetGID 方法为:chmod 755 文件名。
还有设定方法为: chmod g+s 文件名,相应的取消 SetGID 方法为:chmod g-s 文件名。
2.3.3,Sticky BIT
Sticky BIT 表示的是粘着位,主要是用来避免其他用户对文件的误操作。粘着位目前只对目录有效,普通用户要对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限。如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一但赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限也只能删除自己建立的文件,但是不能删除其他用户建立的文件。
drwxrwxrwt 16 root root 4096 3月 22 16:17 tmp/ hf1@hf-vm:/$ ls -l tmp/ -r--r--r-- 1 hf1 hf1 0 3月 22 08:54 file01 drwxrwsrwx 2 xx xx 4096 3月 22 16:17 test hf1@hf-vm:/$ rm -rf /tmp/test rm: 无法删除'/tmp/test': 不允许的操作 hf1@hf-vm:/$ rm -rf file01
设置与取消粘着位 Sticky BIT 权限如下:
设置粘着位 :chmod 1777 目录名 或 chmod o+t 目录名
取消粘着位 :chmod 777 目录名 或 chmod o-t 目录名