用户、群组和权限

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" 的所有者: 不允许的操作”

原文地址:https://www.cnblogs.com/midworld/p/11049525.html