Linux下帐户管理与权限控制

近期整理了一番备忘录内容,把有些在工做中用到的比较基础的地方进行强化记录下来。ios

1、用户与组

新建用户正则表达式

useradd zyy

# 参数示意:
# -c comment 指定一段注释性描述
# -d 目录 指定用户主目录,若是此目录不存在,则同时使用-m选项,能够建立主目录
# -g 用户组 指定用户所属的用户组
# -G 用户组,用户组 指定用户所属的附加组
# -s Shell文件 指定用户的登陆Shell
# -u 用户号 指定用户的用户号,若是同时有-o选项,则能够重复使用其余用户的标识号

查看新建用户的默认主目录shell

[root@V1 ~]# cat /etc/passwd |grep zyy      
zyy:x:1008:1010::/home/zyy:/bin/bash

变动用户的主目录安全

[root@V1 ~]# usermod -d /tmp/zyy zyy  
[root@V1 ~]# 
[root@V1 ~]# cat /etc/passwd |grep zyy      
zyy:x:1008:1010::/tmp/zyy:/bin/bash

# 参数示意:
# -c comment 指定一段注释性描述
# -d 目录 指定用户主目录,若是此目录不存在,则同时使用-m选项,能够建立主目录
# -g 用户组 指定用户所属的用户组
# -G 用户组,用户组 指定用户所属的附加组
# -s Shell文件 指定用户的登陆Shell
# -u 用户号 指定用户的用户号,若是同时有-o选项,则能够重复使用其余用户的标识号

禁用用户登陆bash

[root@V1 ~]# usermod -s /sbin/nologin zyy  
[root@V1 ~]# 
[root@V1 ~]# cat /etc/passwd |grep zyy      
zyy:x:1008:1010::/tmp/zyy:/sbin/nologin

新建组oop

groupadd xydwl

把已有用户加入到组中ui

[root@V1 ~]# usermod -G nagios,zyy zyy
[root@V1 ~]# 
[root@V1 ~]# id zyy
uid=1008(zyy) gid=1010(key) groups=1010(key),1008(nagios),1009(zyy)

咱们也能够在新建的时候直接将用户加入到已有的组中spa

useradd  -s  /bin/sh  -g  group  –G  adm,root   gem

# 此命令新建了一个用户 gem
# 该用户的登陆 Shell 是 /bin/sh
# 它属于 group 用户组,同时又属于 adm 和 root 用户组,其中 group 用户组是其主组

 

2、用户切换

用户之间的切换咱们主要使用 su 和 sudo 两种,这里咱们主要记录下 sudo。.net

2.1 如何定义sudo条目

假设咱们如今想要使得hadoop用户可以以root用户的身份去执行useradd和usermod命令,实现的方法以下:3d

wKiom1hSlDjgkHjmAAAr20YVa9I169.png

执行完该命令后咱们发现,咱们没法使用该命令,缘由是 hadoop 用户没有在 root 用户的 sudoers 文件里面定义,因此咱们只有在 root 用户的 sudoers 文件里面定义了该条目以后才能使用该命令,咱们能够在 root 用户下使用 visudo 命令定义便可,将该条目定义在 root 用户的 sudoers 文件的最后一行便可:

wKioL1hSlo3jpfpwAAAHiR4G-e8025.png

ALL 是一种宏,一种通配符,能够表示全部主机,也能够表示全部用户,还能够表示全部命令,而且 hadoop 用户只能只用咱们定义给它的这两个命令,其他的命令没法执行:

wKioL1hSlvmxtCJnAAAVL0iXsDs213.png

wKiom1hSl4iQxgBTAAASTgaZa-k132.png

温故: usermod -s 命令能够修改用户的默认 shell:

wKioL1hSl_GxBy3aAAAVYhCY1ro087.png

咱们在第一次使用 sudo 命令的时候系统会要求咱们输入当前用户的密码:

wKiom1hSmF2DDgSyAAANU3U7_4g159.png

可是当当前用户第一次认证经过的时候系统会将当前用户的认证信息记录下来并让它的有效期为 5 分钟,因此咱们使用 sudo 命令在第一次输入了密码以后的 5 分钟以内再次使用 sudo 命令的时候,就不用再次输入当前用户的密码了,这是 sudo 的一种安全机制:

wKiom1hSmWiTESCbAAAYmGvUMUQ553.png

可是为了不在这仅有的 5 分钟以内,有人恶意的使用咱们的 sudo 命令的时候,sudo 给咱们提供了一个 -k 选项,-k 选项表示不管咱们每次使用 sudo 命令的间隔有多长,都得输入当前用户的密码,即便得咱们每次使用 sudo 命令时的输入的认证信息失效,并在下一次使用的时候从新进行认证:

wKiom1hSnBzjt5MOAABSUf6_aZE552.png

最安全的用法就是咱们在每次使用 sudo 命令的时候都带上 -k 选项,-k 选项表示使得认证信息失效,咱们能够在每次执行 sudo 命令的时候都使用 -k 选项,这样即便咱们在执行 sudo 命令的那一刻输入了认证信息,系统也不会将该认证信息记录下来。

做为一个普通用户来说,咱们可使用 sudo -l 命令来列出当前用户全部可使用的 sudo 类命令:

wKiom1hSnLHy-JfxAAA-VHicIaE100.png

做为管理员,咱们去定义 sudo 条目的时候,也可使得普通用户在使用 sudo 命令的时候一直都不用输入密码,咱们只需在定义 sudo 条目的时候,在命令前面加上标签(TAG)便可,格式:

who  which_hosts=(runas)  TAG:command

这些标签中最经常使用的就是 NOPASSWD,这个标签表示任何用户在使用 sudo 命令的时候都不用输入密码去验证,全部位于该标签后面的命令在执行的时候都不用输入密码去验证:

wKioL1hSogPyHeXMAAAIuhexTuM037.png

wKioL1hSop_xHq71AAAX-JFGFsQ039.png

可是咱们若是只但愿某些命令在执行时不须要输入密码,而另外一些命令在执行的时候须要输入密码,能够在但愿不输入密码的命令前面加上 NOPASSWD 标签,而在但愿输入密码的命令前面加上 PASSWD 标签便可:

wKioL1hSo1LSP8wyAAAI2uGowHM619.png

wKiom1hSo6XwOUMoAAAc4uf6ICw261.png

若是咱们须要定义的命令有不少,咱们彻底能够将这些命令所有定义为命令别名:

wKiom1hSpQriUZbKAAAYXVd_pwU968.png

wKiom1hSpbXSw5uXAABJLGN2JxE684.png

wKioL1hSphGQinE_AAAY_GouKnM563.png

由上图知,虽然咱们定义了 hadoop 用户的用户别名中不能使用 passwd root 命令去修改 root 的密码,可是仍然能够修改 root 的密码,那么这种问题咱们该如何解决呢?

因此咱们仅仅简单的在定义 sudo 条目的时候去取反是不行的,咱们能够在定义 sudo 条目的时候去使用 globby 通配符 *,注意,不是正则表达式通配符,正则表达式通配符 "*" 表示的是 "*" 前的字符出现 0-任意次,而 globby 的通配符的 "*" 表示 "*" 前的字符至少得出现一次,因此咱们像下图中这样修改便可:

wKioL1hSskmhfxafAAANxkqM1Rc308.png

wKiom1hSspDg9ftTAAAuajxGLvs167.png

sudo 还有一个功能就是,其它任何用户以管理员的身份去执行命令的时候,都会被记录到 root 用户的日志文件里面,并且会明确说明是哪个用户以管理员的身份去执行了哪些命令的,/var/log/secure 文件里面就记录了这样的信息:

wKiom1hSszniejKeAAAZ_Hd-60M378.png

 

 

参考资料

1. Linux 新建用户、用户组,给用户分配权限

2. sudo详解

相关文章
相关标签/搜索