linux用户身份和文件权限

时间:2024-01-16 10:00:02

1.用户身份与能力

  root管理员是linux 的超级用户,他拥有系统的所有权,能够管理系统的各项功能,如添加/删除用户,启动/关闭服务进程,开启/禁用硬件设备……

  "Linux系统中的管理员就是root",这句话是错误的,Linux系统管理员之所以是root,并不是因为他叫root,而是因为用户的身份号码(UID)的数值为0,。UID相当于是身份证号,其用户身份大致分为:

  • UID=0:系统的管理员用户。
  • 1<=UID<=999:系统用户,服务程序会有独立的系统用户负责运行。
  • UID>=1000:普通用户,有管理员创建用于日常工作的用户。

  用户组:我们可以把多个用户加入到同一个用户组,从而便于为组中的用户统一规划权限或指定任务。另外,在管理员创建用户时,将为该用户自动创建一个与其同名的基本用户组,而且这个基本用户组只有该用户一个人,如果该用户以后被归纳到其他的用户组,则这些其他用户组对该用户来说是扩展用户组。

1.1 useradd命令

  创建新用户,格式:useradd [option] 用户名

  创建新用户时,默认的用户家目录会被存放在/home目录中,默认的Shell解释器为/bin/bash,而且默认会创建一个与该用户同名的基本用户组。其中option:

参数 作用
-d 指定用户的家目录(默认为/home/username)
-u 指定该用户的默认UID
-g 指定一个初始的用户基本组(已存在的)
-G 指定一个或多个扩展用户组
-N 不创建与用户同名的基本用户组
-s 指定默认的默认Shell解释器
$ useradd -u  hah
$ id hah
uid=(hah) gid=(hah) groups=(hah)

1.2 groupadd 命令

  用于创建用户组,格式为 groupadd [option] groupname

$ groupadd  haha

1.3 usermod 命令

  usermod用于修改用户的属性,格式为usermod [option] username

  其中option:

参数 作用
-c 填写用户账户的备注信息
-d -m 二者连用,可重新指定用户的家目录并自动把旧的数据转移过去
-g 变更所属用户组
-G 变更扩展用户组
-L 锁定用户禁止登陆系统
-U 解锁用户
-s 变更默认终端
-u 修改用户的UID
$ id hah
uid=(hah) gid=(hah) groups=(hah)
$ usermod -G root hah
$ id hah
uid=(hah) gid=(hah) groups=(hah),(root)
$ usermod -u hah
uid=(hah) gid=(hah) groups=(hah),(root)

1.4 passwd 命令

  修改用户密码,格式为passwd [option] username

  其中option:

参数 作用
-d 使该用户可用空密码登录系统
-e 强制用户在下次登录时修改密码

  另外,普通用户只能用来修改自身密码,而root管理员则有权限修改其他所有用户的密码,而且不需要输入旧密码验证。

$ passwd
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
$ passwd hah
Changing password for user limingxing.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

1.5 userdel 命令

  删除用户,格式userdel [option] username

其中option:

参数 作用
-f 强制删除用户
-r 同时删除用户和用户家目录

2.文件权限与归属

linux中文件类型不尽相同:

  • -:普通文件
  • d:目录文件
  • l:链接文件
  • b:块设备文件
  • c:字符设备文件
  • p:管道文件

  每个文件都有所属的所有者和所有组,以及所有者,所有组和其他人对文件的可读(r)、可写(w)、可执行(x)的权限。

  文件的读、写、执行权限可以简写为rwx,也可分别用数字4、2、1表示。

  文件权限的数字法表示基于字符表示权限计算而来,例如某文件的权限为7(4+2+1)代表可读可写可执行,6(4+2)代表可读可写。

  在linux系统中,查看文件的权限时,其表示方法为rwxrwxrwx。例如某文件的所有者权限为rwx,所有组权限为rw,其他人为r,那么则表示为rwxrw-r--,数组表示为764。

linux用户身份和文件权限

补充:在创建一个普通文件时,其默认权限是rw-r--r--。

2.1chmod命令和chown命令:

  chmod用来设置文件或目录的权限,格式为chmod [option] 权限 文件或目录名称

  如果把一个文件权限设置为任何人可读可写可执行,则执行: 

$ chmod -Rf  text.txt

  -R表示递归其子目录,-f表示 若无权限操作该文件时不显示报错信息。 

  chown用来设置文件的所有者和所有组,格式为: chown [option] 所有者:所有组 文件或目录名称

3.su命令与sudo服务

  su命令用于切换用户身份,使得当前用户在不退出登录的情况下,顺畅地切换到其他用户:

$ su - username

  su 和用户名之间的 ‘-’ 表示完全切换到新的用户,即把环境变量信息也变为新用户的相应信息,而不是保留原始的信息。另外,当从root用户切换到其他用户时不需要进行密码验证,而从普通用户到root用户需要验证密码。

  上述普通用户需要进行特殊权限时需要登录到root用户,这样就容易泄露root用户密码,而sodu命令可以把特定命令的执行权赋予给指定的用户。

  sudo命令用于给普通用户提供额外的权限来完成原本root管理员才能完成的任务,格式为sudo [option] 命令名称。

  该命令可以使得我们的当前用户以另外一个用户的身份去执行某个命令,但是并不需要切换到目标用户的身份,只不过在执行对应命令的那一刻,当前用户暂时拥有了目标用户的权限,这种机制有一点类似于SUID,二者同样表示的都是在执行命令的时候使用的不是当前用户的身份而是目标用户的身份,而且不用切换至目标用户的身份,却可以以目标用户的身份去执行某条命令,但是当前用户使用sudo所能执行的命令仅仅限于目标用户定义给当前用户的那些命令,其它未定义的命令就算使用了sudo也不能使用,事实上sudo就是用来定义某个用户能够以目标用户(未必是管理员,但是该用户我们可以自己指定)的身份通过某主机执行某条命令的机制,说的通俗一点就是谁可以以另外哪一个人的身份在哪个主机上执行哪个命令,但是这种机制有一种安全措施,只要某用户想要使用目标用户定义给他的可以使用的管理系统类命令的时候,必须向服务器提供他自己的密码,这种安全机制可以防范别人恶意冒充某用户使用sudo利用目标用户的身份去执行一些系统管理类的命令,以上就是sudo提供给我们的所有管理功能,总的来说,sudo的功能就是管理员所有可以执行的命令或者其他用户所有可以执行的命令都可以授权给另外一个用户来执行,一般来讲我们使用sudo的时候,都是将管理员用户的身份授权给其他用户来执行一些系统管理类命令。

(摘自:https://blog.51cto.com/zhubo/1883195)

  其中option:

参数 作用
-h 列出帮助信息
-l 列出当前用户可执行的命令
-u用户名或UID 以指定的用户身份执行命令
-k 清空密码的有效时间,下次执行sudo时需要再次进行密码验证
-b 在后台执行指定的命令
-p 更改询问密码的提示语

  sudo的配置文件:

   sudo的配置文件是/etc/sudoers,这个文件的安全性很重要,所以为了避免其他用户查看该文件,这个文件的权限是440:

$ ls -l /etc/sudoers
-r--r----- root root Apr : /etc/sudoers

文件时只读的,linux提供visudo命令来修改此文件中的内容,此命令与vim编辑器一样,

/etc/sudoers这个配置文件的语法格式其实很简单,如果不是语法自身的某些关键字定义的某些功能的话,那么它的每一行通常表示定义了一个sudo条目,而一个sudo条目其实就是定义了哪个用户能够以另外哪个用户的身份在哪些主机上执行哪些命令的意思。而且此文件中有大量的注释信息供我们参考和理解。

sudo条目的语法格式

who(谁)  which_hosts(能够在哪些主机上)=(runas(以谁的身份))  COMMAND(运行哪些命令)

例如在

root    ALL=(ALL)       ALL #100行左右

后面加上

hah     ALL=(ALL)       ALL

则hah用户可以使用sudo执行任何的命令。

  但是考虑到生产环境中不允许某个用户拥有系统中所有命令的最高执行权,因此ALL参数就不合适了。因此只能赋予普通用户具体的命令以满足工作需求即可。如果需要让某个用户只能使用root管理员的身份执行指定的命令,切记一定要给出该命令的绝对路径,否则系统识别不出。我们可以试用whereis命令找出命令所对应的保存路径,例如:

$ whereis cat
cat: /usr/bin/cat /usr/share/man/man1/cat..gz
$ visudo
...
root ALL=(ALL) ALL
hah ALL=(ALL) /usr/bin/cat
...
$ su - hah
hah$ sudo cat text.txt
[sudo] password for hah:
.....

  如果有其他需求的话,可以按照注释内容进行配置。