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

        

        

  • 相关阅读:
    flock对文件锁定读写操作的问题 简单
    hdu 2899 Strange Fuction(二分)
    hdu 2199 Can you solve this equation? (二分)
    poj 3080 Blue Jeans (KMP)
    poj 2823 Sliding Window (单调队列)
    poj 2001 Shortest Prefixes (trie)
    poj 2503 Babelfish (trie)
    poj 1936 All in All
    hdu 3507 Print Article (DP, Monotone Queue)
    fzu 1894 志愿者选拔 (单调队列)
  • 原文地址:https://www.cnblogs.com/hf-china/p/10579642.html
Copyright © 2011-2022 走看看