zoukankan      html  css  js  c++  java
  • 用户、群组和权限

    1. 用户

    1.1 /etc/passwd 文件结构

    /etc/passwd 文件保存着所有的用户信息,其文件结构是这样的:

    每一行代表一个账号,有几行即表示有几个账号在你的系统中,以冒号为分隔符,分为七段。里面有很多账号是系统运行所必须的,不能杀掉,可以称之为系统账号,如(bin、daemon、adm、nobody等)

    root:x:0:0: root: /root: /bin/bash
    
    • root:用户名
    • x:用户密码(x 表示占位,不在这里显示,为了安全)
    • uid(user id):为 0 则表示有 root 用户的权限,即第一个用户
    • gid(group id):
    • root:用户描述信息
    • /root:(root 用户的)家目录
    • /bin/bash:登录后的可执行文件(只要是 /bin/bash 表示可以登录操作系统,sbin/nologin 表示不能登录操作系统)
    • uid、gid:500 以前的是系统占用,500以后的是新创建的用户使用

    其中 tom、lucy 为新创建的用户,描述信息为空,都可以登录

    1.2 /etc/shadow 文件结构

    用来存放用户的密码口令

    程序的运行需要权限,而权限和 UID/GID 有关,因此就需要读取不同账号的权限。/etc/passwd 的权限配置为 -rw-r--r--,早起将口令放在 /etc/passwd 的第二个字段上,容易被窃取,因此移到 /etc/shadow 上,并加密处理。

    [root@www ~]# head -n 4 /etc/shadow
    root:$1$/30QpE5e$y9N/D0bh6rAACBEz.hqo00:14126:0:99999:7:::  <==底下说明用
    bin:*:14126:0:99999:7:::
    daemon:*:14126:0:99999:7:::
    adm:*:14126:0:99999:7:::
    

    以 【:】为分隔符,总共为九段,每段的用途是这样的:

    1. root(账户名称):

      与 /etc/passwd 相同

    2. 口令:

      密码,默认权限为 【-rw------】或 【-r-------】,只有 root 才能读写,【!】表示没有设置密码

    3. 最近更改口令的日期:

      14216,是从 1970 年 1 月 1 日作为 1 累加的日期,要知道某个日期的累积日数, 可使用如下的程序计算:

      [root@www ~]# echo $(($(date --date="2008/09/04" +%s)/86400+1))
      14126
      

      上述命令中,2008/09/04 为你想要计算的日期,86400 为每一天的秒数, %s 为 1970/01/01 以来的累积总秒数。 由于 bash 仅支持整数,因此最终需要加上 1 补齐 1970/01/01 当天。

    4. 口令不可更改的天数:

      表示最近一次更改后要再过多少天才能被更改,若 为 0,表示随时可以改动

    5. 口令需要重新变更的天数:

      即口令的过期时间,9999 (273年)

    6. 口令需要变更期限前的警告天数:

      在口令过期前,提醒你,7 表示还有 7天过期

    7. 口令过期后的账户宽限时间(口令失效日):

      口令失效后,能够宽限几日,即该账户几日后再也无法登陆

    8. 账户的失效日期:

      可以规定一个日期使账户不能再使用,通常用在 【收费服务中】

    9. 保留:

      最后一个字段是保留,看以后是否有新功能加入。

    1.3 用户账号管理

    1.3.1 useradd 命令

    创建一个新的用户

    语法:

    useradd 账户名
    

    常用选项:

    • -u:指定用户 uid
    • -g:指定用户所属群组
    • -d:指定用户的家目录
    • -c:指定用户的备注信息
    • -s:指定用户的 shell

    示例:

    useradd -u 666 -g police -s /bin/bash user01
    
    sudo useradd rose		# 创建新用户 rose
    sudo passwd rose		# 设置密码
    
    # 要使新用户有 root 权限
    sudo vim /etc/sudoers
    # 修改文件如下:
    # User privilege specification
    root	ALL=(ALL:ALL) ALL
    rose	ALL=(ALL:ALL) ALL
    
    cat /etc/passwd		# 查看用户列表
    sudo userdel -r rose	# 删除新用户
    
    su rose		# 切换用户
    su root		# 切换到 root 
    

    1.3.2 id 命令

    查看用户,结果包含 uid、gid、以及组成员(默认包含自己)

    语法:

    id 用户名
    

    示例:

    id lucy		# 用户名		
    uid=501(lucy) gid=501(lucy) 组=501(lucy)		# 后面的组,为组员
    
    # 将用户 tom 添加到 组lucy 中,查看lucy,显示的组员还是只有 lucy,没有 tom,因为 lucy 只属于 lucy 组
    id lucy
    uid=501(lucy) gid=501(lucy) 组=501(lucy)
    
    id tom
    uid=502(tom) gid=502(tom) 组=502(tom),501(lucy)
    

    注意:创建用户时,影响的有六个文件分别为:家目录(/home/)、用户信息(/etc/passwd)、用户密码(/etc/shadow)、群组(/etc/group)、群组密码(/etc/gshadow)、邮箱(/var/spool/mail/用户名)

    1.3.3 userdel 命令

    删除用户

    语法:

    userdel 用户名
    userdel -r 用户名		# 加上能 -r 能删除干净(推荐使用)
    

    1.3.4 usermod 命令

    修改用户(user modify)

    语法:

    usermod [选项] 用户名		# 选项与 useradd 一致
    
    

    示例:

    # 修改用户的家目录
    usermod -d /home/test alex		# 将 alex 的家目录修改为 test
    
    mkdir /home/test		# 创建一个家目录 test
    cp -r /home/alex/.[!.]*  /home/test/	# 将alex 中的隐藏文件全部复制到 text 中
    
    

    注意:在使用 usermod 命令修改用户的家目录时,修改的只是 /etc/passwd 中的配置文件。但是在家目录下并没有一个修改后的家目录,需要重新创建一个家目录(test),否则无法切换用户。

    添加组员:

    # 覆盖形式
    usermod -G group2 group1	# 将 group1 添加到 group2 中
    
    # 追加形式
    usermod -aG group2 group1
    
    

    锁住、解锁用户:

    usermod -L	# 锁住
    usermod -U	# 解锁
    
    

    2. 群组

    2.1 /etc/group 文件结构

    记录 GID 与 组名的对应,以【:】为分隔符,分为四组:

    root:x:0:
    tom:x:500:
    
    
    • 组名:组名与用户名一致,在创建用户的时候也创建了一个相同名字的群组

    • 密码:用 x 占用,移动到 /etc/gshadow中

    • GID:群组 ID

    • 此群组支持的账户名称:一个账户可以加入多个群组,要想加入某个群组,直接在最后面追加即可,如:

      root:x:0:tom
      
      

    2.2 群组管理

    2.2.1 groupadd 命令

    创建一个新的群组账户

    语法:

    groupadd [选项] 群组用户名
    groupadd -g 	# 指定群组 gid
    
    

    2.2.2 groupmod 命令

    修改一个群组的账户信息

    语法:

    groupmod [选项] 群组用户名
    groupmod -g	520 tom	# 修改群组 tom 的 gid 为 520
    groupmod -n		# 修改群组的名称
    
    

    2.2.3 groupdel 命令

    删除一个群组账户

    语法:

    groupdel  群组账号
    groupdel test
    
    

    3. 权限管理

    3.1 文件权限管理

    3.1.1 查看文件权限

    [root@localhost ~]# ls -l		或 ll
    drwxr-xr-x.  2  root  root	4096	10月	14 20::15  aaa
    # 【.】 表示在安全状态下创建的文件(由selinux管理安全)
    
    

    总共分为七组,分别为:“权限信息、硬链接数、属主、属组、文件大小、文件创建日期和文件名

    3.1.2 权限信息

    除开 【.】,总共 10 位,分为四组

    drwxr-xr-x			# 表示这是一个目录文件,属主有可读、写、执行权限,属组和其他用户有可读、执行权限,但没有写权限
    -rw-------
    
    
    • 第1位:文件类型

    不同字符表示文件类型不一样,常见的字符如下:

    字符 - d l b c p
    说明 普通文件 目录文件 软链接 块设备文件(如硬盘) 字符设备文件 管道文件
    • 第2 - 4位:属主的权限(文件所有者)
    • 第5 - 7位:属组权限(文件所属组)
    • 第8 - 10位:其他用户权限

    注意:上面例子中,文件 aaa 属于 root(属主,即是它的主人),root 对其有一定的权限

    在 Linux 中,每个文件都有所属的所有者和所有组,并规定了文件的所有者、所有组以及其他人对文件的可读(r)、可写(w)、可执行(x)等权限,也可以用数字表示,如下表:

    权限分配 文件所有者 文件所属组 其他用户
    权限项 执行 执行 执行
    字符表示 r w x r w x r w x
    数字表示 4 2 1 4 2 1 4 2 1

    数字为简化权限的表示,若某个文件的权限为 7,表示有可读、写、执行权限(4+2+1),权限为 6,表示有可读、写,没有执行权限(4 +2)。rwxrw-r--用数字表示为 764

    注意:root 用户和用户本身对权限没有限制,即使是可读文件,也能编辑并强制保存,其他用户不可以

    3.1.3 chmod 命令

    用于修改文件权限,【u】表示属主、【g】表示属组、【o】表示其他用户

    语法:

    chmod u-rwx		# 减法(表示去掉读、写、执行权限)
    chmod u+rwx		# 加法(表示设置为有读、写、执行权限)
    chmod u=rwx		# 赋值
    chmod u=---		# 赋值
    chmod g=-			# 赋值简写,表示三个 - 
    
    

    注意:只有属主和 root 才有修改文件权限,其他人和数组都没有修改权限

    将组员添加到别的组中,将会拥有那个组的权限,需要重新登录用户

    3.1.4 执行文件方法

    当一个文件中有命令时,可以用命令执行这个文件,文件中的命令也将被执行,前提是这个用户对这个文件有可执行权限。

    sh 文件路径
    bash 文件路径
    . 文件路径
    ./ 文件路径
    
    

    示例:

    # a.txt 中的命令
    echo 'hello world'
    pwd
    
    ./a.txt		# 执行文件
    
    

    注意:对文件具有 w 权限,不可以删除文件,删除文件是目录的权限范围,文件权限仅对文件内容本身起作用

    3.2 目录权限管理

    3.2.1 查看目录文件权限

    ll -d /tmp
    drwxr-xr-x.  2  root  root	4096	10月	14 20::15  /tmp/
    
    
    • r:可以查看该目录下的子文件名,子目录名
    • w:可以在该目录下创建、删除、迁移、重命名(修改文件内容,是文件权限)
    • x:可以 cd 到该目录下

    去掉可执行权限:

    [root@hj tmp]# ll -d test
    drwxr-xr-x. 2 root root 4096 10月 15 19:07 test
        
    [root@hj tmp]# chmod o-x test		# 去掉 test 可执行权限
    [root@hj tmp]# ll -d test
    drwxr-xr--. 2 root root 4096 10月 15 19:07 test
        
    [root@hj tmp]# su - tom			# 切换为用户 tom
    [tom@hj ~]$ cd /tmp/test
    -bash: cd: /tmp/test: 权限不够
    
    
    

    注意:开放目录给其他人,至少需要赋予 r 或 x 权限,读取目录内容需要开启 r 和 x 权限,新建、删除需要 x 和 w 权限

    3.3 属主及属组

    3.3.1 chown 命令

    修改属主、属组,(change owner)

    语法:

    chown [参数] 属主:属组 文件或目录
    chown 属主.属组 文件或目录	# 属主属组都修改
    chown 属主 文件或目录		# 只修改属主
    chown .属组 文件或目录		# 只修改属组
    chown -R 属主.属组 文件或目录		# 递归修改权限,即对目录下的所有目录和文件进行整体修改
    
    

    注意:修改属主和属组的时候,需要在 root 用户下才能修改,普通用户会提示:“chown: 正在更改"xxx" 的所有者: 不允许的操作”

  • 相关阅读:
    Could A New Linux Base For Tablets/Smartphones Succeed In 2017?
    使用libhybris,glibc和bionic共存时的TLS冲突的问题
    6 Open Source Mobile OS Alternatives To Android in 2018
    Using MultiROM
    GPU drivers are written by the GPU IP vendors and they only provide Android drivers
    Jolla Brings Wayland Atop Android GPU Drivers
    How to Use Libhybris and Android GPU Libraries with Mer (Linux) on the Cubieboard
    闲聊Libhybris
    【ARM-Linux开发】wayland和weston的介绍
    Wayland and X.org problem : Why not following the Android Solution ?
  • 原文地址:https://www.cnblogs.com/midworld/p/11049525.html
Copyright © 2011-2022 走看看