chmod 777 /etc/sudoers
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了chmod 777 /etc/sudoers相关的知识,希望对你有一定的参考价值。
参考技术A记录一次比较弱智的行为,希望这篇文章到我为止,不要再有相同的人犯如此低级的错误
在服务器上,创建一个用户,希望将它加入root组,拥有root权限,所以使用了一个错误的行为,首先 chmod 777 /etc/sudoers 给这个文件所有权限,首先这个命令本身就比较弱智,因为在服务器上,很少有情况需要将一个文件的所有权限都给到。很自信的执行命令之后,傻眼了,这台服务器上的所有用户都失去了sudo权限,当执行sudo的时候出现以下错误:
它告诉你sudoers这个文件是全局可写的,不允许你执行这个操作,因为它毫无安全性可言,其次,也是最关键的,正常人的思维是再把权限修改回去不就OK了,但是etc是普通用户无法切入的,所以普通用户无法修改这个文件的权限。更要命的是,执行了网上各种解决方案,都需要知道root用户的密码,问题是我怎么知道。悲剧了。。。。
不幸中的万幸,我们这台服务器在自己本地
重启服务器,长按 esc 键,进入linux启动界面,这个时候会看到以下选项:
选择 Advanced options for Ubuntu ,回车;
接下来会进入另一个界面,如下所示:
选择 Ubuntu, with Linux 4.4.0-38-generic(recovery mode) 模式;
接下来会进入另一个页面, Recovery Menu(filesystem state: read-only)
选择 root ,然后回车。
这时候会在底部出现shell命令的界面,执行如下两步操作(顺序不能错):
重启虚拟机,正常启动,这个时候 ll /etc/sudoers ,但愿能看到你想要的效果。
Debian软件安装
配置/etc/apt/sources.list
- 通过root权限修改/etc/apt/sources.list
$ su #输入密码进入root权限 $ chmod 0666 /etc/apt/sources.list #取消只读属性 $ gedit /etc/apt/sources.list #修改内容 $ chmod 0644 /etc/apt/sources.list #恢复只读属性 $ apt-get update #保存更新 $ sudo apt-get dist-upgrade #发布版升级 $ dpkg -l |grep ^rc|awk ‘{print $2}‘ |sudo xargs dpkg -P #将系统中所有安装过,现在已经删除,但保留有配置文件的包,再把这些配置文件通通都删掉。
- source.list文件格式说明
- 类型
deb_二进制软件
deb-src_软件的源代码 - url 开源镜像站
1.安全情报保持您 Debian 系统的安全性非常重要
2.Debian 全球镜像站#安全情报 deb http://security.debian.org/ jessie/updates main contrib non-free
中国大陆
3.网易开源镜像站#Debian 全球镜像站_中国大陆 deb http://ftp.cn.debian.org/debian/ jessie main deb-src http://ftp.cn.debian.org/debian/ jessie main
4.阿里云开源镜像#网易开源镜像站 deb http://mirrors.163.com/debian/ jessie main non-free contrib deb http://mirrors.163.com/debian/ jessie-updates main non-free contrib deb http://mirrors.163.com/debian/ jessie-backports main non-free contrib deb-src http://mirrors.163.com/debian/ jessie main non-free contrib deb-src http://mirrors.163.com/debian/ jessie-updates main non-free contrib deb-src http://mirrors.163.com/debian/ jessie-backports main non-free contrib deb http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib deb-src http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib
*url里边包含/dists/(发行版)#阿里云开源镜像 deb http://mirrors.aliyun.com/debian/ jessie main non-free contrib deb http://mirrors.aliyun.com/debian/ jessie-proposed-updates main non-free contrib deb-src http://mirrors.aliyun.com/debian/ jessie main non-free contrib deb-src http://mirrors.aliyun.com/debian/ jessie-proposed-updates main non-free contrib
- debian版本号
lsb_release -a
命令可以查看 - 内容
- main Debian 里最基本及主要且符合自由软件规范的软件 ( packages )。
- contrib 这里头软件虽然可以在 Debian 里头运作,即使本身属于自由软件但多半却是相依于非自由 ( non-free ) 软件。
- non-free 不属于自由软件范畴的软件。
- non-us 这个分类里头的软件都来自非美国地区,当中可能有牵扯到专利、加密..等等问题。
- marillat
对应 Christian Marillat 的软件仓库,包括mplayer, transcode等。 - rareware
对应 rarewares.org 的软件仓库, 包括很多音效程序,如lame, musepack, beep media player等。 - ustc
对应 [email protected] 维护的一些软件包,如 mule-gbk, gaim-openq, scim, stardictdicts, patched xpdf, irssi, xmms。 - Java
对应 Blackdown java。包括 j2re, j2sdk ,mozilla java plugin。 - firefly
对应打过firefly补丁的包,包括 fontconfig mozilla mozilla firefoxpango1.0 qt-x11-free xft - misc
对应其它无分类的包,包括 nvidia-kernel,winex3, rox, chmsee等
- 类型
终端命令
- sudo
- apt-get
- apt-get是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。
- apt-get命令一般需要root权限执行,所以一般跟着sudo命令。
apt-get install packagename
安装一个新软件包apt-get remove packagename
卸载一个已安装的软件包(保留配置文档)apt-get remove --purge packagename
卸载一个已安装的软件包(删除配置文档)apt-get autoremove packagename
删除包及其依赖的软件包apt-get autoremove --purge packagname
删除包及其依赖的软件包+配置文件,比上面的要删除的彻底一点apt-get autoclean
apt会把已装或已卸的软件都备份在硬盘上,所以假如需要空间的话,能够让这个命令来删除您已卸载掉的软件的备份。apt-get clean
这个命令会把安装的软件的备份也删除,但是这样不会影响软件的使用。apt-get upgrade
可以使用这条命令更新软件包,apt-get upgrade不仅可以从相同版本号的发布版中更新软件包,也可以从新版本号的发布版中更新软件包,尽管实现后一种更新的推荐命令为apt-get dist-upgrade
在运行apt-get upgrade
命令时加上-u选项很有用(即:apt-get -u upgrade
)。这个选项让APT显示完整的可更新软件包列表。不加这个选项,你就只能盲目地更新。APT会下载每个软件包的最新更新版本,然后以合理的次序安装它们。注意在运行该命令前应先运行apt-get update
更新数据库,更新任何已安装的软件包。apt-get dist-upgrade
将系统升级到新版本。
- apt-cache
apt-cache search string
在软件包列表中搜索字符串。
*dpkg -l package-name-pattern
列出任何和模式相匹配的软件包。假如您不知道软件包的全名,您能够使用“package-name-pattern
”。apt-cache showpkg pkgs
显示软件包信息。apt-cache dumpavail
打印可用软件包列表。apt-cache show pkgs
显示软件包记录,类似于dpkg –print-avail
apt-cache pkgnames
打印软件包列表中任何软件包的名称。apt-file search filename
查找包含特定文档的软件包(不一定是已安装的),这些文档的文档名中含有指定的字符串。apt-file是个单独的软件包。您必须先使用apt-get install来安装他,然后运行apt-file update
。假如apt-file search filename
输出的内容太多,您能够尝试使用apt-file search filename | grep -w filename
(只显示指定字符串作为完整的单词出现在其中的那些文档名)或类似方法,例如:apt-file search filename | grep /bin/
(只显示位于诸如/bin或/usr/bin这些文件夹中的文档,假如您要查找的是某个特定的执行文档的话,这样做是有帮助的)。apt-get autoclean
定期运行这个命令来清除那些已卸载的软件包的.deb文档。通过这种方式,您能够释放大量的磁盘空间。假如您的需求十分迫切,能够使用apt-get clean以释放更多空间。这个命令会将已安装软件包裹的.deb文档一并删除。大多数情况下您不会再用到这些.debs文档,因此假如您为磁盘空间不足而感到焦头烂额,这个办法也许值得一试。
sudo apt-get install
- dpkg
dpkg -i *.deb
本地安装dpkg --force-all --purge packagename
有些软件很难卸载,而且还阻止了别的软件的应用,就能够用这个,但是有点冒险。dpkg -S file
这个文档属于哪个已安装软件包。dpkg -L package
列出软件包中的任何文档。dpkg -l
列出所有已安装的软件包。
- aptitude
周详查看已安装或可用的软件包。和apt-get类似,aptitude能够通过命令行方式调用,但仅限于某些命令——最常见的有安装和卸载命令。
由于aptitude比apt-get了解更多信息,能够说他更适合用来进行安装和卸载。
子进程
已安装 pre-removal 脚本 返回了错误号 1或2 与 子进程 已安装 post-installation 脚本 返回了错误号 1或2
一、子进程 已安装 pre-removal 脚本 返回了错误号 1或2 解决办法:
sudo gedit /var/lib/dpkg/status
找到Package: <package name>,比如Package: vsftpd
删除这部分的描述,删到下个Package: XXX前就好。存档后,再进行操作就OK了。
二、子进程 已安装 post-installation 脚本 返回了错误号 1或2 解决办法:
sudo rm /var/lib/dpkg/info/<package name>.*
比如sudo rm /var/lib/dpkg/info/vsftpd.*,存档后,再进行操作就OK了。
Linux清除已删除软件包的配置文件
今天清理一下系统,使用了一个命令行,可能对其他人有参考价值
dpkg -l |grep "^rc"|awk ‘{print $2}‘ |xargs aptitude -y purge
用途:
删除已经删除的软件包的残留配置文件。因为 debian 中 remove 包不删除配置文件,purge 才能清除,但根据依赖关系自动清除都是 remove,在加上自己失手操作,所以用得时间长了,难免残留很多没必要的配置文件,比较烦,于是有了上述操作。
说明:
- dpkg -l
列出系统中安装的所有包的状态,ii‘ 开头的是正常安装的包,
rc‘开头的则是删除但仍留下配置文件的包,其他状态则是有错误的状态,自己执行一次就明白了,输出结果的开头有说明的。
- grep "^rc"
提取以 rc 开头的包,也就是被删除但仍残留配置文件的包的信息的行。
- awk ‘{print $2}‘
打印这些包的名字,他们位于 dpkg -l 输出结果的第二个字段,估计有很多人是通过这个命令认识到 awk 的,也有很多人只在这个命令行中才使用 awk,我就是其中之一。
- xargs aptitude -y purge
把上述输出,也就是要清除配置文件的包的名字放在 aptitude -y purge 后面,purge命令会清除配置文件,而 -y 参数会自动对后面 aptitude 命令的提示回答是,这个开关通常是危险的,所以在一般情况下不要轻易使用,而在这里,如果你确定这些包的配置文件的清除是没有问题的的话,可以使用这个开关。
以上是关于chmod 777 /etc/sudoers的主要内容,如果未能解决你的问题,请参考以下文章
CentOS 怎么设置某个目录包括子目录的写入权限 777呢
愚蠢地执行了sudo rm /lib64/libc.so.6 请问该怎么办
Linux(fedora)下启动MySQL,结果显示:env: /etc/init.d/mysql:权限不够。 我已经将权限切换到su了