linux中/etc/passwd文件的用法

时间:2024-02-18 07:06:00

昨天被虚拟机网络samba问题殴打了一天,最终解决,睡了个好觉,一早醒来,想起看到类似这样一段话:

“大多数的服务器都禁止了root账户的直接登陆,而是利用sudo将权限分配给其他管理员,或者先用普通用户登陆,再su成root用户来进行操作,降低了风险。”

于是动手开始进行操作:

sudo vi /etc/passwd 

直接编辑passwd文件,将root用户的后面加上了nologin

root:x:0:0:root:/root:/bin/bash/nologin

试验一下,果然不许登陆了(其实写错了,正确的应该是root:x:0:0:root:/root:/bin/bash:/sbin/nologin)

but.....

sudo -i和su指令都无法登陆到root账户下

sudo -i
sudo: /bin/bash/: command not found

su
Password:
su: incorrect password

赶紧改回来

root:x:0:0:root:/root:/bin/bash/

还是不成,有点头大了,reboot下看看吧

>_<.....难道要动用那个术了?

正当想使用SL绝招通杀一切时,又看了一眼passwd文件,发现正确的写法是:/sbin/bash,正常用户的配置文件是:/bin/bash

ls /bin/bash/
ls: cannot access /bin/bash/: Not a directory

ls -l /bin/bash

-rwxr-xr-x. 1 root root 938832 Jul 18  2013 /bin/bash

没有d,这是一个文件,而非目录,难怪无法登陆

修改回来,一切正常

=================================================================华丽的分隔线

下面是转载的一些参考内容,里面有nologin文件的详细用法

=================================================================

早上来了没什么事看会鸟哥的Linux私菜房,看看用户管理的相关东西。知道了Linux用户管理最重要的两个文件就是/etc/passwd和/etc/shadow这两个文件。其中/etc/passwd是用来存储登陆用户信息的,它的基本格式如下:

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

由上面的格式可以看出,每一行代表一个用户的信息,一共包括7个字段的信息,每个字段的信息用冒号隔开。这7个字段分别代表:

1. 账号名称:即登陆时的用户名

2. 密码:早期UNIX系统的密码是放在这个文件中的,但因为这个文件的特性是所有程序都能够读取,所以,这样很容易造成数据被窃取,因此后来就将这个字段的密码数据改放到/etc/shadow中了

3. UID:用户ID,每个账号名称对应一个UID,通常UID=0表示root管理员

4. GID:组ID,与/etc/group有关,/etc/group与/etc/passwd差不多,是用来规范用户组信息的

5. 用户信息说明栏: 用来解释这个账号是干什么的

6. 家目录:home目录,即用户登陆以后跳转到的目录,以root用户为例,/root是它的家目录,所以root用户登陆以后就跳转到/root目录这里

7. Shell:用户使用的shell,通常使用/bin/bash这个shell,这也就是为什么登陆Linux时默认的shell是bash的原因,就是在这里设置的,如果要想更改登陆后使用的shell,可以在这里修改。另外一个很重要的东西是有一个shell可以用来替代让账号无法登陆的命令,那就是/sbin/nologin。

当我看到这里的时候,我就去登陆我们实验室的服务器,打开/etc/passwd这个文件,里面果然有很多的类似上面格式的用户账号信息。由于我们实验室服务器开放了ftp服务,而我正好有一个ftp的账号,我看到我的账号信息是这样的lxb:x:530:525::/opt/ftp:/sbin/nologin,通过上面的学习,我觉得它的意思大概是这样的,用户名是lxb,x表示密码经过加密放到/etc/shadow文件中了,UID是530,GID是525,访问的目录是/opt/ftp,我看了一下,这个目录下的内容正好是我登陆ftp后所看到的,至于最后一个/sbin/nologin,应该是登录时候使用的shell,但是它为什么是nologin呢,难道不让我登陆吗?

于是我用root权限登陆到里面,把后面的/sbin/nologin改成了/bin/bash,重新用ssh进行登陆,真的登陆进去了,而且登陆后的目录正好是/opt/ftp。但是我的权限依旧没有改变,很多文件还是打不开。于是我明白了,这个nologin的作用就是限制某些用户通过ssh登陆到shell上。有时候为了进行系统维护工作,临时禁止其他用户登录,可以使用 nologin 文件,具体做法是在/etc/目录下创建一个名称为 nologin 的文件。例如:

#touch /etc/nologin

这样将禁止随后的用户登录到系统中。禁止用户登录时,/etc/nologin 文件中的内容将会显示给用户,会一闪而过。例如,按如下方式创建 nologin 文件:
disable login by admin temperarily!

当用户试图登陆时,将会给用户显示"disable login by admin temperarily!",当系统维护结束以后,再删除/etc/nologin文件,其他用户就又可以恢复登陆了,这只是限于能登陆shell的用户来说的,对于那些登陆shell为/sbin/nologin的用户来说没有影响,因为他们本身就无法登陆shell。

================================================================

禁止root用户直接登陆sshd

-----------------------------------------------------------------------------------------------------

  • linux最高权限用户root,默认可以直接登录sshd。为了提高服务器的安全度,需要对它进行禁止,使得攻击者无法通过暴力破解来获取root权限。

1,新建一个用户;

#useradd xxx (xxx为你要新建的用户名)

2,为新用户设置密码;

#passwd xxx (xxx为你要新建的用户名)

3,修改SSHD配置,禁止root直接登录

#vi /etc/ssh/sshd_config

查找“#PermitRootLogin yes”,将前面的“#”去掉,短尾“Yes”改为“No”,并保存文件。

4,修改完毕后,重启sshd服务

#service sshd restart

5,下次登录,先使用xxx登录,然后通过su root 来获取root权限。

 

  • 修改sshd默认端口

虽然更改端口无法在根本上抵御端口扫描,但是,可以在一定程度上提高防御。

1.打开sshd配置文件

#vi /etc/ssh/sshd_config

2.找到#Port 22字段删掉#,将22改为其他不被使用的端口

服务器端口最大可以开到65536

3.重启sshd服务

#service sshd restart

4.别忘了修改登陆工具那的端口设置。

=======================================================================

conclusion

1.做事的时候要细心,一个符号,字母,/都能引起意想不到的后果

2.动手前留备份文件

3./etc/nologin是个文本文件,里面存放给用户的拒绝连接提示信息,只要这个文件存在,用户就无法登陆,可用于维护期间禁止用户登陆

 维护完成后删除,用户即可恢复登陆,已经登陆的用户不受影响。