sudoer file como dar a um usuário particular acesso total a apenas determinados arquivos

5

Eu quero dar a um usuário acesso total a apenas alguns arquivos. Alguém pode me mostrar como fazer isso? Por exemplo, eu quero modificar o arquivo sudoer para conceder acesso de usuário a apenas determinados arquivos. Obrigado.

    
por user270811 09.11.2015 / 02:06

3 respostas

3

Isso geralmente é feito usando grupos.

Propriedade

Os arquivos têm dois proprietários: um usuário e um grupo. Por exemplo:

$ ls -l file1.txt
-rw-rw-r-- 1 foo foo 6 Nov  9 15:37 file1.txt

Aqui, o usuário e o grupo são ambos foo .

Podemos alterar a propriedade de arquivos usando chown . Observe que o link está vinculado a uma página de manual do Linux, mas chown é bastante padronizado, então provavelmente funcionará. Em caso de dúvida, consulte o manual do seu sistema operacional ( man chown ).

Por exemplo, alterando o grupo para bar :

$ chown :bar file1.txt
$ ls -l file1.txt
-rw-rw-r-- 1 foo bar 6 Nov  9 15:37 file1.txt

Observe que o grupo bar precisa existir. Mais abaixo, você verá como adicionar novos grupos.

Permissões

As permissões são as seguintes:

-rw-rw-r--
Tuuugggooo

onde T é o tipo; para arquivos normais isso é - , para diretórios d , para links simbólicos l etc.
As uuu são as permissões do usuário: rw- : ler, gravar. As permissões do grupo ggg também são rw- . Todos os outros ( ooo ) recebem r-- ou acesso somente leitura.

Podemos alterar as permissões usando o chmod (novamente, uma página do Linux, mas chmod é bastante normal). Se quiséssemos remover a permissão de gravação do grupo bar do arquivo, poderíamos fazer:

$ chmod g-w file1.txt
$ ls -l file1.txt
-rw-r--r-- 1 foo bar 6 Nov  9 15:37 file1.txt

Adicionando um novo grupo

Você pode adicionar um grupo especificamente para gerenciar o acesso a alguns arquivos. Como isso é feito depende da plataforma. Para Linux, há addgroup :

addgroup bar

Para o FreeBSD, existe pw . Verifique o manual do seu sistema operacional para o comando correto para usar!

Adicionando usuários aos grupos

Novamente, isso depende da plataforma. Para o FreeBSD, o comando pw mencionado acima trata disso. Para Linux, é usermod .

Os usuários normalmente têm um grupo principal (ou inicial) e secundário (ou suplementar). O grupo primário é usado quando novos arquivos são criados.

Para o Linux, adicionar ( -a ) usuário foo ao grupo secundário ( -G ) bar é feito assim:

$ usermod -G bar -a foo

Agora, na próxima vez que o usuário foo fizer login, seus grupos serão atualizados. Use o comando id ( ID do Linux / FreeBSD id : bonito padrão) para inspecionar os membros do grupo:

$ id
uid=1000(foo) gid=1000(foo) groups=1000(foo),1001(bar)
    
por 09.11.2015 / 02:14
2

você pode fazer isso usando listas de controle de acesso:

1) primeiro, verifique a ACL desse arquivo:

getfacl PATH/files

a saída será algo assim:

# file: PATH/file
# owner: root
# group: root
user::rw-
group::r--
other::r--

2) defina a ACL do arquivo para definir a permissão de acesso total para um usuário específico:

setfacl -m u:USERNAME:rwx PATH/file

3) Agora, se você tentar o comando "ls -l" no seu arquivo, um sinal de adição (+) será adicionado à saída:

-rw-rwxr--+ 1 root  root      0 Nov 10 20:12 file

4) obtenha a ACL do arquivo novamente para ver as alterações (o comando é o mesmo que o passo 1), a saída será assim:

# file: file
# owner: root
# group: root
user::rw-
user:USERNAME:rwx
group::r--
mask::rwx
other::r--

você pode ver que uma exceção foi declarada para o usuário específico ter permissão para esse arquivo que é diferente do usuário proprietário, do grupo de proprietários e de outras permissões.

Espero que você resolva seu problema em breve:)

    
por 10.11.2015 / 17:48
1

Para referência, verifique man sudo , man sudoers etc.

Aqui está um exemplo somente do Linux sobre como configurar um arquivo sudoers para executar o script de serviço do SYSV Linux como root.

Edite / crie um arquivo sudoers para o usuário (usarei theusername ):

visudo /etc/sudoers.d/theusername

O formato é

# <user list> <host list> = <operator list> <tag list> <command list>

Você desejará adicionar esta linha:

theusername ALL = (root:root) NOPASSWD: /usr/sbin/service

Pode ser necessário adicionar o usuário theusername ao grupo sudo ; veja minha outra resposta para detalhes.

UPDATE

O OP (via comentários) quer executar isso:

ProcessBuilder ntpProcessBuilder = new ProcessBuilder(
    "/bin/sh", "-c",
    "echo " + PUB_PASSWORD + 
    "| sudo -S bash -c \"cp -f " + ntp_conf_file_temp + " " + ntp_conf_file +
    "; service ntp reload\"" );

Isso exigirá a configuração de permissões de arquivo para poder substituir o ntp_conf_file , que consideraremos pertencer ao root. Veja a outra resposta para detalhes. No entanto, aqui está uma solução alternativa, usando um script, colocado em /etc/ntp-update.sh :

#!/bin/bash
/bin/cp /etc/managed-ntp/temp.conf /etc/ntpd/ntp.conf
/usr/sbin/service ntp reload

Como você pode ver, os caminhos dos arquivos são codificados para segurança.

Para configurá-lo, editamos o arquivo sudoers para o usuário dar acesso para executar esse script como root:

theusername ALL = (root:root) NOPASSWD: /etc/ntp-update.sh

E crie o diretório:

mkdir /etc/managed-ntp
chmod 2775 /etc/managed-ntp
chown theusername:theusergroup /etc/managed-ntp

O 2 em 2775 é o setgid bit, que garante que os arquivos criados nesse diretório sejam de propriedade do grupo do diretório. Quando executado como root, isso não é realmente necessário, mas pode ser útil.

Agora, o aplicativo pode fazer isso:

// Make sure you write ntp_conf_file_tmp in /etc/managed-ntp/temp.conf!    
ProcessBuilder ntpProcessBuilder = new ProcessBuilder(
    "/usr/bin/sudo", "/etc/ntp-update.sh"
);
    
por 09.11.2015 / 21:46