我试图在Bash中实现一个简单的日志服务器.它应该将文件作为参数并在具有netcat的端口上提供.
( tail -f $1 & ) | nc -l -p 9977
Run Code Online (Sandbox Code Playgroud)
但问题是当netcat终止时,尾巴会被遗忘.(澄清:如果我不分叉尾程,它将继续运行,即使netcat终止.)
如果我以某种方式知道尾巴的PID然后我可以杀死它.
显然,使用$!将返回netcat的PID.
如何获得尾部过程的PID?
这是一个set-root-uid程序
$ls -l
-rwsr-sr-x 1 root root 7406 2011-12-13 22:37 ./x*
Run Code Online (Sandbox Code Playgroud)
int main(void) {
printf(
" UID GID \n"
"Real %d Real %d \n"
"Effective %d Effective %d \n",
getuid (), getgid (),
geteuid(), getegid()
);
seteuid(600);
printf(
" UID GID \n"
"Real %d Real %d \n"
"Effective %d Effective %d \n",
getuid (), getgid (),
geteuid(), getegid()
);
setuid(1000);
printf(
" UID GID \n"
"Real %d Real %d \n"
"Effective %d Effective %d \n",
getuid (), getgid (), …
Run Code Online (Sandbox Code Playgroud) 我在 ubuntu 中有一个命令
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Run Code Online (Sandbox Code Playgroud)
我想转换成ansible脚本。我在下面试过
- name: Changing ownership
command: chown $(id -u):$(id -g) $HOME/.kube/config
become: true
Run Code Online (Sandbox Code Playgroud)
但我收到如下错误
致命:[ubuntu]:失败!=> {“已更改”:t> 致命:[ubuntu]:失败!=> {"changed": true, "cmd": ["chown", "$(id", "-u):$(id", "-g)", "$HOME/.kube/config"] , "delta": "0:00:00.003948", "end": "2019-07-17 07:22:31.798773", "msg": "非零返回码", "rc": 1, "start ": "2019-07-17 07:22:31.794825", "stderr": "chown: invalid option -- 'u'\nTry 'chown --help' 了解更多信息。", "stderr_lines": ["chown : 无效选项 -- 'u'", "Try 'chown --help' 了解更多信息。"], "stdout": "", "stdout_lines": []}rue, "cmd": ["chown",
编辑: 文件模块也不起作用。
- name: Create a symbolic …
Run Code Online (Sandbox Code Playgroud) 这是一个演示我的问题的程序的完整源代码(操作系统是Ubuntu 14.04 32位,如果重要的话):
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{
int status, fd;
printf("CURRENT UID: %d, CURRENT GID: %d\n", getuid(), getgid());
fd = open("/dev/ttyS0", O_WRONLY);
if(fd < 0)
{
printf("Error opening /dev/ttyS0: %s\n", strerror(errno));
return 1;
}
printf("Successfully opened /dev/ttyS0\n");
close(fd);
/* DROP PRIVILEGES */
setgid(1000);
setuid(1000);
printf("CURRENT UID: %d, CURRENT GID: %d\n", getuid(), getgid());
fd = open("/dev/ttyS0", O_WRONLY);
if(fd < 0)
{
printf("Error opening /dev/ttyS0: %s\n", strerror(errno));
return 1; …
Run Code Online (Sandbox Code Playgroud) 我想知道euid,suid和ruid之间的区别。
我知道suid(设置用户ID)是什么,但是我想知道这3个之间的区别。