分类 LINUX 下的文章

ubunut添加用户生成sshkey添加sudo权限

先创建公匙(.pub结尾),用户写入到authorized_keys,私匙是自己用
ssh-keygen
可以全部置空
创建用户
useradd 用户名
passwd 用户名
然后在/home目录下就会为该新用户创建一个主目录,在主目录中创建.ssh目录,然后在.ssh目录下创建authorized_keys文件,在文件中将用户的公钥添加进去,然后用户就可以用密钥登陆了。
然后把 公匙的内容写入到authorized_keys,之后权限设置为600
然后把私匙下载下来,作为ssh key就可以了
为用户指定shell脚本,修改/etc/passwd
为用户添加sudo权限
vim /etc/group
在adm和sudo行之后加上新建的用户名就好了

/etc/passwd详解:
https://www.cyberciti.biz/faq/understanding-etcpasswd-file-format/
https://blog.csdn.net/u011534057/article/details/51679358

linux对文件路径和文件名长度的限制

linux对文件夹以及文件名的长度做了限制,以ubuntu为例,描述文件路径为:/usr/include/linux/limits.h

#ifndef _LINUX_LIMITS_H
#define _LINUX_LIMITS_H

#define NR_OPEN         1024

#define NGROUPS_MAX    65536    /* supplemental group IDs are available */
#define ARG_MAX       131072    /* # bytes of args + environ for exec() */
#define LINK_MAX         127    /* # links a file may have */
#define MAX_CANON        255    /* size of the canonical input queue */
#define MAX_INPUT        255    /* size of the type-ahead buffer */
#define NAME_MAX         255    /* # chars in a file name */
#define PATH_MAX        4096    /* # chars in a path name including nul */
#define PIPE_BUF        4096    /* # bytes in atomic write to a pipe */
#define XATTR_NAME_MAX   255    /* # chars in an extended attribute name */
#define XATTR_SIZE_MAX 65536    /* size of an extended attribute value (64k) */
#define XATTR_LIST_MAX 65536    /* size of extended attribute namelist (64k) */

#define RTSIG_MAX     32

#endif

android对文件名和路径也有类似的限制,据说文件名太长,可能会造成扫描直接崩溃。

通过curl发送json数据报错syntax error, expect {, actual [, pos 0

在shell里面通过curl发送json数据到另外一个服务器的时候报错syntax error, expect {, actual [, pos 0,死活都无法通过,代码片段为:

postcontent=`sed ":a;N;s/\n//g;ta" $OUTFILE`
echo $postcontent
curl -l -H "Content-type: application/json" -X POST -d '$postcontent' http://vpn.ciika.com/vpnport/updatestatus

其中postcontent为:

{"id":"sg1","in":891,"out":1753,"list":[{"server":"172.26.2.174:22","rate":3011},{"server":"clients","rate":1782}]}

开始有两个猜测,json是否是否被切断了,从打印的结果来看,是完整的,另外猜测-d里面的单引号是否有问题,经过尝试后发现确实是单引号的问题,修改为双引号问题解决:

curl -l -H "Content-type: application/json" -X POST -d "$postcontent" http://vpn.ciika.com/vpnport/updatestatus

参考:
https://stackoverflow.com/questions/26614423/trouble-with-bash-shell-script-attempting-to-post-variable-json-data-using-curl

ubuntu crontab 不执行的解决方法

在linux上需要监控网络的流量,在crontab里面设置的是每分钟执行一次,但是没达到自己想要的结果,分析过程如下:
1.查看/var/log/syslog发现有错误,info (No MTA installed, discarding output),意识到crontab的脚本没有把输出到日志
2.输出到日志后,发现sorry,I can not detect any network device,please report this issue to author.,这个错误是脚本里面打印的,说明其实是crontab是执行了
3.输出这个是找不到网卡,crontab里面找不到eth0,ifconfig这个写全路径后/sbin/ifconfig,这个错误消失了
4.错误在一步步减少,但是任然和预想的有差距,在脚本里面输出echo $PATH后发现:/usr/bin:/bin,但是其实正式的环境变量应该是:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
5.修改脚本,在顶部直接导入环境变量PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games,问题解决

ubuntu16.04修改limits.conf后链接限制仍然不生效

平时用centos比较多,由于aws的lightsail没有centos版本,只能选择ubuntu16.04的版本,拿到一台服务器后,首先得修改连接限制,修改/etc/security/limits.conf后发现根本不起作用,重启后依然不行,结果一番尝试后,解决方案如下:
一、保证session required pam_limits.so被打开
编辑/etc/pam.d/su,找到下列行

# Sets up user limits, please uncomment and read /etc/security/limits.conf
# to enable this functionality.
# (Replaces the use of /etc/limits in old login)
#下面这一行一定要打开
session required pam_limits.so

二、再次修改limits.conf
vim /etc/security/limits.conf

* soft nofile 65534
* hard nofile 65534
root soft nofile 65534
root hard nofile 65534

这样重启后就能生效,ubuntu的root用户必须注明用户