linux 权限

本篇权限分两个部分介绍。

1,用户、组;

2,文件权限;

第一个部分主要介绍用户与组的创建、删除、修改、查询。以及这些信息的存储位置。第二部分介绍文件、文件夹的权限。以及uid、gid、bit。

一,linux用户与组

Linux用户与组信息存储位置:

  用户信息文件:    /etc/passwd  文件配置规则:用户名:密码占位符:用户ID:组ID:一般的信息:家目录:默认登入shell
  密码文件:           /etc/shadow   文件配置规则:用户名:加密的密码:最后一次修改密码的日期:密码最小年龄:密码最大年龄:密码警告时间段:密码禁用期:账户过期
  用户组文件:        /etc/group      文件配置规则:组名:密码占位符:组ID:组用户
  用户组密码文件: /etc/gshadow 
  用户配置文件:     /etc/login.defs    /etc/default/useradd
  新用户信息文件:  /etc/skel
  登录信息:             /etc/motd

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 目录名

    

    

原文地址:https://www.cnblogs.com/hf-china/p/10579642.html