Linux 系统为了安全性考虑,使得许多系统命令和服务只能被 root 管理员来使用,
su 命令可以解决切换用户身份的需求,使得当前用户在不退出登录的情况下,顺畅地切 换到其他用户
su 命令与用户名之间有一个减号(-),这意味着完全切 换到新的用户,即把环境变量信息也变更为新用户的相应信息,而不是保留原始的信息。强 烈建议在切换用户身份时添加这个减号(-)。
当从 root 管理员切换到普通用户时是不需要密码验证的,而从普通用户切换成 root 管理员就需要进行密码验证(管理员root密码)
使用 sudo 命令把特定命令的执行权限赋予指定用户,这样既 可保证普通用户能够完成特定的工作,也可以避免泄露 root 管理员密码。
使用sudo命令可以给普通用户提供额外的权限来完成原本只有 root管理员才能完成的任务,
可以限制用户执行指定的命令,记录用户执行过的每一条命令,集中管理用户与权限 (/etc/sudoers),以及可以在验证密码后的一段时间无须让用户再次验证密码。
-h 列出帮助信息
-l 列出当前用户可执行的命令
-u 用户名或 UID 值 以指定的用户身份执行命令
-k 清空密码的有效时间,下次执行 sudo 时需要再次进行密码验证
-b 在后台执行指定的命令
-p 更改询问密码的提示语
visudo 命令用于编辑、配置用户 sudo 的权限文件,使用 visudo 命令配置权限文件时,其操作方法与 Vim 编辑器中用到的方法完全一致,只有 root 管理员才可以执行.修改存在错误会报错
谁可以使用 允许使用的主机=(以谁的身份)可执行命令的列表
谁可以使用:稍后要为哪位用户进行命令授权。
允许使用的主机:可以填写ALL表示不限制来源的主机,亦可填写如192.168.10.0/24这样的网段限制来源地址,使得只有从允许网段登录时才能使用sdo命令。
以谁的身份:可以填写ALL表示系统最高权限,也可以是另外一位用户的名字。
可执行命令的列表:可以填写ALL表示不限制命令,亦可填写如sr/bin/cat这样的文件名称来限制命令列表,多个命令文件之间用逗号(,)间隔。
[root@localhost ~]# visudo
99 ## Allow root to run any commands anywhere
100 root ALL=(ALL) ALL
101 trick ALL=(ALL) ALL
最后一行 可以看到 (ALL) ALL
[trick@localhost ~]$ 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 trick:
Matching Defaults entries for trick on localhost:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset,
env_keep="COLORS DISPLAY HOSTNAME HISTSIZE 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 trick may run the following commands on localhost:
(ALL) ALL
加权成功,trick用户可以访问/root目录
[trick@localhost ~]$ sudo ls /root
111 456 backup checkhosts.sh hoho number1.sh test1.sh
123 5 backup.acl c.txt initial-setup-ks.cfg number.sh test.sh
123.sh 66.txt BB.conf Desktop ip.txt Pictures tmp.tar.gz
2 AA.conf b.txt Documents key.sh Public trick.txt
20Z_file addusers.sh cat.sh Downloads linux sorce.sh users.txt
3 anaconda-ks.cfg CC.conf example.sh linux.txt temp1 Videos
4 A.txt ceshi haha Music Templates
让某个用户只能使用 root 管理员的身份执行指定的命令,切记一定要给出该命令的绝对路径, 否则系统会识别不出来。这时,可以先使用 whereis 命令找出命令所对应的保存路径。
99 ## Allow root to run any commands anywhere
100 root ALL=(ALL) ALL
101 trick ALL=(ALL) /usr/bin/cat,/usr/sbin/reboot
可以添加 NOPASSWD 参数, 使得用户下次再执行 sudo 命令时就不用密码验证
98 ##
99 ## Allow root to run any commands anywhere
100 root ALL=(ALL) ALL
101 trick ALL=(ALL) NOPASSWD:/usr/bin/cat,/usr/sbin/reboot
[trick@localhost ~]$ sudo reboot
Remote side unexpectedly closed network connection
──────────────────────────────────────────────────────────────────────────
Session stopped
- Press to exit tab
- Press R to restart session
- Press S to save terminal output to file
不需要密码了。
关闭每次sudo的密码 Ctrl O 回车 ctrl X
sudo visudo
%sudo ALL=(ALL:ALL) NOPASSWD:ALL