linux中/etc/passwd文件的用法
昨天被虚拟机网络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是个文本文件,里面存放给用户的拒绝连接提示信息,只要这个文件存在,用户就无法登陆,可用于维护期间禁止用户登陆
维护完成后删除,用户即可恢复登陆,已经登陆的用户不受影响。