背景

事情起因源自阿里云服务上安装ES(elasticsearch),学习ES的路上可能都会遇到的一个问题,就是无法在root账户下启动ES服务,具体报错信息如下:

uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root

解决方案:创建一个新的用户,但是创建过程中并不是很顺利,于是诞生了此篇文章。
参考了网上大概相似的解决方案,但是使用未解决。
例如:https://www.cnblogs.com/Detector/p/7850099.html

  • 权限 i 说明设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。
[root@izbp1hcw0fjg64l58525bqz etc]# lsattr /etc/passwd
-----a-------e-- /etc/passwd
[root@izbp1hcw0fjg64l58525bqz etc]# chattr -a /etc/passwd
[root@izbp1hcw0fjg64l58525bqz etc]# lsattr /etc/passwd
-------------e-- /etc/passwd

但是小编的阿里云服务器中**/etc/passwd**并不是i权限,属于a权限;

究其根源,还是文件权限问题,于是乎小编一顿操作,把a权限也删除了,居然成功了;

[root@izbp1hcw0fjg64l58525bqz etc]# adduser elk
adduser:无法打开 /etc/shadow

## 很明显/etc/shadow也无法打开
[root@izbp1hcw0fjg64l58525bqz etc]# lsattr /etc/shadow
-----a-------e-- /etc/shadow
[root@izbp1hcw0fjg64l58525bqz etc]# chattr -a /etc/shadow
[root@izbp1hcw0fjg64l58525bqz etc]# adduser elk
[root@izbp1hcw0fjg64l58525bqz etc]# passwd elk
更改用户 elk 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@izbp1hcw0fjg64l58525bqz etc]# chown -R elk /opt

细心的小伙伴可能会发现上面创建过程中**/etc/shadow**也无法打开,于是小编按照相同的逻辑处理权限问题,同样成功,最后成功创建ELK用户;

扩展

对于Linux文件权限a和i进行简单的复习:

  • i:不可修改权限 例:chattr u+i filename 则filename文件就不可修改,无论任何人,如果需要修改需要先删除i权限,用chattr -i filename就可以了。查看文件是否设置了i权限用lsattr filename。

  • a:只追加权限, 对于日志系统很好用,这个权限让目标文件只能追加,不能删除,而且不能通过编辑器追加。可以使用chattr +a设置追加权限。

另外一种解决方案

对于此种解决方案是小编第一次采用的,但是并未生效
推荐优先使用上述方案,如果仍未解决,可以尝试一下这种方案是否能够解决;

  • 方案描述:
    命令:cd /etc
    ls -al(查询所有文件,包括后缀文件)
    是否存在**/etc/passwd.lock**的文件;

1.若存在使用root账户删除,原因可能是之前使用到这个文件没有正常关闭。
2.如果不存在passwd.lock文件,排查是否存在pwd.lock(小编的服务器存在这个文件,上面第一种文件不存),然后删除。
命令:rm .pwd.lock

注意.pwd.lock 这个名称可能不一样,可以到etc目录去查看

总结

安装ES踩坑问题,意识到程序员人生就要不停的学习,否则,经验从何而谈,不要怕出问题,编程之路不仅要学知识点,更重要的是解决问题。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐