标签搜索

linux 新建用户、权限控制

jjiaper
2024-06-03 / 0 评论 / 24 阅读 / 正在检测是否收录...

有时候为了精简操作和多人员同时使用服务器或者系统,需要进行对系统设置不同的用户,并且进行权限控制,如何操作呢?

创建用户并设置密码步骤
0:前提,创建的用户名是系统用户不存在的,可以用如下命令来查看目前系统中存在的用户信息。

getent passwd

1:创建用户

useradd usertest

2:配置密码

passwd usertest

3:针对某个文件或者文件夹 更换用户,比如从root改为usertest

# -R 代表文件夹 
# usertest:usertest 用户:用户组
chown -R usertest:usertest /tt/aa

已下来自与
https://blog.51cto.com/dengyong/1355112

/etc/sudoers 的配置

/etc/sudoers 是 sudo 的配置文件,它的属性必须为 440。

sudo 命令核心思想是权限的赋予,即某个命令的所属用户不是你自己,而你却有权限执行它。但是我们需要注意的是,虽然你有权限执行这个命令,但是在执行的时候却仍是以这个命令本身所属用户来完成。

注意:

在 linux 中每个进程都是有与之相关的 UID,GID,分别为有效 UID, 真实 UID,有效 GID, 真实 GID。有效 UID,GID 是用来判断权限,而真实 UID,GID 是用来记账 (哪个进程属于哪个用户,或记录日志等等)。当配置了 sudo entry 后,有效 UID 里面就包含了这个被配置的用户 UID,因而权限验证的时候就可以通过。

sudo 特性主要有这样几点:

Sudo 能够限制用户只在某台主机上运行某些命令。

Sudo 提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。

Sudo 使用时间戳文件来执行类似的 “检票” 系统。当用户调用 sudo 并且输入它的密码时,用户获得了一张存活期为 5 分钟的票(这个值可以在编译的时候改变)。

Sudo 的配置文件是 sudoers 文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在 /etc/sudoers

su 与 sudo 的对比

su 即永久的切换到了 su 过去的用户,然后以这个 su 到的新用户干它能干的一切事情,

而 sudo 则是指在执行某个命令的时候临时切换到这个命令的所属用户执行,而且 sudo 可以做到以单个命令为单位将权限赋予给其他用户,相比 su 显得更加灵活。

编辑配置文件命令:

sudo visudo

sudo visudo -f /etc/sudoers

sudo vim /etc/sudoers

root ALL=(ALL) ALL

是允许 root 用户使用 sudo 命令变成系统中任何其它类型的用户

%admin ALL=(ALL) ALL

管理组中的所有成员都能以 root 的身份执行所有命令

用一个实例来详细解释 /etc/sudoers 文件的配置语法

Jorge ALL = (root) /usr/bin/find, /bin/rm

第一栏规定它的适用对象:用户或组,就本例来说,它是用户 jorge。此外,因为系统中的组和用户可以重名,要想指定该规则的适用对象是组而非用户的话,组对象的名称一定要用百分号 % 开头。

第二栏指定该规则的适用主机。当我们在多个系统之间部署 sudo 环境时,这一栏格外有用,这里的 ALL 代表所有主机。但是,对于桌面系统或不想将 sudo 部署到多个系统的情况,这一栏就换成相应的主机名。

第三栏的值放在括号内,指出第一栏规定的用户能够以何种身份来执行命令。本例中该值设为 root,这意味着用户 jorge 能够以 root 用户的身份来运行后面列出的命令。该值也可以设成通配符 ALL,jorge 便能作为系统中的任何用户来执行列出的命令了。

最后一栏(即 /usr/bin/find,/bin/rm)是使用逗号分开的命令表,这些命令能被第一栏规定的用户以第三栏指出的身份来运行它们。本例中,该配置允许 jorge 作为超级用户运行 /usr/bin/find 和 /bin/rm 这两个命令。需要指出的是,这里列出的命令一定要使用绝对路径。

我们可以利用这些规则为系统创建具体的角色。例如,要让一个组负责帐户管理,你一方面不想让这些用户具备完全的 root 访问权限,另一方面还得让他们具有增加和删除用户的权利,那么我们可以在系统上创建一个名为 accounts 的组,然后把那些用户添加到这个组里。之后,再使用 visudo 为 /etc/sudoers 添加下列内容:%accounts ALL=(root) /usr/sbin/useradd,/usr/sbin/userdel, /usr/sbin/usermod ,这样,accounts 组中的任何成员都能运行 useradd、userdel 和 usermod 命令了。如果过一段时间后,您发现该角色还需要其他工具,只要在该表的尾部将其添上就行了。这样真是方便极了。

默认情况我们会看到有 "%admin ALL=(ALL) ALL" 一句话

1 如果想把 admin 组的用户都 sudo 不用密码那么可以将这一行换为:"%admin ALL=(ALL) NOPASSWD: ALL" 即可。

2 如果仅仅想让 jay 用户 sudo 不需密码,则可添加 "jay ALL = NOPASSWD: ALL" 这样一行.

3 如果让 jay 用户 sudo 不用密码即可执行某几个命令,可这样写 "jay ALL = NOPASSWD: /usr/bin/abc.sh, /usr/sbin/adduser"

我添加 "jay ALL = NOPASSWD: ALL" 这样一行;但是,jay 执行 sudo 时还是需要输入密码,这是为什么?

原来是,我这一行在 "%admin ALL=(ALL)ALL" 组策略之前,后面的组配置覆盖了前面的配置,而 jay 属于 admin 组,所以需要密码。这时,只需要将 %admin 行用#注释掉即可。OK!然后立马就生效了

在 /etc/sudoers 文件里面主要包括这两部分:

  1. 别名设置

别名主要包括这几种:User_Alias,Host_Alias,Runas_Alias,Cmnd_Alias,分别是用户别名,主机别名,运行用户别名,命令别名。设置这几个别名的命令主要是为了配置方便,这个很类似 linux 用户群组或是数据库中角色的作用,有了别名便可以批量的赋予权限。

  1. 真正的 sudo entry

这个就是真正配置哪些用户可以使用哪些命令了(你甚至可以不使用别名设置那部分)

格式为:用户名 (用户别名) 主机名 (主机别名)=[(运行用户或是 Runas_Alias) 可选] [tag 可选] 可以执行的命令 (或 Cmmd_Alias) 这样描述语法很生硬,不易理解,举例子、

user1 host1 = /bin/kill      # user1 可以在 host1 上使用命令 /bin/kill

user1 host1 = NOPASSWD:/bin/kill

user1 可以在 host1 上使用命令 /bin/kill 同时可以不必输入密码 (这里就是使用了 NOPASSWD。

user1 host1 = NOPASSWD: /bin/kill , PASSWORD: /bin/ls

user1 可以在 host1 上使用命令 /bin/kill 无需输入密码,但是使用 /bin/ls 则需要输入密码

user1 host1 = (opterator)/bin/kill

user1 可以在 host1 上使用命令 /bin/kill 但是必须是以 operator 用户运行这个命令,等价于 su -u opertor /bin/kill

0

评论 (0)

取消