zoukankan      html  css  js  c++  java
  • 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 目录名

        

        

  • 相关阅读:
    电位器的使用
    序言
    跨域之options请求详解
    redis config 实现切库 和指定序列化
    巨坑! druid1.1.0
    跨域问题解决
    canal解决缓存穿透 对数据库同步数据至redis 或EleasticSearch
    oauth2+spring security +jwt 完成分布式服务认证
    oauth2的数据库设计
    Gson 转换 Localdate 使用 GsonBuilder setDateFormat 无效
  • 原文地址:https://www.cnblogs.com/hf-china/p/10579642.html
Copyright © 2011-2022 走看看