linux下sudo命令[转]

一、sudo简介:

   1、概念:

sudo是linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的root命令,如halt,reboot,su等等。这样不仅减少了root用户的登陆和管理时间,同样也提高了安全性。Sudo不是对shell的一个代替,它是面向每个命令的。

它的特性主要有这样几点:

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

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

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

4、sudo的配置文件是/etc/sudoers,属性必须为0440,它允许系统管理员集中的管理用户的使用权限和使用的主机。

   2、编辑配置文件命令:visudo

注意:编辑sudo的配置文件/etc/sudoers是一般不要直接使用vi(vi /etc/sudoers)去编辑,因为sudoers配置有一定的语法,直接用vi编辑保存系统不会检查语法,如有错也保存了可能导致无法使用sudo工具,最好使用visudo命令去配置。虽然visudo也是调用vi去编辑,但是保存时会进行语法检查,有错会有提示。

   3、语法,参数  


1

sudo [ -Vhl LvkKsHPSb ] │ [ -p prompt ] [ -c class│- ] [ -a auth_type ] [-u username│#uid ] command

参数:


1

2

3

4

5

6

7

8

9

10

11

-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 更改为其他人)执行的指令

二、实战演练

   1、定义一个用户(tom)使其拥有添加用户的特殊权限,并进行创建用户操作。

        ①、创建tom并为其创建密码


1

2

3

4

[[email protected] ~]# useradd tom

[[email protected] ~]# echo "tom" | passwd --stdin tom

Changing password for user tom.

passwd: all authentication tokens updated successfully.

       ②、修改配置文件,为tom添加特殊权限useradd  


1

2

3

4

## Allow root to run any commands anywhere

root    ALL=(ALL)       ALL

tom     ALL=(root)      /usr/sbin/useradd       ##添加权限,这里的/usr/sbin/useradd表示普通用户执行时必须使用全路径,可以使用which 命令查看哦!

## Allows members of the ‘sys‘ group to run networking, software,

       ③、切换到用户tom,验证特殊权限


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

[[email protected] ~]# su - tom    ##切换用户

[[email protected] ~]$ sudo -l    ##查看此用户拥有的特殊权限

We trust you have received the usual lecture from the local System

Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.

    #2) Think before you type.

    #3) With great power comes great responsibility.

[sudo] password for tom:     ##这里需要验证密码,以保证是用户本人执行操作

Matching Defaults entries for tom 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 tom may run the following commands on this host:

    (root) /usr/sbin/useradd    ##可以以root身份,使用useradd命令

tom执行useradd:


1

2

3

[[email protected] ~]$ sudo /usr/sbin/useradd test1    ##添加用户test1

[[email protected] ~]$ tail -1 /etc/passwd

test1:x:501:501::/home/test1:/bin/bash        ##添加成功

       ④、查看日志/vat/log/secure

注意:要切换回root才有权限查看日志


1

2

3

4

5

6

7

8

9

10

11

12

13

[[email protected] ~]# tail /var/log/secure

Apr  5 13:55:58 localhost su: pam_unix(su-l:session): session opened for user tom by root(uid=0)

Apr  5 13:56:11 localhost su: pam_unix(su-l:session): session closed for user tom

Apr  5 13:56:17 localhost passwd: pam_unix(passwd:chauthtok): password changed for tom

Apr  5 13:56:17 localhost passwd: gkr-pam: couldn‘t update the ‘login‘ keyring password: no old password was entered

Apr  5 13:56:23 localhost su: pam_unix(su-l:session): session opened for user tom by root(uid=0)

Apr  5 13:56:43 localhost sudo:      tom : TTY=pts/0 ; PWD=/home/tom ; USER=root ; COMMAND=list 

##tom以管理员身份执行了list命令

Apr  5 14:00:50 localhost sudo:      tom : TTY=pts/0 ; PWD=/home/tom ; USER=root ; COMMAND=/usr/sbin/useradd test1  

##tom以管理员身份执行了useradd命令,添加用户test1

Apr  5 14:00:50 localhost useradd[2128]: new group: name=test1, GID=501

Apr  5 14:00:50 localhost useradd[2128]: new user: name=test1, UID=501, GID=501, home=/home/test1, shell=/bin/bash

Apr  5 14:07:15 localhost su: pam_unix(su-l:session): session closed for user tom

以后可以使用此命令日志查看主机是否遭到入侵攻击,或者查看某用户登录进来并使用特殊权限执行错误指令等等。所以我们要实时监控此文件的动向。

       ⑤、-k参数示例


1

2

3

4

5

6

[[email protected] ~]# su - tom

[[email protected] ~]$ sudo -k    ##结束密码有效期

[[email protected] ~]$ sudo /usr/sbin/useradd test2

[sudo] password for tom:     ##有效期结束后,执行特殊命令,需重新验证密码

[[email protected] ~]$ tail -1 /etc/passwd

test2:x:502:502::/home/test2:/bin/bash    #添加test2成功

       2、别名应用,alias:


1

2

3

4

5

sudoers文件支持使用别名对同类对象进行分组:组名必须使用全大写字母,使用逗号将同类对象命令隔开。

Host_Alias:主机别名

User_Alias:用户别名

Runas_Alias:在哪些主机以谁的身份运行  的别名

Cmnd_Alias:命令别名

       ①、在配置文件中定义别名


1

2

3

4

5

6

[[email protected] ~]# visudo

Host_Alias USERHOSTS = 172.16.0.0/16,127.0.0.0/8,192.168.0.0/24    ##定义主机别名,可以在哪些机器执行特殊命令

Cmnd_Alias    USERADMIN=/usr/sbin/useradd,/usr/sbin/usermod,/usr/sbin/userdel    ##定义命令别名

root    ALL=(ALL)       ALL

tom     ALL=(root)      USERADMIN    ##此处定义tom可以执行别名USERADMIN中的所有命令

tom     USERHOSTS=(ROOT)        USERADMIN    ##可以在别名USERHOSTS中机器上执行别名USERADMIN中的命令

验证:


1

2

3

4

5

[[email protected] ~]# su - tom

[[email protected] ~]$ sudo /usr/sbin/userdel -r test2    ##删除用户test2

[sudo] password for tom:

[[email protected] ~]$ tail -1 /etc/passwd    ##删除成功

test1:x:501:501::/home/test1:/bin/bash

②、设禁止某用户执行某操作


1

2

tom ALL=(root) /usr/bin/passwd [a-zA-Z]*,!/usr/bin/passwd root

##tom可以以root的身份更改密码,但禁止更改root的密码。

③、设置执特权命了时,无需输入密码


1

2

tom   ALL=(root)    /usr/sbin/useradd,NOPASSWD: /usr/sbin/userdel,/usr/sbin/groupdel,PASSWD:/usr/sbin/usermod,/usr/sbin/groupmod

##这里的/usr/sbin/useradd 操作时必须使用密码;/usr/sbin/userdel, /usr/sbin/groupdel操作时可以不使用密码(跟在其后的所有操作一律不使用密码);/usr/sbin/usermod, /usr/sbin/groupmod 操作时还是要输入密码;还有PASSWD和NOPASSWD不可定义于别名中哦!

验证:


1

2

3

4

5

6

7

8

9

10

11

12

[[email protected] ~]# su - tom

[[email protected] ~]$ sudo /usr/sbin/useradd test3

[sudo] password for tom:

[[email protected] ~]$ sudo -k

[[email protected] ~]$ sudo /usr/sbin/useradd test4

[sudo] password for tom:     ##useradd每次都需要输入密码

[[email protected] ~]$ sudo -k

[[email protected] ~]$ sudo /usr/sbin/userdel test3    ##执行userdel没有要求输入密码,NOPASSWD设置生效

[[email protected] ~]$ tail -3 /etc/passwd

tom:x:500:500::/home/tom:/bin/bash

test1:x:501:501::/home/test1:/bin/bash

test4:x:503:503::/home/test4:/bin/bash

转自:http://www.centoscn.com/CentOS/help/2014/0408/2741.html

时间: 2024-10-13 12:35:46

linux下sudo命令[转]的相关文章

Linux下sudo命令实例讲解

一.sudo简介 1.概念: sudo是linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的root命令,如halt,reboot,su等等.这样不仅减少了root用户的登陆和管理时间,同样也提高了安全性.Sudo不是对shell的一个代替,它是面向每个命令的. 它的特性主要有这样几点: 1.sudo能够限制用户只在某台主机上运行某些命令. 2.sudo提供了丰富的日志,详细地记录了每个用户干了什么.它能够将日志传到中心主机或者日志服务器. 3.sud

linux下sudo命令

[[email protected] root]$ sudo ls We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes

Linux下sudo命令的配置与使用方法

sudo的字面意思是代表super user do!对Linux系统管理员或高级用户而言,它是必不可少的最重要的命令之一.你可曾有过这样的经历:在终端中试着运行某个命令,结果却遇到"拒绝访问"?怎么办?对了,这个就是你所需要的命令!一.OK!那么下面我将举一个简单的列子,看一下如何使用配置和使用sudo来管理我们的具体服务.1.输入命令chmod u+w /etc/sudoers 2.编辑/etc/sudoers文件,输入命令vim /etc/sudoers,进入编辑模式,找到这一 行

linux su,sudo命令

linux su 命令 建议大家切换用户的时候 使用 su - root 这样,否则可能发现某些命令执行不了 关于su .su - 及 sudo的区别 请往下看 1.命令作用 su的作用是变更为其它使用者的身份,超级用户除外,需要键入该使用者的密码. 2.使用方式 su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 3.参数说明 -f , –fast:不必读启动文件(如 csh.cshrc 等),仅用于c

《linux下sudo服务的使用》RHEL6

/bin/ 下放的二进制文件命令都是普通用户可以使用的 Sbin 下放的二进制文件命令都是超级用户root可以使用的   普通用户也想使用Sbin下的文件可以通过sudo来实现: 默认普通用户是不可以使用的: 提示:没有足够大的权限   配置单个用户对某个命令或服务具有使用权 系统默认速冻软件包已经安装可以查看下: 执行 [[email protected] ~]# visudo来生成sudo配置文件.   在文件中添加: 注:赋予redhat用户在本地用户可以使用chkconfig命令,可以写

Linux 下 Shell 命令的分类及用法

导读 当你打算真正操纵好你的 Linux 系统,没有什么能比命令行界面更让你做到这一点.为了成为一个 Linux 高手,你必须能够理解 Shell命令的不同类型,并且会在终端下正确的使用它们. 在 Linux 下,命令有几种类型,对于一个 Linux 新手来说,知道不同命令的意思才能够高效和准确的使用它们.因此,在这篇文章里,我们将会遍及各种不同分类的 Linux Shell 命令.需要注意一件非常重要的事:命令行界面和 Shell 是不同的,命令行界面只是为你提供一个访问 Shell 的方式.

如何在Linux下使用命令行嗅探HTTP流量

通常我们在调试Web应用.RESTFUL服务或者排错PAC (proxy auto config) 以及检查是否有恶意访问等会去通过错误日志日志或者嗅探数据包的方式去排错:常见的嗅探数据包软件有tcpdump.wireshark;但是针对HTTP需要对数据包进行过滤,显示格式也更不容易读,Httpry工具就能更方便易读的嗅探HTTP流量 安装httpry 基于Debian(Ubuntu or Linux Mint),基础库并没有httpry包,我们用源码来安装 1 2 3 4 5 $ sudo

Linux下高频命令分类辑录(基本使用篇)

本文目的:总结linux下常用命令的基本使用方法 文档操作: 切换文件目录命令:cd 切换到指定目录文件内:cd /  (切换到根目录下,类似与Windows下用鼠标选中目标文件)   返回至上一级目录:cd .. 网络部分: 显示配置网络设备命令:ifconfig(类似与windows下的的ipconfig)   查看网络设备信息: ifconfig 修改IP地址:sudo ifconfig eth0 192.168.1.29 netmask 255.255.255.0   网卡的关闭与开启:

(转)Linux下PS命令详解

(转)Linux下PS命令详解 整理自:http://blog.chinaunix.net/space.php?uid=20564848&do=blog&id=74654 要对系统中进程进行监测控制,查看状态,内存,CPU的使用情况,使用命令:/bin/ps (1) ps :是显示瞬间进程的状态,并不动态连续: (2) top:如果想对进程运行时间监控,应该用 top 命令: (3) kill 用于杀死进程或者给进程发送信号: (4) 查看文章最后的man手册,可以查看ps的每项输出的含义