1,当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限
2,确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认
3,若密码输入成功,则开始执行sudo后续的命令
4,root执行sudo时不需要输入密码(eudoers文件中有配置root ALL=(ALL) ALL这样一条规则)
5,若欲切换的身份与执行者的身份相同,也不需要输入密码
visudo使用vi打开/etc/sudoers文件,但是在保存退出时,visudo会检查内部语法,避免用户输入错误信息
visudo需要root权限
[Hadoop@localhost ~]$ visudo
visudo:/etc/sudoers:权限不够
visudo:/etc/sudoers:权限不够
使用visudo命令打开sudo配置文件
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
## 该文件允许特定用户像root用户一样使用各种各样的命令,而不需要root用户的密码
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
## 在文件的底部提供了很多相关命令的示例以供选择,这些示例都可以被特定用户或
## 用户组所使用
##
## This file must be edited with the 'visudo' command.
## 该文件必须使用"visudo"命令编辑
## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhaps using
## wildcards for entire domains) or IP addresses instead.
## 对于一组服务器,你可能会更喜欢使用主机名(可能是全域名的通配符)
## 、或IP地址,这时可以配置主机别名
# Host_AliasFILESERVERS = fs1, fs2
# Host_AliasMAILSERVERS = smtp, smtp2
## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
## 这并不很常用,因为你可以通过使用组来代替一组用户的别名
# User_Alias ADMINS = jsmith, mikem
## Command Aliases
## These are groups of related commands...
## 指定一系列相互关联的命令(当然可以是一个)的别名,通过赋予该别名sudo权限,
## 可以通过sudo调用所有别名包含的命令,下面是一些示例
## Networking 网络 *** 作相关命令别名
# Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient
, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig
, /sbin/mii-tool
## Installation and management of software 软件安装管理相关命令别名
# Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
## Services 服务相关命令别名
# Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
## Updating the locate database 本地数据库升级命令别名
# Cmnd_Alias LOCATE = /usr/bin/updatedb
## Storage 磁盘 *** 作相关命令别名
# Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe
, /bin/mount, /bin/umount
## Delegating permissions 代理权限相关命令别名
# Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
## Processes 进程相关命令别名
# Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
## Drivers 驱动命令别名
# Cmnd_Alias DRIVERS = /sbin/modprobe
# Defaults specification
#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
#You have to run "ssh -t hostname sudo <cmd>".
# 一些环境变量的相关配置,具体情况可见man soduers
Defaultsrequiretty
Defaultsenv_reset
Defaultsenv_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
Defaultsenv_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaultsenv_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaultsenv_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaultsenv_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaultssecure_path = /sbin:/bin:/usr/sbin:/usr/bin
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## 下面是规则配置:什么用户在哪台服务器上可以执行哪些命令(sudoers文件可以在多个系统上共享)
## Syntax(语法):
##
## user MACHINE=COMMANDS 用户 登录的主机=(可以变换的身份) 可以执行的命令
##
## The COMMANDS section may have other options added to it.
## 命令部分可以附带一些其它的选项
##
## Allow root to run any commands anywhere
## 允许root用户执行任意路径下的任意命令
root ALL=(ALL) ALL
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
## 允许sys中户组中的用户使用NETWORKING等所有别名中配置的命令
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE
, DRIVERS
## Allows people in group wheel to run all commands
## 允许wheel用户组中的用户执行所有命令
%wheel ALL=(ALL) ALL
## Same thing without a password
## 允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令
# %wheel ALL=(ALL) NOPASSWD: ALL
## Allows members of the users group to mount and unmount the
## cdrom as root
## 允许users用户组中的用户像root用户一样使用mount、unmount、chrom命令
# %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
## Allows members of the users group to shutdown this system
## 允许users用户组中的用户关闭localhost这台服务器
# %users localhost=/sbin/shutdown -h now
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
## 读取放置在/etc/sudoers.d/文件夹中的文件(此处的#不意味着这是一个声明)
#includedir /etc/sudoers.d
对于Linux管理者来说,“帐号管理”是再也普通不过的一个环节了,但每次都要去查一大本的手册实在是很浪费时间。我还是老老实实地花点心思把这些常用的功能都整理成一份文档,方便以后的使用和学习,以后也都会继续这样做下去。
本文的所有案例与说明都是基于Ubuntu 16.04.3 LTS 64位 *** 作系统,如果你的 *** 作系统与我的不一样,可能会出现不一样的结果。但Linux的原理都是通用的,善于使用man可以帮助你更好的管理你的 *** 作系统。
上图一共列出了9个相关文件,但这里我只重点讲解前三个文件,也即是 /etc/passwd、/etc/shadow 与 /etc/group。
1、/etc/passwd
User account information. --(明文的)用户账号信息
这个文件每一行都代表一个帐号,有几行就代表有几个帐号在你的系统中!不过需要特别注意的是,里面很多帐号本来就是系统正常运行所必须的,我们可以简称它为系统帐号。这些帐号都是你不能随便删除的!
通过查看passwd(5)手册可以查看/etc/passwd的文件结构:
文件结构说明:
“/etc/passwd” 第二项的内容说明
2、/etc/shadow
Secure user account information. -- 安全加密的用户账号信息
通过查看shadow(5)手册也可以查看/etc/shadow的文件结构:
如shadow(5)中所述,这个文件中被 “:” 分隔的每项含义如下。
3、/etc/group
Group account information. -- 组信息
通过查看group(5)手册也可以查看/etc/group的文件结构:
如group(5)中所述,这个文件中被“:”分隔的每项含义如下。
注意:
“/etc/gshadow” 为 “/etc/group” 提供了与 “/etc/shadow” 相似的功能,但没有被真正地使用。
4、/etc/gshadow
Secure group account information. -- 安全加密的组信息
5、/etc/default/useradd
Default values for account creation. -- 创建用户时的默认设置
6、/etc/skel/
Directory containing default files. -- 用户主目录的默认内容
7、/etc/subgid
Per user subordinate group IDs.
8、/etc/subuid
Per user subordinate user IDs.
9、/etc/login.defs
Shadow password suite configuration.
1、添加用户 -- useradd
useradd -- create a new user or update default new user information.
常用参数:
例1:最简单的例子
例2:创建一个可以使用的帐号
例3:查看useradd默认设置
使用useradd创建用户时还会参考文件/etc/login.defs的设置,比如UID/GID的指定数值、用户主文件夹设置值、用户删除与密码设置值等,这里也不做深入讨论了。
2、用户密码管理 -- passwd
passwd - change user password
常用参数:
3、用户密码管理 -- chage
chage - change user password expiry information
4、用户信息修改 -- usermod
usermod - modify a user account
当然,以上的修改你也可以通过手动修改相关的配置文件来达到一样的目的。
5、删除用户 -- userdel
userdel - delete a user account and related files
注意:
1)一般而言,该帐号如果只是暂时不启用的话,那么将/etc/shadow里面帐号失效日期(第八字段)设置为0就可以让该帐号无法登录,但所有相关的数据都会留下来。使用userdel的时候通常是你真的确定不要该用户在主机上面用任何数据了!
2)如果想要完整地将某个帐号删除,最好可以执行userdel -r username之前,先以“find / -user username”查出整个系统内属于username的文件,然后再进行删除。
1、初始用户组(initial group)与 有效用户组(effective group):
在/etc/passwd里面的第四列有一个所谓的GID,它就是“ 初始用户组 ”。也就是说,当用户登录系统,立刻就拥有这个用户组的相关权限的意思。
有效用户组:即帐号当前(实时)所使用的用户组。
次要用户组:次要用户组就是除了用户的初始用户组外的其它所属组,在/etc/group的最后一个字段中所设置,可以有多个(多个用逗号','隔开)。
使用usermod -g可以修改初始用户组,而使用usermod -G则可以修改次要用户组。
例1:修改用户次要用户组
例2:有效与支持用户组的查看
在这个输出的信息中,可知道nosee这个用户同时属于nosee及users这两个组,而且,第一个输出的即为“ 有效用户组 ”。也就是说,上面例子中的有效用户组为nosee。
2、有效用户组的切换 -- newgrp
上面例子中,nosee的有效用户组从nosee转变成了users。
现在我们来深入讨论下newgrp这个命令,这个命令可以更改目前用户的有效用户组,而且是另外以一个新的shell来提供这个功能。因此如果你想要回到原本的环境中,只需要输入exit即可。
3、新增用户组 -- groupadd
groupadd - create a new group
常用参数:
4、用户组参数修改 -- groupmod
groupmod - modify a group definition on the system
常用参数:
注意:不要随意改动GID,容易造成系统资源的错乱。
5、删除用户组 -- groupdel
groupdel - delete a group
注意,只有在/etc/passwd内没有任何用户使用该用户组的作为初始用户组的时候,才可以成功删除。
6、用户组管理员功能 -- gpasswd
gpasswd - administer /etc/group and /etc/gshadow
1)系统管理员(root)的常用参数
2)用户组管理员(Group administrators)的常用参数
1、su
su - change user ID or become superuser
su是最简单的身份切换命令了,它可以进行任何身份的切换。
常用参数:
注意:
1)这个su的用法当中,有没有加上“-”差很多的,转为涉及login-shell与not-login shell的变量读取方法。即想要完整的切换到新用户的环境,可以利用“su - username”或“su -l username”。
2)使用root切换到任何用户时,都不需要输入密码
3)当从其它用户切换到root用户时都必须输入root的密码,这样root的密码就很容易流传出去,这是很不妥当的,所以才会有sudo这个命令的出现。
2、sudo
sudo, sudoedit — execute a command as another user
sudo的执行仅需要自己的密码,甚至可以设置不需要密码即可执行sudo。由于sudo可以让你以其他的用户身份执行命令(通常是root的身份),因此并不是所有人才能执行sudo,而是仅有/etc/sudoers内的用户才能够执行sodu这个命令。
/etc/sudoers文件内容如下:
常用参数:
例:使用nosee的身份在/home/nosee/目录下新建一个test文件
sudo的执行流程:
1)当用户执行sudo时,系统于/etc/sudoers文件查找该用户是否有执行sudo的权限;
2)若用户具有可执行sudo的权限后,便让用户输入自己的密码来确认;
3)若密码输入成功,便开始进行sudo后续接的命令(但root执行sudo时不需要输入密码);
4)若欲切换的用户与执行者身份相同,那也不需要输入密码。
因为/etc/sudoers文件有一定的规则,所以我们一帮不直接用vi去编辑。一般,我们都是使用visudo来修改这个文件。
3、visudo
因为/etc/sudoers是有语法的,如果设置错误那会造成无法使用sudo的不良后果,因此才会使用visudo去修改。
一般来说,visudo的设置方式有几种简单的方法,正面我们以几个简单的例子来说明:
1)单一用户可以进行root的所有命令与sudoer文件语法
例:让用户nosee可以使用root的所有命令
2)利用用户组及免密功能处理visudo
例:让nosee用户组可以使用root的所有命令,并且不需要输入密码
注意:用户组的表示只需要在前面加一个百分号%即可,NOPASSWD则是免密的关键字。
3)有限制的命令 *** 作
例:让user1用户仅能使用passwd这个命令帮root修改其他用户的密码
注意:最后一个参数一定要用绝对路径才行,否则visudo会出现语法错误。
但这里有个可怕的地方,就是用户user1竟然也可以去修改root的密码了,这是不应该允许发生的,为了避免上述的问题,应该使用下面的这种配置:
上面参数的意思是,用户user1可以执行“passwd 任意字符串”,但是“passwd”与“passwd root”两个命令除外。
4)通过别名设置visudo
5)sudo的时间间隔问题
两次执行sudo的间隔时间在5分钟内,那么再次执行sudo时就不需要再次输入密码。
6)sudo搭配su的使用方式
很多时候我们需要大量执行很多root的工作,所以一直sudo觉得麻烦。这里有一个变身root用户的办法,而且还不会外泄root密码,前提是你要非常信任你将要为他们做此次设置的用户。
1、查看用户当前所用的shell
1)实时查看当前进程中使用的shell种类:推荐
2)最常用的查看shell的命令,但不能实时反映当前shell
3)环境变量中shell的匹配查找
4)口令文件中shell的匹配查找
2、强制踢出已登录用户
或也可以给他发送一条信息。
3、adduser
adduser也可以用于用户的添加,感觉兴趣的同学可以自行去查阅相关的资料。
1、《鸟哥的Linux私房菜基础学习篇》-- 鸟哥
2、 Debian官方参考手册
如发现有写得不对或不好的地方非常欢迎到评论区指出与交流,感谢阅读!
——《完》
sudo:super user do,就是以root的权限来执行一个命令。会要求输入本用户的密码。su:switch suer,切换用户。默认su不加参数是切换到root,su -表示切换用户并且切换到新用户的环境。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)