二、用户身份与文件权限( 八 )


另外,当从 root 管理员切换到普通用户时是不需要密码验证的,而从普通用户切换成 root管理员就需要进行密码验证了;这也是一个必要的安全检查:
[centos@localhost ~]$ su rootPassword: [root@localhost centos]# su - centosLast login: Thu Jan 14 12:03:01 EST 2021 on pts/0[centos@localhost ~]$ exitlogout
尽管像上面这样使用 su 命令后,普通用户可以完全切换到 root 管理员身份来完成相应工作,但这将暴露 root 管理员的密码,从而增大了系统密码被黑客获取的几率;这并不是最安全的方案 。
最安全的方案是使用sudo 命令把特定命令的执行权限赋予给指定用户,这样既可保证普通用户能够完成特定的工作,也可以避免泄露 root 管理员密码 。我们要做的就是合理配置 sudo 服务,以便兼顾系统的安全性和用户的便捷性 。sudo 服务的配置原则也很简单—在保证普通用户完成相应工作的前提下,尽可能少地赋予额外的权限 。
sudo:给普通用户提供额外的权限来完成原本 root 管理员才能完成的任务
语法格式:sudo [ -Vhl] │ [ -p] [ -c class│- ] [ -a] [-u │#uid ]
说明:
-V 显示版本编号-h 会显示版本编号及指令的使用方式说明-l 显示出自己(执行 sudo 的使用者)的权限-v 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码-k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)-b 将要执行的指令放在背景执行-p prompt 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称,%h 会显示主机名称-u username/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码)-s 执行环境变数中的 SHELL 所指定的 shell,或是 /etc/passwd 里所指定的 shell-H 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root )command 要以系统管理者身份(或以 -u 更改为其他人)执行的指令
实例:以 sshd 的身份在 /tmp 下面创建一个名为的文件
[root@LB-nginx-01 ~]# sudo -u sshd touch /tmp/mysshd[root@LB-nginx-01 ~]# ll /tmp/mysshd -rw-r--r-- 1 sshd sshd 0 1月16 15:52 /tmp/mysshd#属主属组都是sshd
sudo 命令具有如下功能:
?限制用户执行指定的命令:
? 记录用户执行的每一条命令;
? 配置文件(/etc/)提供集中的用户管理、权限与主机等参数;
? 验证密码的后 5 分钟内(默认值)无须再让用户再次验证密码 。
当然,如果担心直接修改配置文件会出现问题,则可以使用 sudo 命令提供的命令来配置用户权限 。这条命令在配置用户权限时将禁止多个用户同时修改配置文件,还可以对配置文件内的参数进行语法检查,并在发现参数错误时进行报错 。
使用命令配置 sudo 命令的配置文件时,其操作方法与 Vim 编辑器中用到的方法一致,因此在编写完成后记得在末行模式下保存并退出 。在 sudo 命令的配置文件中,按照下面的格式将第 99 行(大约)填写上指定的信息:
使用者帐号登陆者的来源主机名称=(可切换的身份)可下达的指令rootALL=(ALL)ALL
上面这一行的四个元件意义是:
“使用者帐号”:系统的哪个帐号可以使用 sudo 这个指令的意思;“登陆者的来源主机名称”:当这个帐号由哪部主机连线到本 Linux 主机,意思是这个帐号可能是由哪一部网络主机连线过来的,这个设置值可以指定用户端计算机(信任的来源的意思)。默认值 root 可来自任何一部网络主机“(可切换的身份) ”:这个帐号可以切换成什么身份来下达后续的指令,默认 root 可以切换成任何人;“可下达的指令”:可用该身份下达什么指令?这个指令请务必使用绝对路径撰写 。默认root 可以切换任何身份且进行任何指令之意 。