安全与加密之su与sudo使用详解

   2017-01-06 0
核心提示:本章目录su命令的使用sudo命令sudo配置说明sudo别名和示例前言在工作生产环境中尽量不要去使用root用户,因为root权限过大,一旦操作失误后将面临十分严重的后果。但许多的系统管理命令和服务为了安全只有超级用户才有权限使用,因此这也无疑让普通用户受到更

本章目录

  1. su命令的使用

  2. sudo命令

  3. sudo配置说明

  4. sudo别名和示例

前言

在工作生产环境中尽量不要去使用root用户,因为root权限过大,一旦操作失误后将面临十分严重的后果。但许多的系统管理命令和服务为了安全只有超级用户才有权限使用,因此这也无疑让普通用户受到更多的权限束缚,而su命令则是用于便捷的变更使用者的身份,能够让使用者在不注销的情况下顺畅的切换至其他用户。

1.su命令的使用

su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户账号和密码。

语法

su (选项)(参数)

选项

  • -c<指令>或--command=<指令>:执行完指定的指令后,即恢复原来的身份;

  • -f 或--fast:适用于csh与tsch,使用shell不用去读取启动文件;

  • -l或--login:改变身份时,也同时变更工作目录。以及HOME,SHELL,USER,LOGNAME,PATH变量等;

  • -m,-p或--preserve-environment:变更身份时,不要变更环境变量;

  • -s或--shell=:指定要执行的shell;

  • --help:显示帮助;

  • --version;显示版本信息

参数

用户:指定要切换身份的目标用户。

示例

变更账号为root查看root家目录后退回当前用户

[zh@zheng ~]$ su -l root -c ls
密码:
anaconda-ks.cfg   gpgtest  initial-setup-ks.cfg 
[zh@zheng ~]$

小结

  1. 若要完整的切换到新使用者的环境,必须使用su - username 或 su -l username,才会彻底转换为新用户;

  2. 如果仅想运行一次root的命令,可以使用su -c 'command'的方式来实现;

  3. 使用root切换为任何使用者时,不需要输入新用户的口令。

  4. 当多人管理时,若大家都是用su来切换为root时,就面临着所有用户都需要知道root口令,这将很不安全,这时就需要用到sudo命令

2.sudo命令

sudo命令用来以其他身份来执行命令,预设的身份为root。在/etc/sudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。

语法

sudo (选项)(参数)

选项

  • -b:在后台执行指令;

  • -h:显示帮助; -H:将HOME环境变量设为新身份的HOME环境变量;

  • -k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;。 -l:列出目前用户可执行与无法执行的指令;

  • -p:改变询问密码的提示符号; -s:执行指定的shell; -u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份;

  • -v:延长密码有效期限5分钟;

  • -V :显示版本信息。

参数

  • 指令:需要运行的指令和对应的参数。

sudo命令特性:

  1. sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用sudo,会提示联系管理员

  2. sudo可以提供日志,记录每个用户使用sudo操作

  3. sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机

  4. sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券”

  5. 通过visudo命令编辑配置文件,具有语法检查功能

示例

以zh用户的身份,在tmp目录下创建一个名为mytest的文件

[root@zheng ~]# sudo -u zh touch /tmp/mytest
[root@zheng ~]# ll /tmp/mytest
-rw-r--r--. 1 zh zh 0 12月  5 22:34 /tmp/mytest

思考

sudo为什么默认仅有root能使用

  1. 当用户运行sudo时,系统与/etc/sudoers文件中搜寻该使用者是否有运行sudo的权限

  2. 若使用者具有可运行sudo的权限后,便让使用者输入用户自己的口令来确认

  3. 若口令输入成功,便开始进行sudo后续命令(root运行sudo时不需要输入口令)

  4. 若切换的身份与运行者身份相同,也不需要输入口令

注意:

sudo运行的重点在于,/etc/sudoers文件中是否有执行者的相关配置,所以能否使用sudo与/etc/sudoers有关,编辑sudoers文件,不能直接使用vim去修改,这个文件内容有一定的语法格式,应使用visudo命令;visudo会调用vi编辑器来修改配置文件,,若存在语法错误,则会报错。

只有超级用户才可以使用visudo命令编辑sudo配置文件(/etc/sudoers);visudo命令优势:1、可以防止多个用户同时修改sudo配置文件;2、对sudo程序配置文件的语法检查;

visudo 语法格式

使用者账号 登录者的来源主机名=(可切换的身份) 可下达的命令 root ALL=(ALL) ALL

这四个组件的意义

  • 使用者账号:系统的哪个账号可以使用sudo这个命令,默认为root

  • 登录者的来源主机名:登录账号由哪部主机链接到本主机,这个配置值可以指定客户端主机,默认值root可来自任何一部网络主机

  • 可切换的身份:这个账号可以切换成什么身份来下达后面的命令,默认root可以切换成任何人

  • 可下达的命令:可用该身份下达什么命令,这个命令请务必使用绝对路径,默认root可以切换任何身份执行任何命令

示例

1. 允许用户切换任何身份,执行所有命令

[root@centos7 ~]# visudo 
zh      ALL=(ALL)       ALL
[root@centos7 ~]# su - zh
[zh@centos7 ~]$ sudo -l         #查看zh用户可以使用sudo执行哪些命令
[sudo] password for zh:         #输入zh用户明码
Matching Defaults entries for zh on this host:
    requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME
    HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG
    LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT
    LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

User zh may run the following commands on this host:
    (ALL) ALL               # 可以使用所有命令

[zh@centos7 ~]$ ls /root        #直接查看root目录,被阻止
ls: cannot open directory /root: Permission denied
[zh@centos7 ~]$ sudo ls /root       #使用sudo可以查看
a.sh		dir1	     key.pem		      pubkey.pem	 usr

2. 指定某用户只具有管理用户功能

[root@centos7 ~]# visudo
zh  ALL=(root)  /usr/bin/passwd
[root@centos7 ~]# su - zh
[zh@centos7 ~]$ sudo passwd lisi
[sudo] password for zh: 
Changing password for user lisi.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
[zh@centos7 ~]$ su - lisi
Password: 
[lisi@centos7 ~]$ whoami
lisi

# 此时就面临一个问题,这个用户是不是就可以更改root用户的密码呢?

[zh@centos7 ~]$ sudo passwd 
Changing password for user root.  # 修改的为root的密码
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.


[zh@centos7 ~]$ sudo passwd root
Changing password for user root. # 指定修改root密码也可以
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
[zh@centos7 ~]$ su - root
Password: 
Last login: Thu Dec 29 10:24:12 CST 2016 from 192.168.1.104 on pts/1
[root@centos7 ~]# whoami
root

#此时该如何解决呢?
[root@centos7 ~]# visudo
99 zh  ALL=(root)  !/usr/bin/passwd,/usr/bin/passwd [a-zA-Z]*,!/usr/bin/passwd root
# 加上!,代表不可运行的意思。因此定义为:可以运行passwd+除root以为的任意字符。
[root@centos7 ~]# su - zh
[zh@centos7 ~]$ sudo passwd
Sorry, user zh is not allowed to execute '/bin/passwd' as root on centos7.
[zh@centos7 ~]$ sudo passwd root
Sorry, user zh is not allowed to execute '/bin/passwd root' as root on centos7.
[zh@centos7 ~]$ sudo passwd lisi
Changing password for user lisi.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

3. 使用群组免口令功能

# 新建一个user1组,将zh用户加入user1
[root@centos7 ~]# useradd user1
[root@centos7 ~]# usermod -G user1 zh
[root@centos7 ~]# id zh
uid=1008(zh) gid=1020(zh) groups=1020(zh),1021(user1)
# 编辑sudo配置文件
[root@centos7 ~]# visudo
%user1 ALL=(ALL) NOPASSWD: ALL
# 测试
[zh@centos7 ~]$ sudo ls /root
a.sh		dir1	     key.pem		      pubkey.pem	 usr
[zh@centos7 ~]$ sudo -k 
[zh@centos7 ~]$ sudo ls /root
a.sh		dir1	     key.pem		      pubkey.pem	 usr
[zh@centos7 ~]$ exit
logout
[root@centos7 ~]# su - user1
[user1@centos7 ~]$ sudo ls /root
a.sh		dir1	     key.pem		      pubkey.pem	 usr

4. 通过别名设置sudo

别名具有以下四种类型

  1. Host_Alias:定义主机别名

  2. User_Alias:定义用户别名,别名成员可以为用户,也可以为用户组(前面加%)

  3. Runas_Alias:定义runas别名,这个别名为“目的用户”,即sudo允许切换至的用户;

  4. Cmnd_Alias:定义命令别名

[root@centos7 ~]# visudo 
User_Alias  USERADMIN = zh,user1
Cmnd_Alias  ADMINCMD = !/usr/bin/passwd,/usr/bin/passwd[a-zA-Z]*,!/usr/bin/passwd root    
USERADMIN   ALL=(root)  ADMINCMD
#测试
[root@centos7 ~]# su - zh
Last login: Tue Jan  3 11:37:05 CST 2017 on pts/0
[zh@centos7 ~]$ sudo ls /root
Sorry, user zh is not allowed to execute '/bin/ls /root' as root on centos7.
[zh@centos7 ~]$ sudo passwd
Sorry, user zh is not allowed to execute '/bin/passwd' as root on centos7.
[zh@centos7 ~]$ sudo passwd root
Sorry, user zh is not allowed to execute '/bin/passwd root' as root on centos7.
[zh@centos7 ~]$ sudo passwd lisi
Changing password for user lisi.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

[root@centos7 ~]# su - user1
Last login: Tue Jan  3 11:41:34 CST 2017 on pts/0
[user1@centos7 ~]$ sudo ls /root/
Sorry, user user1 is not allowed to execute '/bin/ls /root/' as root on centos7.
[user1@centos7 ~]$ sudo passwd 
Sorry, user user1 is not allowed to execute '/bin/passwd' as root on centos7.
[user1@centos7 ~]$ sudo passwd root
Sorry, user user1 is not allowed to execute '/bin/passwd root' as root on centos7.
[user1@centos7 ~]$ sudo passwd lisi
Changing password for user lisi.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

sudo搭配su的使用方法

很多时候我们需要大量运行很多root的工作,所以一直使用sudo确实比较麻烦。那么我们可以使用sudo搭配su使用,将身份转为root,而且还用用户自己的口令变成root。这样一来,可以更加方便的管理系统,而且root密码也不会泄露。

示例

[root@centos7 ~]# visudo 
User_Alias  USERADMIN = zh,user1
USERADMIN   ALL=(root)  /bin/su -
[root@centos7 ~]# su - zh
[zh@centos7 ~]$ sudo su - 
[sudo] password for zh: 
Last login: Tue Jan  3 10:11:55 CST 2017 from 192.168.1.104 on pts/0
[root@centos7 ~]# ls
a.sh            dir1         key.pem                  pubkey.pem         usr
[root@centos7 ~]# exit
logout
[zh@centos7 ~]$ exit
logout
[root@centos7 ~]#
 
标签: Linux命令
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 每天一条linux命令——halt
    halt命令用来关闭正在运行的Linux操作系统。halt命令会先检测系统的runlevel,若runlevel为0或6,则关闭系统,否则即调用shutdown来关闭系统。 语法:halt(选项)选项:-d:不要在wtmp中记录;-f:不论目前的runlevel为何,不调用shutdown即强制关闭系统;-i:
    02-10
  • 几个linux命令查看堆栈内存问题 几个linux命令
      公司编写代码,发现整个在程序里面调用system时候总是失败,原因是can't allocate memory ,根本原因不是内存不足,而是堆栈内存不够。使用ulimit -s 2048后有所好转但是发现一旦系统进程开启多了后仍然会挂。后来使用objdump -x 后发现了原因有个动态库
    02-09
  • Linux命令总结--rm命令 linux的rmp命令
    (来源于http://www.cnblogs.com/xqzt/p/5398919.html)1、命令简介rm(Remove file 删除目录或文件)删除文件,对于链接文件,只是删除整个链接文件,而原有文件保持不变。新手在删除文件之前一定要知道这些:很重要1.可以用mv代替rm的绝对不要用rm,不要着急
    02-09
  • Linux命令行批量创建目录详解 linux创建目录
    以前一直用-p创建目录链,觉得很方便了。在空目录/opt/app/myapp里创建src,再创建main,再创建javamkdir -p /opt/app/myapp/src/main/java没想到还可以这样玩##¥%……*(root@vm1:~/tmp# mkdir -p src/{{main,test}/{java,resources},main/webapp}root@vm1:
    02-09
  • Linux命令之乐--script和scriptplay
    script和scriptplay可以把终端会话记录到一个文件中,可以用来制作命令行教学视屏。 开始录制会话[root@new test]# script -t 2timing.log -a output.sessionScript started, file is output.session[root@new test]# echo hellohello[root@new test]# echo
    02-09
  • java 开发常用的Linux命令
    1.查找文件 find / -name filename.txt 根据名称查找/目录下的filename.txt文件。find . -name "*.xml" 递归查找所有的xml文件find . -name "*.xml" |xargs grep "hello world" 递归查找所有文件内容中包含hello world的xml文件grep -H 'spring' *.xml 查找所
    02-09
  • 常用Linux命令整理 Linux常用命令总结
    常用Linux命令整理常见系统命令export 查看或修改环境变量# 例:临时修改命令提示符为字符串$export PS1=$# 例:临时修改命令提示符显示系统时间 时间使用\t 表示export PS1="[\u@\h \t \W]\$"man 查看linux系统的手册# 例:查看ls命令如何使用man ls # 回车
    02-09 Linux
  • linux命令行—《命令行快速入门》 linux常用命令csdn
    linux命令行—《命令行快速入门》 linux常用命
    pwd print working directory 打印工作目录hostname my computer's network name 电脑在网络中的名称mkdir make directory 创建路径cd change directory 改变路径ls list directory 列出路径下的内容rmdir remove directory 删除路径pushd push directory 推
    02-09
  • Linux命令(五) 五个常用的linux命令
    Linux命令(五) 五个常用的linux命令
    jenkins触发钉钉报警机制1、安装钉钉插件钉钉报警需要安装Ding Talk插件,支持钉钉报警2、打开钉钉创建钉钉机器人2.1选择机器人类型——自定义2.2添加机器人2.3填写机器人信息填写机器人姓名—设置安全设置为加密类型,并复制出来加密值2.4创建完成保持webhoo
    02-09
  • 03_Linux基础-文件类型-主辅提示符-第1提示符-Linux命令-内外部命令-快捷键-改为英文编码-3个时间-stat-其他基础命令
    03_Linux基础-文件类型-主辅提示符-第1提示符-L
    03_Linux基础-文件类型-主辅提示符-第1提示符-Linux命令-内外部命令-快捷键-改为英文编码-3个时间-stat-{1..100}-du-cd-cp-file-mv-echo-id-shell-ln-env-set-which-rpm-/usr-/与/root-hostname-vim-cat-pwd-alias-unalias-ls-ASCII-wc-chmod博客
    02-09
点击排行